wordpress 用于在Woocommerce 3中创建订单的钩子

hmae6n7t  于 2023-06-21  发布在  WordPress
关注(0)|答案(2)|浏览(164)

我需要检测何时成功创建新的WooCommerce订单并设置为“处理”-这是为了添加一些额外的功能等。这在前端很好,因为当通过WooCommerce woocommerce_thankyouwoocommerce_order_status_processing钩子创建订单时,很容易挂钩。
我的问题是,我也希望这工作时,通过网站的后端手动创建一个新的订单。我使用一些自定义字段时,通过手动添加一个订单,这是用来操纵订单时创建的。不幸的是,尽管woocommerce_order_status_processing确实可以用于管理订单,但它似乎在订单 meta被保存之前就被触发了,因此当我试图检索任何元数据时,它都是空的。
为了解决这个问题,我尝试了WooCommerce hook for order creation from admin或这个GitHub线程上的建议,即使用WordPress钩子wp_insert_postsave_post_shop_ordersave_post_{$post->post_type})。这可以解决我的订单 meta问题,因为它似乎在订单元保存后触发。

  • 然而 * -它触发每次有一个更新或一个新的职位,所以我需要找到一种方法来检测它是否是一个新的职位或没有。在这些钩子上有一个$update参数,用于显示 '这是否是一个正在更新的现有帖子',但由于某种原因,它似乎总是被设置为true,即使它是一个新的帖子/订单。

总结一下:

  • 我需要一个WordPress/WooCommerce钩子,是通过后端 * 和 * 只有运行此命令时,新创建的,而不是更新的一些方式创建后,订单/后 meta触发。

我能想到的唯一其他可能的方法是检查发布日期与修改日期,但我只是认为必须有一个更好的方法来做到这一点!

以下是我当前的代码,以防万一

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 );
prdp8dxp

prdp8dxp1#

你可以使用woocommerce_new_order钩子:

add_action('woocommerce_new_order', function ($order_id) {
     // your code
}, 10, 1);
h7wcgrx3

h7wcgrx32#

  • 2023年更新 *

由于WooCommerce 3已经实现了CRUD methods and data stores,因此有一些专用钩子,您可以专门用于创建订单。:
您可以使用woocommerce_new_orderaction hook来触发一些创建订单的自定义代码(位于WC_Order_Data_Store_CPTcreate()方法中)。

add_action('woocommerce_new_order', 'action_woocommerce_new_order', 10, 2);
function action_woocommerce_new_order( $order_id, $order ) {
     // Here your custom action code
}

还有一个woocommerce_new_order_datafilter hook,允许您在创建订单时保存之前在函数wp_insert_post()过滤一些数据(位于Abstract_WC_Order_Data_Store_CPTcreate()方法中)

add_filter('woocommerce_new_order_data', 'action_woocommerce_new_order_data', 10, 2);
function action_woocommerce_new_order( $data_arr, $wp_error ) {
     // Here your custom code to filter data

     // Always return the main argument
     return $data_arr;
}

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

相关问题