Woocommerce交付&;付款选项-什么´;我的php代码有问题


Woocommerce delivery&payment options - What´s wrong with my php code?

我试图在Wooccommerce中隐藏一些付款选项,以防出现特定的交付选项。我试着把它放在我的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' );

我的研究:

链路1

链路2

链路3

链接4

可用的传递方法不会作为筛选器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'
);

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

$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' );