WooCommerce挂钩从管理器创建订单
在我的自定义插件(在WooCommerce 2.6.x和3.x中工作)中,我需要在创建新订单时获取订单ID。我尝试了不同的挂钩,但它们只在客户创建订单时才起作用,而不是在从管理员创建订单时起作用。WooCommerce挂钩从管理器创建订单
我想:
- woocommerce_new_order
- woocommerce_thankyou
- woocommerce_checkout_order_processed
- woocommerce_checkout_update_order_meta
更新
最后,我用这个:
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'
将与$post_ID
这是订单ID调用。
参见功能wp_insert_post()
的...\wp-includes\post.php
。
谢谢!订单创建时以及每次更新订单时都会调用save_post_shop_order行为。这对我来说几乎是好事,但是有没有一种行为只有在创建订单时才会被调用? (可能是'... \ wp-includes \ post.php'中的'{$ new_status} _ {$ post-> post_type}',但'new_shop_order'不起作用) – Vixent
'save_post_shop_order'操作有一个布尔参数$ update将在创建后创建。 –
好的。问题是,当你点击按钮来从admin创建订单时,在你开始填写订单字段之前,调用save_post_shop_order行动。所以我得到一个空订单的订单ID。实际上,如果您从订单创建页面退出,并尝试创建新订单,那么订单ID是一个新值。只有当管理员点击按钮“保存/添加订单”并且订单显示在订单表格中时,才会使用仅被调用的操作。 – Vixent
您可以使用此钩子woocommerce_process_shop_order_meta
是在从WordPress管理员手动创建订单时触发的。
这应该有希望得到它:'WC() - > order-> id;' – stevenkellow