【问题标题】:Woocommerce: Hide payment rates when specific shipping option is selectedWoocommerce:选择特定运输选项时隐藏付款率
【发布时间】:2017-11-09 11:07:01
【问题描述】:

我有一个 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;
}

【问题讨论】:

    标签: php wordpress woocommerce


    【解决方案1】:

    如果您选择了带有特定标题的特定选项,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/

    【讨论】:

    • 这不起作用,但我找到了一个解决方案,已在上面进行了修改。
    【解决方案2】:

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

    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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-01
      • 2020-04-04
      • 2018-11-09
      相关资源
      最近更新 更多