首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Woocommerce中基于选择运输方法的隐藏支付方法

在Woocommerce中基于选择运输方法的隐藏支付方法
EN

Stack Overflow用户
提问于 2019-03-25 19:28:48
回答 2查看 4.7K关注 0票数 1

我想隐藏一些支付方法,并启用另一个当我选择一个指定的“航运方法”在灵活的航运插件形式wpdesk。

我已经试过这个密码了:

代码语言:javascript
复制
add_filter( 'woocommerce_available_payment_gateways', 'gateway_disable_shipping_326' );
function gateway_disable_shipping_326( $available_gateways ) {
    global $woocommerce;

    if ( !is_admin() ) {
        $chosen_methods  = WC()->session->get( 'chosen_shipping_methods' );
        $chosen_shipping = $chosen_methods[0];

        if ( isset( $available_gateways['payment_method_cod'] ) && 0 === strpos( $chosen_shipping, 'flat_rate:6' ) ) {
            unset( $available_gateways['payment_method_cod'] );
        }
    }
    return $available_gateways; 
}

还有这张

代码语言:javascript
复制
function my_custom_available_payment_gateways( $gateways ) {
    $chosen_shipping_rates = WC()->session->get( 'chosen_shipping_methods' );
    if ( in_array( 'flat_rate:6', $chosen_shipping_rates ) ) :
        unset( $gateways['payment_method_cod'] );
        endif;
    if ( in_array( 'flat_rate:8', $chosen_shipping_rates ) ) :
        unset( $gateways['payment_method_przelewy24'] );
    endif;
    return $gateways;
}

add_filter( 'woocommerce_available_payment_gateways', 'my_custom_available_payment_gateways' );

链接到我的网站: www.dajati.pl

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-26 00:01:42

下面的代码示例将启用/禁用基于所选发货方法的支付网关。

在这个例子中,我们有3个运输方法和3个支付网关。每个选择的运输方法将只启用一个不同的支付网关。

代码语言:javascript
复制
add_filter( 'woocommerce_available_payment_gateways', 'payment_gateways_based_on_chosen_shipping_method' );
function payment_gateways_based_on_chosen_shipping_method( $available_gateways ) {
    // Not in backend (admin) and Not in order pay page
    if( is_admin() ||  is_wc_endpoint_url('order-pay') ) 
        return $available_gateways;
     
    // Get chosen shipping methods
    $chosen_shipping_methods = (array) WC()->session->get( 'chosen_shipping_methods' );

    if ( in_array( 'flat_rate:12', $chosen_shipping_methods ) )
    {
        unset( $gateways['bacs'] );
        unset( $gateways['cod'] );
    }
    elseif ( in_array( 'flat_rate:14', $chosen_shipping_methods ) )
    {
        unset( $gateways['bacs'] );
        unset( $gateways['paypal'] );
    }
    elseif ( in_array( 'free_shipping:10', $chosen_shipping_methods ) )
    {
        unset( $gateways['cod'] );
        unset( $gateways['paypal'] );
    }

    return $gateways;
}

代码在您的活动子主题(或活动主题)的functions.php文件中。测试和工作。

要使能够获得正确的发送方法ID,可以使用浏览器检查器,方法如下:

票数 4
EN

Stack Overflow用户

发布于 2021-05-07 16:26:01

因为我也在寻找解决方案,LoicTheAztec的答案是删除所有的付款,这里是一个稍微修改的工作解决方案。

代码语言:javascript
复制
add_filter( 'woocommerce_available_payment_gateways', 'payment_gateways_based_on_chosen_shipping_method' );
function payment_gateways_based_on_chosen_shipping_method( $available_gateways ) {
    // Not in backend (admin) and Not in order pay page
    if( is_admin() ||  is_wc_endpoint_url('order-pay') ) 
        return $available_gateways;
     
    // Get chosen shipping methods
    $chosen_shipping_methods = (array) WC()->session->get( 'chosen_shipping_methods' );

    if ( in_array( 'flat_rate:12', $chosen_shipping_methods ) )
    {
        unset( $available_gateways['bacs'] );
        unset( $available_gateways['cod'] );
    }
    elseif ( in_array( 'flat_rate:14', $chosen_shipping_methods ) )
    {
        unset( $available_gateways['bacs'] );
        unset( $available_gateways['paypal'] );
    }
    elseif ( in_array( 'free_shipping:10', $chosen_shipping_methods ) )
    {
        unset( $available_gateways['cod'] );
        unset( $available_gateways['paypal'] );
    }

    return $available_gateways;
}

唯一的区别是,所有$gateways都必须更改为$available_gateways,反之亦然。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55345129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档