亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

允許在 WooCommerce 訂單處于待處理狀態時減少庫存

允許在 WooCommerce 訂單處于待處理狀態時減少庫存

PHP
交互式愛情 2024-01-19 15:55:33
如果客戶在線付款(例如使用 PayPal),WooCommerce 將創建訂單,然后等待付款。這個“等待”就是訂單狀態pending。在此期間沒有庫存減少,這是非常糟糕的。支付成功后,訂單狀態改為 ,庫存減少on-hold。但有時付款可能需要30分鐘,而在這30分鐘內訂單保持pending狀態并且庫存沒有減少,因此如果是庫存中的最后一件產品,在此期間仍然有貨。因此,如果我每種產品只有1-3件庫存,那么很有可能,如果我只有最后一件產品庫存,那么在這30分鐘內就會有其他人來購買它,這導致到最后一塊可以賣兩次的情況,這是不可接受的。因此,我需要在使用任何類型的付款和任何類型的運輸創建任何訂單后立即減少庫存。因此,我嘗試創建一個片段,它將使用一個鉤子woocommerce_order_status_changed,并且當訂單狀態更改為 時,它應該始終減少庫存pending,因為pending狀態不會減少庫存。我不知道這樣的態度是否正確,該如何解決。有人可以幫忙嗎?我嘗試了這兩個片段,但沒有任何行為變化:add_filter( 'woocommerce_can_reduce_order_stock', 'wcs_do_not_reduce_onhold_stock', 10, 2 );function wcs_do_not_reduce_onhold_stock( $reduce_stock, $order ) {    if ( $order->has_status( 'pending' )) {        $reduce_stock = true;    }    return $reduce_stock;}add_action( 'woocommerce_order_status_pending', 'wc_maybe_reduce_stock_levels' );add_action( 'woocommerce_order_status_changed', 'order_stock_reduction_based_on_status', 20, 4 );function order_stock_reduction_based_on_status( $order_id, $old_status, $new_status, $order ){    if ( $new_status == 'pending'){    $stock_reduced = get_post_meta( $order_id, '_order_stock_reduced', true );        if( empty($stock_reduced) && $order->get_payment_method() == 'barion' ){            wc_reduce_stock_levels($order_id);        }    }}
查看完整描述

3 回答

?
MYYA

TA貢獻1868條經驗 獲得超4個贊

您可以簡單地添加以下代碼行,以允許在掛單狀態下減少庫存(WooCommerce 將執行在掛單上觸發該功能的wc_maybe_reduce_stock_levels()工作):

add_action(?'woocommerce_order_status_pending',?'wc_maybe_reduce_stock_levels'?);

代碼位于活動子主題(或活動主題)的functions.php 文件中。它應該有效。


查看完整回答
反對 回復 2024-01-19
?
慕慕森

TA貢獻1856條經驗 獲得超17個贊

嗯,這是我現在找到的唯一可行的解決方案:


add_action( 'woocommerce_checkout_create_order', 'force_new_order_status', 20, 1 );

function force_new_order_status( $order )

if( ! $order->has_status('on-hold') ) 

        $order->set_status( 'on-hold', 'Forced status by a custom script (this note is not neccessary and can be deleted)' ); 

}

只有一個問題:如果付款失敗,庫存將無法退回。因此,必須采取其他措施,例如在(例如)60 分鐘后自動取消未付款訂單,或使用支付網關的特定掛鉤。set_status不管怎樣,我今天學到的,和 之間存在巨大的差異update_status。像我這樣的新手請注意!:-) 因此,通過這種方式,我會自動將 WooCommerce 發出的每個新訂單的pending狀態(不會減少訂購的庫存)切換為on-hold狀態(會減少訂購的庫存),這是解決我的問題的有效方法。對于高級程序員來說可能太容易了,但是因為我在兩天的搜索中沒有找到問題的正確工作解決方案,所以我將其發布,即使它是如此微不足道,以節省另一個初學者的時間,因為正如我在搜索過程中發現的那樣:我不是只有下訂單后需要立即減少庫存的人。所以這就是方法!:-)


查看完整回答
反對 回復 2024-01-19
?
眼眸繁星

TA貢獻1873條經驗 獲得超9個贊

您需要添加庫存減少鉤子(正如 LoicTheAztec 已經回答的那樣),但您還需要刪除相反的 wc_maybe_increase_stock_levels 鉤子。要正確刪除它,您需要在它已經掛鉤時運行它,因此您需要將其包裝到 init 掛鉤中。


以下對我有用(Woocommerce 5.4.1) - 確保待定狀態減少庫存水平:


add_action( 'init', function() {

    add_action('woocommerce_order_status_pending', 'wc_maybe_reduce_stock_levels');

    remove_action('woocommerce_order_status_pending', 'wc_maybe_increase_stock_levels');

});


查看完整回答
反對 回復 2024-01-19
  • 3 回答
  • 0 關注
  • 190 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號