#wordpress #woocommerce #hook-woocommerce #wordpress-action
#wordpress #woocommerce #привязка-woocommerce #wordpress-действие
Вопрос:
Я создал привязку для WooCommerce, когда заказ отменяется, вот так:
add_action( 'woocommerce_order_status_cancelled', 'prefix_order_cancelled_hook' );
function prefix_order_cancelled_hook($order_id){
write_log("Order ${order_id} has been cancelled")
}
Теперь, когда статус изменен на отменено, перехват вызывается, как ожидалось, но выполнение вывода — это не то, что я ожидаю. Я получаю следующее в журнале:
Order 4 has been cancelled
Order 5 has been cancelled
Order 6 has been cancelled
Я видел, что это соответствует количеству заказов, которые у меня сейчас есть в магазине. Может кто-нибудь помочь с тем, почему это происходит и как запустить перехват только один раз для измененного заказа.
Ответ №1:
Похоже, что ваш код выполняется для всех заказов. Похоже, проблема с $order_id
. Я думаю, что вы не можете получить доступ к свойствам напрямую, но вам нужно получить экземпляр объекта WC_Order (начиная с Woocommerce 3.0 что-то около), например:
add_action( 'woocommerce_order_status_cancelled', 'prefix_order_cancelled_hook' );
function prefix_order_cancelled_hook($order_id){
// get an instance of an WC_Order object
$order = wc_get_order( $order_id );
// get the ID of the order
$order_id = $order->get_id();
write_log("Order ${order_id} has been cancelled")
}
Комментарии:
1. Я уверен, что проблема все еще будет сохраняться, потому что проблема заключается в том, что функция вызывается более одного раза.