#wordpress #woocommerce #backend #hook-woocommerce #orders
#wordpress #woocommerce #серверная часть #крюк-woocommerce #заказы
Вопрос:
У меня есть пользовательский статус заказа с именем «предложение», и я добавил следующий код, чтобы попытаться предотвратить уменьшение уровня запасов для заказов с этим статусом.
function bw_do_not_reduce_quote_stock( $reduce_stock, $order ) {
if ( $order->has_status( 'quote' ) ) {
$reduce_stock = false;
}
return $reduce_stock;
}
add_filter( 'woocommerce_can_reduce_order_stock', 'bw_do_not_reduce_quote_stock', 10, 2 );
Это работает для заказов, размещенных на интерфейсном веб-сайте. Но если администратор добавляет или редактирует заказ на серверной части, запас уменьшается.
Есть ли альтернативный хук для серверной части? Или я что-то еще упускаю?
Ответ №1:
В дополнение к вашему текущему коду добавьте woocommerce_prevent_adjust_line_item_product_stock
перехват фильтра
/**
* Prevent adjust line item
*
* @param $prevent
* @param $item
* @param $quantity
*/
function filter_woocommerce_prevent_adjust_line_item_product_stock ( $prevent, $item, $quantity ) {
// Get order
$order = $item->get_order();
if ( $order->has_status( 'quote' ) ) {
$prevent = true;
}
return $prevent;
}
add_filter( 'woocommerce_prevent_adjust_line_item_product_stock', 'filter_woocommerce_prevent_adjust_line_item_product_stock', 10, 3 );
Комментарии:
1. Спасибо. К сожалению, у меня это не работает. Например, если я изменю статус заказа с «отменен» на «котировка», запасы все равно уменьшатся. Может ли это быть связано с тем, что он проверяет статус старого заказа (отменен) вместо нового статуса (котировка)? Я пробовал разные приоритеты подключений вместо 10 (например, 1 и 20), но результат все тот же.
2. это действительно причина, вы можете попробовать это с помощью has_status «отменено», и тогда вы увидите, что это действительно имеет свой эффект. Поскольку заказ уже имеет статус во внешнем интерфейсе, предполагается, что это также относится и к серверной части.
3. Блестяще! Большое вам спасибо за вашу помощь. Для моего рабочего процесса я смог просто добавить «отменено» в список статусов:
$order->has_status ( array ('quote', 'cancelled') )
теперь это работает отлично