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 关注
- 116 浏览
添加回答
举报