【问题标题】:How to reduce the stock for specific order status in WooCommerce如何减少 WooCommerce 中特定订单状态的库存
【发布时间】:2021-01-31 07:00:38
【问题描述】:

我在 WooCommerce 上管理我的股票。

当订单状态更改为特定状态(例如(待处理)或其他状态)时,我想减少库存。

所以我使用了这个代码:

function manageStock ($order_id, $old_status, $new_status, $instance ) {
   if ($old_status === 'on-hold'){
      wc_reduce_stock_levels($order_id);
   }
}
add_action( 'woocommerce_order_status_changed', 'manageStock', 10, 4 );

但不幸的是不起作用。有没有其他方法可以解决这个问题?

【问题讨论】:

    标签: php wordpress woocommerce orders stock


    【解决方案1】:

    “暂停”“处理中”“已完成”订单状态的库存已经减少,如您所见@ 987654321@,将函数挂钩到以下挂钩:

    add_action( 'woocommerce_payment_complete', 'wc_maybe_reduce_stock_levels' );
    add_action( 'woocommerce_order_status_completed', 'wc_maybe_reduce_stock_levels' );
    add_action( 'woocommerce_order_status_processing', 'wc_maybe_reduce_stock_levels' );
    add_action( 'woocommerce_order_status_on-hold', 'wc_maybe_reduce_stock_levels' );
    

    所以不要直接使用wc_reduce_stock_levels() 替换为wc_maybe_reduce_stock_levels()

    但在 WooCommerce 待处理订单状态下,wc_maybe_increase_stock_levels() 函数被触发增加库存水平,因此我们需要先移除该行为。

    现在允许“待处理”订单状态的库存减少,添加以下代码行:

    add_action('init', function() {
        remove_action( 'woocommerce_order_status_pending', 'wc_maybe_increase_stock_levels' );
        add_action( 'woocommerce_order_status_pending', 'wc_maybe_reduce_stock_levels' );
    });
    

    代码位于活动子主题(或活动主题)的functions.php 文件中。它应该可以工作。

    请注意,woocommerce_order_status_{$status_transition_to} 是一个复合挂钩,可用于任何其他自定义订单状态。

    所以对于任何自定义订单状态 (比如说“已发货”),我们将使用:

    add_action( 'woocommerce_order_status_shipped', 'wc_maybe_reduce_stock_levels' );
    

    代码位于活动子主题(或活动主题)的functions.php 文件中。它应该可以工作。

    【讨论】:

    • 我认为我不能再次减少库存,因为正在“处理”库存的订单已经减少了。因此,我无法减少特定状态的库存。你觉得怎么样。 @LoicTheAztec
    • 是的,如果订单之前已经在“暂停”、“处理”和“完成”状态下减少了库存,那么您当然不能为自定义状态减少库存。只有当它从待定状态变为您的自定义状态时,您才能减少它。如果这个答案回答了你的问题,你可以请accept回答,如果你喜欢/想要你也可以请upvote回答,谢谢。
    • 没有解决这个问题的方法@LoicTheAztec 谢谢。
    • @zakitutu 我在这里的回答只是回答了您最初的问题……它向您展示了库存是如何根据状态减少或增加的。您可以使用 remove_action 和 add_action 删除 WooCommerce 行为并将其替换为您的行为
    • 对我不起作用。问题是 'woocommerce_order_status_pending' 没有挂钩到 wc_maybe_reduce_stock_levels 函数。我什至添加了一个 add_option 来监控它是否有效。
    猜你喜欢
    • 2017-11-27
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-24
    • 2021-06-02
    • 2019-08-27
    相关资源
    最近更新 更多