在WooCommerce 3中专门用于创建订单的挂钩 [英] Hooks for order creation exclusively in Woocommerce 3

查看:28
本文介绍了在WooCommerce 3中专门用于创建订单的挂钩的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要检测何时成功创建新的WooCommerce订单并将其设置为"正在处理"--这是为了添加一些额外的功能等。在前端这样做很好,因为当通过WooCommercewoocommerce_thankyouwoocommerce_order_status_processing钩子创建订单时,很容易将其挂钩。

我遇到的问题是我也希望在通过网站后端手动创建新订单时使用此功能。我在通过手动添加订单时使用一些自定义字段,这些字段在创建时用于处理订单。遗憾的是,尽管woocommerce_order_status_processing确实适用于管理订单,但它似乎是在订单元数据保存之前触发的-因此,当我尝试检索任何元数据时,它是空的。

为了解决这个问题,我尝试了WooCommerce hook for order creation from admin或这个GitHub线程上的建议,该线程将使用WordPress钩子wp_insert_postsave_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中专门用于创建订单的挂钩的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆