【问题标题】:Woocommerce delivery&payment options - What´s wrong with my php code?Woocommerce 交付和付款选项 - 我的 php 代码有什么问题?
【发布时间】:2014-06-11 00:14:22
【问题描述】:

我试图在 Woocommerce 中隐藏一些支付选项,以防出现特定的交付选项。我试图把它放到我的functions.php中,但它不起作用,我不知道为什么。 你能帮帮我吗?

    function payment_gateway_disable_country( $available_gateways, $available_methods )
    {
    global $woocommerce;
    if ( isset( $available_methods['local_delivery'] ) ){
    unset( $available_gateways['paypal'] );
    }
    return $available_gateways;
    }
    add_filter( 'woocommerce_available_payment_gateways', 'payment_gateway_disable_country' );

我的研究:

link 1

link 2

link 3

link 4

【问题讨论】:

    标签: php wordpress paypal woocommerce payment-gateway


    【解决方案1】:

    可用的交付方法不会作为参数传递到过滤器woocommerce_available_payment_gateways - 您需要加载它们并检查它们。

    如果用户选择本地交付,下面的代码应删除贝宝付款选项一。如果您的结帐页面是基于 AJAX 的页面,那么当用户更改交付方式时,可用的付款选项也应更改。

    function payment_gateway_disable_country($available_gateways) {
    
        global $woocommerce;
    
        $packages = $woocommerce->shipping->get_packages();
    
        foreach ( $packages as $i => $package ) {
            $chosen_method = isset( $woocommerce->session->chosen_shipping_methods[ $i ] ) ?
                $woocommerce->session->chosen_shipping_methods[ $i ] :  '';
    
            if ('local_delivery' == $chosen_method) {  
                unset($available_gateways['paypal']);
                break;
            }
        }
    
        return $available_gateways;
    
    }
    
    add_filter(
        'woocommerce_available_payment_gateways',
        'payment_gateway_disable_country'
    );
    

    如果您对代码有任何问题,请告诉我;我没有机会用 woocommerce 对其进行测试。

    【讨论】:

    • 感谢您的回答,但不幸的是它仍然无法正常工作,不知道为什么......结果还是一样,没有任何改变......
    • 啊,非常抱歉 - 我的一些错误。最新版本的 Woocommerce 语法不正确,我也忘记了运输选择器和支付网关列表通常显示在同一页面上,因此没有选择运输方式。更新了代码,如果 local_delivery 是可用的运输方式之一,它现在不会显示 paypal。已经对此进行了测试,它对我有用。
    • 刚刚进行了另一次更新 - 如果您使用的是 AJAX 结帐页面,那么现在可用的支付网关将在用户更改其运输选项时更新
    • 很抱歉,我无法让它工作,我将代码粘贴到functions.php中,替换了旧的但仍然没有。这是网站:vobart.cz/pokladna(运费: “Na dobirku”是“本地交付”,选择后,贝宝仍然有效且可见...
    • 您运行的是哪个版本的 woocommerce?您可以尝试在函数中添加error_log("running");,然后在访问结帐页面时检查错误日志?
    【解决方案2】:

    $available_methods 将无法在您的函数中访问。所以首先将它全局定义为函数内部的全局变量,有点像这样:

    global $available_methods;
    $available_methods = array( 'local_delivery' => 'yes' );
    
    function payment_gateway_disable_country( $available_gateways )
    {
    global $woocommerce, $available_methods;
    if ( isset( $available_methods['local_delivery'] ) ){
    unset( $available_gateways['paypal'] );
    }
    return $available_gateways;
    }
    add_filter( 'woocommerce_available_payment_gateways', 'payment_gateway_disable_country' );
    

    【讨论】:

    • 我猜他想获得用户选择的交付方式——而不仅仅是一些硬编码数组中的值。
    • 我只需要 COD 支付网关用于本地交付选项和其他交付选项 BACS 和 PAYPAL 支付网关。我尝试了 Ratnakar 的解决方案,但仍然没有任何变化。
    • @madebydavid 我想指出第二个参数不起作用,正如用户在他的问题中提到的那样。他需要通过全局设置或最佳选项来访问,他应该尝试您的解决方案
    • @user2295265 你应该试试madebydavid的解决方案,它有效,我测试过了
    猜你喜欢
    • 2019-03-10
    • 2016-06-20
    • 2020-02-10
    • 2015-04-01
    • 2012-09-29
    • 2020-11-04
    • 2022-07-01
    • 2018-07-04
    • 2014-06-27
    相关资源
    最近更新 更多