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 - if 语句中的倒序 2021-01-01
- 如何在 Symfony2 中正确使用 webSockets 2021-01-01
- Laravel 5:Model.php 中的 MassAssignmentException 2021-01-01
- PHP foreach() 与数组中的数组? 2022-01-01
- 覆盖 Magento 社区模块控制器的问题 2022-01-01
- 使用 GD 和 libjpeg 支持编译 PHP 2022-01-01
- 如何使用 Google API 在团队云端硬盘中创建文件夹? 2022-01-01
- openssl_digest vs hash vs hash_hmac?盐与盐的区别HMAC? 2022-01-01
- Oracle 即时客户端 DYLD_LIBRARY_PATH 错误 2022-01-01
- 如何从数据库中获取数据以在 laravel 中查看页面? 2022-01-01