根据WooCommerce中的特定订单注释完成订单

时间:2020-10-27 19:44:32

标签: php wordpress woocommerce hook-woocommerce orders

我想创建一个代码片段,该代码片段基于特定的订单说明(“ Budbee订单状态:已交付”)来完成Woocommerce订单。我正在使用挂钩执行此操作,并且有一些代码,但是它不起作用。谁能帮帮我吗? PHP不是我的“母语”语言,因此我不确定是否以及在哪里出错。

两个主要问题是:

  1. 我正在使用右钩子woocommerce_new_customer_note吗?
  2. 我的PHP代码正确吗?

下面是代码:

add_action( 'woocommerce_new_customer_note', 'auto_complete_budbee_delivered' );

function auto_complete_budbee_delivered( $order_id, $customer_note ) {
    if ($customer_note == "Budbee order status: Delivered") {
        $order = wc_get_order( $order_id );
        $order->update_status( 'completed' );
    }
}

谢谢百万!

更新

我认为我选择了错误的挂钩(客户注释,而不是订单注释)。可能应该是:

/**
         * Action hook fired after an order note is added.
         *
         * @param int      $order_note_id Order note ID.
         * @param WC_Order $order         Order data.
         *
         * @since 4.4.0
         */
        do_action( 'woocommerce_order_note_added', $comment_id, $this );

        return $comment_id;

这里的问题是,您只获得了comment_id,而没有获得消息或order_id。任何edea如何获取便笺的order_id和内容?这来自@LuicTheAztec共享的同一文档。 $this是包含所有订单信息的对象吗?

1 个答案:

答案 0 :(得分:3)

已更新 (已从$中的数组键中删除了错误的$args['customer_note']

您没有以正确的方式为woocommerce_new_customer_note (请参阅in the hook source code设置函数参数,因此请尝试以下操作:

add_action( 'woocommerce_new_customer_note', 'auto_complete_budbee_delivered' );

function auto_complete_budbee_delivered( $args ) {
    if ( $args['customer_note'] == "Budbee order status: Delivered") {
        $order = wc_get_order( $args['order_id'] );
        $order->update_status( 'completed' );
    }
}

现在应该可以更好地工作了。


编辑 (与您的问题编辑有关)

或者您最好使用woocommerce_order_note_added这样的钩子:

    add_action( 'woocommerce_order_note_added', 'auto_complete_budbee_delivered', 10, 2 );
    function auto_complete_budbee_delivered( $comment_id, $order ) {
        $comment_obj   = get_comment( $comment_id );
        $customer_note = $comment_obj->comment_content;

        if ( $customer_note == "Budbee order status: Delivered") {
            $order->update_status( 'completed' );
        }
    }

如果注释内容恰好是“ Budbee订单状态:已发送” ,则此方法可行。

相关问题