如果客户在线付款(例如使用 PayPal),WooCommerce 将创建订单,然后等待付款。这个“等待”就是订单状态pending。在此期间没有库存减少,这是非常糟糕的。支付成功后,订单状态改为 ,库存减少on-hold。但有时付款可能需要30分钟,而在这30分钟内订单保持pending状态并且库存没有减少,因此如果是库存中的最后一件产品,在此期间仍然有货。因此,如果我每种产品只有1-3件库存,那么很有可能,如果我只有最后一件产品库存,那么在这30分钟内就会有其他人来购买它,这导致到最后一块可以卖两次的情况,这是不可接受的。因此,我需要在使用任何类型的付款和任何类型的运输创建任何订单后立即减少库存。因此,我尝试创建一个片段,它将使用一个钩子woocommerce_order_status_changed,并且当订单状态更改为 时,它应该始终减少库存pending,因为pending状态不会减少库存。我不知道这样的态度是否正确,该如何解决。有人可以帮忙吗?我尝试了这两个片段,但没有任何行为变化:
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);
}
}
}
MYYA
慕慕森
眼眸繁星