根据 Woocommerce 订单状态禁用特定付款方式

Posted

技术标签:

【中文标题】根据 Woocommerce 订单状态禁用特定付款方式【英文标题】:Disable specific payment methods depending on Woocommerce order status 【发布时间】:2019-07-26 02:35:48 【问题描述】:

我在网站上进行了两步付款。在经理确认订单后付款。首先,用户选择付款方式“确认”(更名为“货到付款”),并在收到付款发票后付款。在结帐页面上,我通过 js 隐藏了 paypal。我希望在暂停状态时隐藏贝宝。当“待付款”状态禁用“确认”(更名为“货到付款”)且可以通过贝宝付款时。

【问题讨论】:

这个真的不清楚:“当“待付款”的状态被禁用“确认”(更名为“货到付款”)并且可以通过paypal付款时”...请您改写一下。 【参考方案1】:

2020 年 7 月更新

以下代码将显示隐藏支付网关:

    在结帐页面它将删除“paypal”付款选项(因此您可以删除您的 jQuery 代码) 在订单支付页面上
如果订单状态为“待处理”,则仅保留“paypal”付款选项(删除所有其他选项) 对于“待处理”以外的其他订单状态,Woocommerce 不允许付款...

代码:

// Show/hide payment gateways
add_filter( 'woocommerce_available_payment_gateways', 'conditionally_hide_payment_gateways', 100, 1 );
function conditionally_hide_payment_gateways( $available_gateways ) 
    // 1. On Order Pay page
    if( is_wc_endpoint_url( 'order-pay' ) ) 
        // Get an instance of the WC_Order Object
        $order = wc_get_order( get_query_var('order-pay') );

        // Loop through payment gateways 'pending', 'on-hold', 'processing'
        foreach( $available_gateways as $gateways_id => $gateways )
            // Keep paypal only for "pending" order status
            if( $gateways_id !== 'paypal' && $order->has_status('pending') ) 
                unset($available_gateways[$gateways_id]);
            
        
    
    // 2. On Checkout page
    elseif( is_checkout() && ! is_wc_endpoint_url() ) 
        // Disable paypal
        if( isset($available_gateways['paypal']) ) 
            unset($available_gateways['paypal']);
        
    
    return $available_gateways;

代码进入您的活动子主题(或活动主题)的 function.php 文件中。经过测试和工作。

【讨论】:

谢谢!!!非常感谢!我没有立即明白为什么会出现白屏,但仔细查看后发现状态不正确。请为其他人将状态从“正在等待”更改为“等待中”。您可能知道,如何使用未选择的付款方式? 在哪里可以找到 available_gateways 名称?例如,我将银行转帐和 Stripe 作为有效的付款方式,我只想在结帐时和订单页面上进行银行转帐。 @mrRobot 见this answer thread (at the end),如果你喜欢/想要你可以请upvote链接的答案。 我怎样才能在结帐页面上删除多个付款选项(除了 PayPal),然后在订单支付页面上全部显示。我正在尝试使用订单建议做类似的事情,因此结帐的客户只能将“订单建议”视为结帐的支付网关,并且当他们的付款手动设置为待付款时,他们将看到所有可用的付款网关,除了订单提案。【参考方案2】:

复制并粘贴相同的代码,但它不起作用 语法错误,意外的 'elseif' (T_ELSEIF)

我更正了代码

// Show/hide payment gateways
add_filter( 'woocommerce_available_payment_gateways', 'conditionally_hide_payment_gateways', 100, 1 );
function conditionally_hide_payment_gateways( $available_gateways ) 
    // 1. On Order Pay page
    if( is_wc_endpoint_url( 'order-pay' ) ) 
        // Get an instance of the WC_Order Object
        $order = wc_get_order( get_query_var('order-pay') );

        // Loop through payment gateways 'pending', 'on-hold', 'processing'
        foreach( $available_gateways as $gateways_id => $gateways )
            // Keep paypal only for "pending" order status
            if( $gateways_id !== 'paypal' && $order->has_status('pending') ) 
                unset($available_gateways[$gateways_id]);
            
        
    
    // 2. On Checkout page
    elseif( is_checkout() && ! is_wc_endpoint_url() ) 
        // Disable paypal
        if( isset($available_gateways['paypal']) ) 
            unset($available_gateways['paypal']);
        
    
    return $available_gateways;

enter image description here

【讨论】:

以上是关于根据 Woocommerce 订单状态禁用特定付款方式的主要内容,如果未能解决你的问题,请参考以下文章

根据 Woocommerce 中选择的付款方式禁用运输方式

将默认 WooCommerce 订单状态更改为处理支票和银行付款

在 WooCommerce 中根据产品类型隐藏付款方式

WooCommerce 订单状态未正确分配 PayPal 付款

在 WooCommerce 中自动处理已付款订单而不是自动完成

PayPal EC 付款完成后,woocommerce 中的订单状态如何更改? [关闭]