WooCommerce: хук при сохранении изменений в продукте в заказе

Я искал часами …

Я не могу понять, как заставить функцию выполняться при нажатии «сохранить» после редактирования количества товара в существующем заказе.

Я попробовал это:

add_action('woocommerce_order_edit_product', 'your_function_name');
function your_function_name(){
//my php function code would be here
}

но функция your_function_name не вызывается при нажатии кнопки сохранить.

Я проверил функцию и при непосредственном вызове она работает как надо, так что я думаю, что получил неправильный хук …

2

Решение

после двух дней борьбы с этим вопросом я нашел его: есть два крючка, один до и один после сохранения:

  1. woocommerce_before_save_order_items
  2. woocommerce_saved_order_items

оба запускаются при сохранении заказа в бэкэнде. один до сохранения и один после.

оба крючка содержат одинаковые переменные: $ order_id (int) & $ items (array)

Я думаю, что с первым хуком, вы можете получить старый порядок и сравнить его содержимое с массивом элементов, чтобы увидеть, что изменилось. по крайней мере, это то, что я пытаюсь сделать сейчас.

так вот как вы бы это запустили:

add_action( 'woocommerce_before_save_order_items', 'so42270384_woocommerce_before_save_order_items', 10, 2 );
function so42270384_woocommerce_before_save_order_items( $order_id, $items ) {
echo $order_id;
var_dump( $items );
}

быть в курсе ..

добавление товара в выходной заказ действительно реализует другую ловушку, которая вызывается до этого (поэтому при нажатии кнопки SAVE сработает вышеуказанная функция, но заказ и его элементы уже установлены ДО сохранения (при добавлении товара заказ будет сохранен немедленно). ). это означает $order = new WC_Order( $order_id ); в нем будут новые элементы, до и после, так что невозможно найти, что изменилось.). но woocommerce_ajax_add_order_item_meta Крюк срабатывает на «добавить продукт» и помогает мне в этом. счастливого кодирования всем ..

4

Другие решения

Проверьте свой журнал ошибок. Должна быть некоторая информация там. Если я смотрю на правильное действие, оно принимает четыре аргумента:

do_action( 'woocommerce_order_edit_product', $this->id, $item_id, $args, $product );

Итак, ваш код должен быть:

add_action('woocommerce_order_edit_product', 'your_function_name', 10, 4);
function your_function_name($id, $item_id, $args, $product){
//my php function code would be here
}
0

По вопросам рекламы [email protected]