woocommerce github発行hereによれば、(24時間は在庫が保持されていますが、再ストックなしで取り消すことはできません)正しい動作です。間違った在庫レベル、欠陥のある製品、ユーザーの選択など様々な理由で注文を取り消すことができるため、在庫の再増分は完全に(手動)管理者の決定でなければなりません。
私は私の子供のテーマのfunctions.phpで関数をオーバーライドしようとしています!ここで
はコードです:
remove_filter('woocommerce_cancel_unpaid_orders', 'wc_cancel_unpaid_orders');
add_filter('woocommerce_cancel_unpaid_orders', 'override_cancel_unpaid_orders');
function override_cancel_unpaid_orders() {
$held_duration = get_option('woocommerce_hold_stock_minutes');
if ($held_duration < 1 || 'yes' !== get_option('woocommerce_manage_stock')) {
return;
}
$data_store = WC_Data_Store::load('order');
$unpaid_orders = $data_store->get_unpaid_orders(strtotime('-' . absint($held_duration) . ' MINUTES', current_time('timestamp')));
if ($unpaid_orders) {
foreach ($unpaid_orders as $unpaid_order) {
$order = wc_get_order($unpaid_order);
if (apply_filters('woocommerce_cancel_unpaid_order', 'checkout' === $order->get_created_via(), $order)) {
//Cancel Order
$order->update_status('cancelled', __('Unpaid order cancelled - time limit reached.', 'woocommerce'));
//Restock
foreach ($order->get_items() as $item_id => $item) {
// Get an instance of corresponding the WC_Product object
$product = $item->get_product();
$qty = $item->get_quantity(); // Get the item quantity
wc_update_product_stock($product, $qty, 'increase');
}
}
}
}
wp_clear_scheduled_hook('woocommerce_cancel_unpaid_orders');
wp_schedule_single_event(time() + (absint($held_duration) * 60), 'woocommerce_cancel_unpaid_orders');
}
はそれがお役に立てば幸いです。