第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

允許在 WooCommerce 訂單處于待處理狀態(tài)時減少庫存

允許在 WooCommerce 訂單處于待處理狀態(tài)時減少庫存

PHP
交互式愛情 2024-01-19 15:55:33
如果客戶在線付款(例如使用 PayPal),WooCommerce 將創(chuàng)建訂單,然后等待付款。這個“等待”就是訂單狀態(tài)pending。在此期間沒有庫存減少,這是非常糟糕的。支付成功后,訂單狀態(tài)改為 ,庫存減少on-hold。但有時付款可能需要30分鐘,而在這30分鐘內(nèi)訂單保持pending狀態(tài)并且?guī)齑鏇]有減少,因此如果是庫存中的最后一件產(chǎn)品,在此期間仍然有貨。因此,如果我每種產(chǎn)品只有1-3件庫存,那么很有可能,如果我只有最后一件產(chǎn)品庫存,那么在這30分鐘內(nèi)就會有其他人來購買它,這導(dǎo)致到最后一塊可以賣兩次的情況,這是不可接受的。因此,我需要在使用任何類型的付款和任何類型的運輸創(chuàng)建任何訂單后立即減少庫存。因此,我嘗試創(chuàng)建一個片段,它將使用一個鉤子woocommerce_order_status_changed,并且當(dāng)訂單狀態(tài)更改為 時,它應(yīng)該始終減少庫存pending,因為pending狀態(tài)不會減少庫存。我不知道這樣的態(tài)度是否正確,該如何解決。有人可以幫忙嗎?我嘗試了這兩個片段,但沒有任何行為變化: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條經(jīng)驗 獲得超4個贊

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

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

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


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

TA貢獻1856條經(jīng)驗 獲得超17個贊

嗯,這是我現(xiàn)在找到的唯一可行的解決方案:


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


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

TA貢獻1873條經(jīng)驗 獲得超9個贊

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


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


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');

});


查看完整回答
反對 回復(fù) 2024-01-19
  • 3 回答
  • 0 關(guān)注
  • 213 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號