Мне нужно определить, когда новый заказ WooCommerce успешно создан и настроен на «обработку» - это добавить некоторую дополнительную функциональность и т. Д. Это хорошо сделать на внешнем интерфейсе, так как его довольно легко подключить, когда заказ создается с помощью хуков WooCommerce woocommerce_thankyou
или woocommerce_order_status_processing
.
У меня проблема в том, что Я также хочу, чтобы это работало при создании нового заказа вручную через бэкэнд веб-сайта . Я использую некоторые настраиваемые поля при добавлении заказа вручную, который используется для управления заказом при его создании. К сожалению, хотя woocommerce_order_status_processing
действительно работает для заказов администратора, он, похоже, срабатывает до сохранения метаданных заказа, поэтому, когда я пытаюсь получить какие-либо метаданные, он пуст.
Чтобы обойти это, я попробовал предложения на WooCommerce хуке для создания заказа от администратора или на этом GitHub потоке, который должен использовать хуки WordPress wp_insert_post
или save_post_shop_order
(save_post_{$post->post_type}
). Это работает, чтобы решить мою проблему метаданных ордера, так как кажется, что она срабатывает после сохранения метаданных ордера.
Однако - он вызывает каждый раз, когда происходит обновление или новое сообщение, поэтому мне нужно найти способ определить, является ли это новое сообщение или нет. На этих хуках есть параметр $update
, который предназначен для показа 'независимо от того, обновляется ли существующий пост или нет' , но по какой-то причине он всегда имеет значение true, даже если это новый пост / заказ.
Подведем итог:
- Мне нужен хук WordPress / WooCommerce, который запускается после того, как мета ордера / поста создается через бэкэнд и , это может быть выполнено только в том случае, если ордер только что создан и не обновлен.
Единственный другой способ сделать это, о котором я могу подумать, - это это предложение о проверке даты публикации и даты изменения, но я просто подумал, что должен быть лучший способ сделать это!
Вот мой текущий код на всякий случай
function my_order_created ( $post_id, $post, $update ) {
// Don’t run if $post_id doesn’t exist OR post type is not order OR update is true
if ( ! $post_id || get_post_type( $post_id ) != 'shop_order' || $update == 1 ) {
return;
}
$order = wc_get_order( $post_id );
if ( $order && $order->has_status( 'processing' ) ){
// Do something
}
}
add_action( 'wp_insert_post', 'my_order_created', 10, 3 );