Я использую самые последние версии WordPress и WooCommerce.
Я знаю, что это может показаться странным вне контекста, но я хочу добавить хук к моим функциям. php, который удаляет определенный товар по идентификатору из заказа после размещения заказа.
Вот что я работаю до сих пор:
add_action('woocommerce_new_order', 'custom_process_order', 10, 1);
function custom_process_order($order_id) {
$order = new WC_Order( $order_id );
$items = $order->get_items();
foreach ($items as $item) {
if ($item->get_id()==10766) {
$order->remove_item( $item->get_id() );
}
}
return $order_id;
}
Я пытаюсь удалить продукт с идентификатором 10766 из заказа, если указанный продукт является частью заказа. Я взял это из другого, более старого поста, поэтому сам код может быть не идеальным. Это определенно не работает.
Обновление после некоторых экспериментов:
С помощью Кэмерона Херда я попробовал следующий код:
add_action('woocommerce_new_order', 'custom_process_order', 10, 1);
function custom_process_order($order_id) {
$order = new WC_Order( $order_id );
$items = $order->get_items();
foreach ($items as $item) {
if ($item->get_id() === 10766) {
$order->remove_item( $item->get_id() );
}
}
$order->save_items();
return $order_id;
}
Это выглядело многообещающе, но при нажатии на кнопку проверки Кнопка отправит пустой заказ, а также выдаст пустое сообщение об ошибке WooCommerce, оставив пользователя на странице оформления заказа.
После этого у меня было 2 идеи:
1.) Изменение remove_item
на wc_delete_order_item
. Я действительно не знаю разницу, и изменение ее, похоже, тоже не имело значения.
2.) Изменение хука так, чтобы это происходило после того, как заказ попал в конец. Я попытался изменить его с woocommerce_new_order
на woocommerce_thankyou
. Это, однако, сломало страницу благодарности в дополнение к бездействию с заказом.
Вот с чем я сейчас сижу:
add_action('woocommerce_checkout_create_order', 'custom_process_order', 10, 1);
function custom_process_order($order_id) {
$order = new WC_Order( $order_id );
$items = $order->get_items();
foreach ($items as $item) {
$current_item_id = $item->get_id();
if ( $current_item_id === 10766) {
$order->remove_item($current_item_id);
}
}
$order->save_items();
return $order_id;
}
Все еще ищу рабочий ответ.