Я использую эту маленькую функцию, чтобы определить, находится ли ордер в состоянии ожидания. Это происходит между страницей оплаты и уведомлением платежной системы:
add_action( 'woocommerce_order_status_pending', 'status_pending' );
function status_pending( $related_job ) {
error_log('Triggered');
}
Проблема в том, что я не получаю журнал ошибок, который показывает, что функция работает. Но становится безумнее. Когда я обновляю статус через панель мониторинга с завершенного на ожидающий, появляется журнал. Поэтому я совершенно не понимаю, почему он не работает во время процесса оформления заказа. Любые рекомендации или идеи, в чем может быть проблема?






Это связано с тем, что хук срабатывает только при изменении статуса заказа, а не при создании заказа, есть еще один хук, который вы можете использовать для обнаружения новых заказов, вы можете использовать идентификатор заказа, чтобы получить объект заказа, который вы можете использовать, чтобы узнать статус заказа:
add_action( 'woocommerce_new_order', 'prefix_new_wc_order', 1, 1 );
function prefix_new_wc_order( $order_id ) {
$order = new WC_Order( $order_id );
}
Приведенный выше хук срабатывает только в процессе оформления заказа, поэтому создание заказов на бэкэнде не сработает.
Статус заказа «ожидающий» — это статус по умолчанию для заказов до того, как клиент попадет на платежный шлюз, сразу после создания заказа.
Поэтому лучше всего использовать хук после создания заказа, до обработки способа оплаты:
1) попробуйте сначала хук действия woocommerce_checkout_order_processed(3 аргумента):
add_action( 'woocommerce_checkout_order_processed', 'order_processed_with_pending_status', 10, 3 );
function order_processed_with_pending_status( $order_id, $posted_data, $order ) {
error_log('Triggered');
}
2) В качестве альтернативы попробуйте хук действия woocommerce_checkout_update_order_meta(2 аргумента):
add_action( 'woocommerce_checkout_update_order_meta', 'order_processed_with_pending_status', 10, 2 );
function order_processed_with_pending_status( $order_id, $data ) {
error_log('Triggered');
}
Оба должны работать…
Не уверен, как это должно помочь. Нет ли специального хука для статуса заказа, который не устанавливается через админку?