Woocommerce交付和支付选项-我的php代码有什么问题?

Woocommerce交付和支付选项-我的php代码有什么问题?,php,wordpress,paypal,woocommerce,payment-gateway,Php,Wordpress,Paypal,Woocommerce,Payment Gateway,我试图隐藏在Woocommerce中的一些支付选项,以防出现特定的交付选项。我试图把它放到我的functions.php中,但它不起作用,我不知道为什么。 你能帮我吗 function payment_gateway_disable_country( $available_gateways, $available_methods ) { global $woocommerce; if ( isset( $available_methods['local_deliv

我试图隐藏在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' );
我的研究:


可用的交付方法不会作为参数传递到筛选器woocommerce\u available\u payment\u gateways中-您需要将其加载并检查它们

如果用户选择本地配送,下面的代码应删除paypal支付选项1。如果您的签出页面是基于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测试它。

$available\u方法将无法在您的函数中访问。首先将其定义为全局变量&access作为函数内部的全局变量,有点像这样:

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

我猜他想得到用户选择的交付方式,而不仅仅是一些硬编码数组中的值。我只需要本地交付选项和其他交付选项BACS和PAYPAL支付网关的COD支付网关。我尝试了Ratnakar的解决方案,但仍然没有任何改变。@madebydavid我想指出,第二个参数将不起作用,正如用户在他的问题中提到的。要么他需要通过全局设置来访问,要么是最好的选择,他应该试试你的solution@user2295265你应该试试madebydavid的解决方案,它是有效的,我测试了它谢谢你的答案,但不幸的是它仍然不起作用,不知道为什么。。。还是一样的结果,什么都没有改变……啊,非常抱歉——我犯了一些错误。Woocommerce最新版本的语法不正确,而且我忘记了配送选择器和支付网关列表通常显示在同一页面上,因此没有选择配送方式。更新了代码,因此如果本地配送是可用的配送方式之一,则现在不会显示paypal。我已经测试过了,它对我有效。刚刚做了另一个更新-如果你使用的是AJAX签出页面,那么当用户更改他们的发货选项时,可用的支付网关现在将更新。很抱歉,我无法让它工作,我将代码粘贴到functions.php中,替换了旧的,但仍然没有。。以下是网站:shipping:Na dobirku是本地交付,选中后,paypal仍然处于活动状态且可见…您运行的woocommerce版本是什么?您可以尝试添加错误日志运行;访问“签出”页面时,是否要访问该函数,然后检查错误日志?