php - 根据 WooCommerce 中的特定订单备注完成订单

标签 php wordpress woocommerce hook-woocommerce orders

我想创建一个代码片段,用于根据特定订单备注(“Budbee 订单状态:已交付”)完成 Woocommerce 订单。我正在使用一个钩子(Hook)来执行此操作,并且我有一些代码,但它不起作用。谁能帮帮我吗? 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' );
    }
}

感谢一百万!!

更新

我想我选择了错误的钩子(Hook)(客户备注,而不是订单备注)。可能应该是:

/**
         * 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 是包含所有订单信息的对象吗?

最佳答案

已更新 (从 $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这样的方式 Hook :

    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 订单状态:已交付”,则此操作可行。

关于php - 根据 WooCommerce 中的特定订单备注完成订单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64561810/

相关文章:

html - 需要将社交媒体图标与页面右侧对齐

php - 用 PhP 中的可点击图像替换 woocommerce 中的按钮

php - 在 WooCommerce 我的帐户订单列表中添加发送给客户的管理订单备注

php - 覆盖 Woocommerce Checkout 的前端 JS

PHP - 上传 CSV、插入到多个表并在其他地方显示

php - SQL Union 只计算一个查询

具有 64 GB RAM 的 Mysql 调整服务器消耗 50% 的 CPU

php - 如何消除 WooCommerce 商店中产品类别之间的差距?

javascript - 名称年龄和上传文件未显示在数据库中

php - CSS 样式表不工作