Woocommerce:选择特定送货选项时隐藏付款率

时间:2017-11-09 11:07:02

标签: php wordpress woocommerce

我有一个Woocommerce实例,其中有3种不同的付款方式和9种不同的运费--3个区域,每个区域有3种不同的费率。

每个区域中的1个费率应该只允许显示1个支付网关,但到目前为止,我只能为每个运输方法获取网关,或者没有任何一个。

其中2种运费是不同的费率,所以我希望我可以使用' table_rate:##'在隐藏运费的功能中。

到目前为止我尝试的代码如下。如果选定的运费是ID为54的表格费率,则仅用于删除winbnk运输选项,但无论选择的运送方式如何,它都会删除网关。

我发了一个小学生错误或误解了运费方法功能。

add_filter('woocommerce_available_payment_gateways','remove_payment_gateway_by_shipping_option');

function remove_payment_gateway_by_shipping_option($available_gateways){
global $woocommerce;
    $chosen_methods = WC()->session->get( 'chosen_shipping_methods' );
    $chosen_shipping = $chosen_methods[0];

if($chosen_shipping = 'table_rate:54'){
    unset( $available_gateways['winbnk'] );

 }    
    return $available_gateways;
}

以下解决方案对我有用,希望它对其他人有用。

add_filter( 'woocommerce_available_payment_gateways', 'shipping_disables_payment_gateway' );

function shipping_disables_payment_gateway( $available_gateways ) {
global $woocommerce;
$chosen_methods = WC()->session->get( 'chosen_shipping_methods' );
$chosen_shipping = $chosen_methods[0];
    if ( isset( $available_gateways['winbnk'] ) && 0 === strpos( $chosen_shipping, 'table_rate:54' ) ) {
unset( $available_gateways['winbnk'] );
}    
return $available_gateways;
}

2 个答案:

答案 0 :(得分:0)

如果您选择了具有特定标题的特定选项,则会删除paypal的付款选项。你可以使用这段代码,

function alter_shipping_methods($list){
    $chosen_titles = array();
    $available_methods = WC()->shipping->get_packages();
    $chosen_rates = ( isset( WC()->session ) ) ? WC()->session->get( 'chosen_shipping_methods' ) : array();
 
    foreach ($available_methods as $method)
           foreach ($chosen_rates as $chosen) {
                if( isset( $method['rates'][$chosen] ) ) $chosen_titles[] = $method['rates'][ $chosen ]->label;
            }
 
    if( in_array( 'Home Delivery', $chosen_titles ) ) {
        $array_diff = array('WC_Gateway_Paypal');
        $list = array_diff( $list, $array_diff );
    }
    return $list;
}
add_action('woocommerce_payment_gateways', 'alter_shipping_methods');

您可以获得有关同一主题的更多详细信息,请点击链接:http://www.bolderelements.net/support/knowledgebase/hide-payment-gateway-based-on-shipping-option-selected/

答案 1 :(得分:0)

这就是答案。希望它可以帮助别人。

add_filter( 'woocommerce_available_payment_gateways', 'shipping_disables_payment_gateway' );

function shipping_disables_payment_gateway( $available_gateways ) {
global $woocommerce;
$chosen_methods = WC()->session->get( 'chosen_shipping_methods' );
$chosen_shipping = $chosen_methods[0];
    if ( isset( $available_gateways['winbnk'] ) && 0 === strpos( $chosen_shipping, 'table_rate:54' ) ) {
unset( $available_gateways['winbnk'] );
}
return $available_gateways;
}