簡體   English   中英

WooCommerce更新產品庫存數量和狀態 3

[英]Update product stock quantity and status in WooCommerce 3

當有特定的 post_meta 時,我試圖將產品的庫存數量設置為零

我正在連接到“woocommerce_update_product”。 當我單擊“更新”時,它開始並正確更新; 然而,行動永遠不會結束。 (頁面正在加載...)

當我刷新頁面並檢查庫存時,這是正確修改的。

我做錯了什么嗎?

這是我的代碼

add_action('woocommerce_update_product', 'sv_set_no_stock_when_discontinued', 10, 1);
function sv_set_no_stock_when_discontinued($prodId){

    $discontinued = get_post_meta($prodId, '_is_discontinued', true);

    if($discontinued == 'yes'){

        $product = wc_get_product($prodId);

        // Using WC setters
        $product->set_manage_stock(true);
        $product->set_stock_quantity(0);
        $product->set_stock_status('outofstock');

        // Save Product
        $product->save();
    }
}

離開一段時間后,我收到以下錯誤:

Fatal error: Allowed memory size of 1077936128 bytes exhausted (tried to allocate 20480 bytes) in \wp-includes\meta.php 第 1078 行

Fatal error: Allowed memory size of 1077936128 bytes exhausted (tried to allocate 20480 bytes) in \wp-includes\class-wp-fatal-error-handler.php 第 72 行

WC_Product Object 已經作為woocommerce_update_product Hook 的第二個參數包含在內……因此您可以稍微更改您的代碼,例如:

但是由於這個鈎子位於WC_Product_Data_Store_CPT Class,它不太喜歡WC_Product setter 方法,尤其是save()方法。

因此,我們將用以下內容替換此鈎子:

add_action( 'woocommerce_admin_process_product_object', 'set_no_stock_if_discontinued' );
function set_no_stock_if_discontinued( $product ) {
    if( $product->get_meta('_is_discontinued') === 'yes' 
    || ( isset($_POST['_is_discontinued']) 
    && esc_attr($_POST['_is_discontinued']) === 'yes' ) ) {

        // Using WC setters
        $product->set_manage_stock(true);
        $product->set_stock_quantity(0);
        $product->set_stock_status('outofstock');
    }
}

代碼進入活動子主題(或活動主題)的 functions.php 文件。 測試和工作。

注意:不需要save()方法,因為它是在這個鈎子之后觸發的。

全局注釋:您還可以將“管理庫存”設置為 false。

暫無
暫無

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

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