Привязка WooCommerce к изменению статуса заказа срабатывает несколько раз вместо этого только для измененного заказа

#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. Я уверен, что проблема все еще будет сохраняться, потому что проблема заключается в том, что функция вызывается более одного раза.