专注于Woocommerce 3的订单创建钩子

问题描述 投票:1回答:1

我需要检测何时成功创建新的WooCommerce订单并设置为'处理' - 这是添加一些额外的功能等。这在前端可以很好,因为当通过任一订单创建订单时,它很容易挂钩WooCommerce woocommerce_thankyouwoocommerce_order_status_processing钩子。

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

为了解决这个问题,我尝试了关于WooCommerce hook for order creation from admin或这个GitHub线程的建议,即使用WordPress钩子wp_insert_postsave_post_shop_ordersave_post_{$post->post_type})。这可以解决我的订单元问题,因为它似乎在保存订单元后触发。

但是 - 它会在每次有更新或新帖子时触发,因此我需要找到一种方法来检测它是否是新帖子。这些钩子上有一个$update参数,用于显示“这是否是现有的帖子正在更新”,但由于某种原因,即使它是一个新的帖子/订单,它似乎总是设置为true。

总结一下:

  • 我需要一个WordPress / WooCommerce挂钩,它是在通过后端创建订单/后期元时触发的,并且只有在新创建订单且未更新订单时才运行此挂钩。

我可以想到的唯一可能做到这一点的另一种方式是根据this suggestion检查发布日期与修改日期,但我只是认为必须有更好的方法来做到这一点!

Here’s my current code just in case

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 );
php wordpress woocommerce hook-woocommerce orders
1个回答
0
投票

自从Woocommerce 3实现了CRUD methods and data stores以来,有一些专用钩子,您可以专门用于创建订单:

这是一个更好的选择,因为它只是为Woocommerce订单创建。

© www.soinside.com 2019 - 2024. All rights reserved.