簡體   English   中英

根據 Woocommerce 訂單狀態禁用特定的付款方式

[英]Disable specific payment methods depending on Woocommerce order status

我在網站上進行了兩步付款。 在經理確認訂單后付款。 首先,用戶選擇“用於確認”的付款方式(更名為“貨到付款”),並在收到付款發票后付款。 在結帳頁面上,我通過 js 隱藏了 paypal。 我希望在保持狀態時隱藏貝寶。 當“待付款”狀態被禁用“確認”(更名為“貨到付款”)時,可以通過貝寶付款。

2020 年 7 月更新

以下代碼將顯示隱藏支付網關:

  1. 在結帳頁面上,它將刪除“paypal”付款選項(因此您可以刪除您的 jQuery 代碼)
  2. 在訂單支付頁面上,它將:
  • 如果訂單狀態為“待處理”,僅保留“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 文件中。 測試和工作。

復制並粘貼相同的代碼,但它不起作用語法錯誤,意外的“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;
}

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM