3 回答

TA貢獻1868條經驗 獲得超4個贊
您可以簡單地添加以下代碼行,以允許在掛單狀態下減少庫存(WooCommerce 將執行在掛單上觸發該功能的wc_maybe_reduce_stock_levels()
工作):
add_action(?'woocommerce_order_status_pending',?'wc_maybe_reduce_stock_levels'?);
代碼位于活動子主題(或活動主題)的functions.php 文件中。它應該有效。

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狀態(會減少訂購的庫存),這是解決我的問題的有效方法。對于高級程序員來說可能太容易了,但是因為我在兩天的搜索中沒有找到問題的正確工作解決方案,所以我將其發布,即使它是如此微不足道,以節省另一個初學者的時間,因為正如我在搜索過程中發現的那樣:我不是只有下訂單后需要立即減少庫存的人。所以這就是方法!:-)

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');
});
- 3 回答
- 0 關注
- 190 瀏覽
添加回答
舉報