Hooks for order creation exclusively in Woocommerce 3(在WooCommerce 3中专门用于创建订单的挂钩)
问题描述
我需要检测何时成功创建新的WooCommerce订单并将其设置为"正在处理"--这是为了添加一些额外的功能等。在前端这样做很好,因为当通过WooCommercewoocommerce_thankyou
或woocommerce_order_status_processing
钩子创建订单时,很容易将其挂钩。
我遇到的问题是我也希望在通过网站后端手动创建新订单时使用此功能。我在通过手动添加订单时使用一些自定义字段,这些字段在创建时用于处理订单。遗憾的是,尽管woocommerce_order_status_processing
确实适用于管理订单,但它似乎是在订单元数据保存之前触发的-因此,当我尝试检索任何元数据时,它是空的。
为了解决这个问题,我尝试了WooCommerce hook for order creation from admin或这个GitHub线程上的建议,该线程将使用WordPress钩子wp_insert_post
或save_post_shop_order
(save_post_{$post->post_type}
)。这可以解决我的订单元问题,因为它似乎在订单元保存后触发。
然而-每次有更新或新帖子时都会触发,所以我需要找到一种方法来检测它是否是新帖子。这些钩子上有一个$update
参数,它旨在显示‘这是否是正在更新的现有帖子’,但由于某些原因,它似乎总是设置为True,即使它是新的帖子/订单。
简而言之:
- 我需要一个WordPress/WooCommerce挂钩,该挂钩在通过后端和创建订单/发布元后触发,以便仅在新创建且未更新订单时运行此功能。
我能想到的唯一另一种可能做到这一点的方法是根据this suggestion检查发布日期和修改日期,但我只是想肯定有更好的方法来做到这一点!
这是我当前的代码,以防万一
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 );
推荐答案
您可以使用woocommerce_new_order
钩子:
add_action('woocommerce_new_order', function ($order_id) {
// your code
}, 10, 1);
这篇关于在WooCommerce 3中专门用于创建订单的挂钩的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:在WooCommerce 3中专门用于创建订单的挂钩
基础教程推荐
- 通过 PHP SoapClient 请求发送原始 XML 2021-01-01
- mysqli_insert_id 是否有可能在高流量应用程序中返回 2021-01-01
- 在 Woocommerce 中根据运输方式和付款方式添加费用 2021-01-01
- WooCommerce 中选定产品类别的自定义产品价格后缀 2021-01-01
- 在多维数组中查找最大值 2021-01-01
- 超薄框架REST服务两次获得输出 2022-01-01
- XAMPP 服务器不加载 CSS 文件 2022-01-01
- 如何在 PHP 中的请求之间持久化对象 2022-01-01
- 在 PHP 中强制下载文件 - 在 Joomla 框架内 2022-01-01
- Libpuzzle 索引数百万张图片? 2022-01-01