Woocommerce 交付和付款选项 - 我的 php 代码有啥问题?

Posted

技术标签:

【中文标题】Woocommerce 交付和付款选项 - 我的 php 代码有啥问题?【英文标题】: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

【问题讨论】:

【参考方案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的解决方案,它有效,我测试过了

以上是关于Woocommerce 交付和付款选项 - 我的 php 代码有啥问题?的主要内容,如果未能解决你的问题,请参考以下文章

根据取货和交付按钮显示或隐藏 WooCommerce 结帐字段

如果选择了特定的付款选项(woocommerce / php),则覆盖付款接收方

在 WooCommerce 中结帐时的付款选项之前从订单审核表中移动运输选项

如何在 WooCommerce 编辑订单中计算自定义订单总额?

在 WooCommerce 中隐藏运输和付款方式

在 Woocommerce 中的订单详细信息表之前更改付款方式位置