В моем настраиваемом плагине (работающем в WooCommerce 2.6.x и 3.x) мне нужно получить идентификатор заказа при создании нового заказа. Я пробовал разные крючки, но они работают только тогда, когда клиент создает заказ, а не когда заказ создается из admin.
Я пытался:
Обновить
Наконец, я использовал это:
add_action('wp_insert_post', function($order_id) { if(!did_action('woocommerce_checkout_order_processed') && get_post_type($order_id) == 'shop_order' && validate_order($order_id)) { order_action($order_id); } });
где validate_order :
function validate_order($order_id) { $order = new \WC_Order($order_id); $user_meta = get_user_meta($order->get_user_id()); if($user_meta) return true; return false; }
Благодаря validate_order действие не выполняется, когда вы начинаете создавать заказ. Я использую !did_action('woocommerce_checkout_order_processed')
потому что я не хочу, чтобы действие выполнялось, если заказ создан клиентом (у меня есть конкретное действие для этого, используя woocommerce_checkout_order_processed
).
Если вы используете страницу администратора .../wp-admin/post-new.php?post_type=shop_order
чтобы создать новый порядок, тогда не может быть крюка WooCommerce
для этого, так как этот порядок создается ядром WordPress.
Тем не менее, действие WordPress 'save_post_shop_order'
будет 'save_post_shop_order'
с $post_ID
который является идентификатором заказа.
См. Функцию wp_insert_post()
в ...\wp-includes\post.php
.
Вы можете использовать этот крючок. woocommerce_process_shop_order_meta
запускается, когда заказ создается вручную из администратора WordPress.