禁用特定的付款方式,具体取决于Woocommerce订单状态

时间:2019-03-04 18:04:25

标签: php wordpress woocommerce payment-gateway orders

我在网站上进行了两步付款。付款在经理确认订单后发生。首先,用户选择“确认”付款方式(更名为“货到付款”),仅在收到付款发票后才付款。在结帐页面上,我通过js隐藏了贝宝。我希望将Paypal保留为保留状态。当“待付款”状态被禁用时,“用于确认”(重命名为“货到付款”)可以通过贝宝付款。

2 个答案:

答案 0 :(得分:0)

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

  1. 在结帐页面上,它将删除“贝宝”付款选项(因此您可以删除jQuery代码)
  2. 在“订单付款”页面上,它将:
    • 仅保留“贝宝” 付款方式(如果订单状态为“待处理” (删除所有其他选项)
    • 对于“待定”之外的其他订单状态,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
            elseif( $gateways_id !== 'paypal' && $order->has_status('peding') ) {
                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文件中。经过测试和工作。

答案 1 :(得分:0)

复制并粘贴相同的代码,但它不起作用 语法错误,意外的'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