如何解决根据WooCommerce中的特定订单注释完成订单
我想创建一个代码片段,该代码片段基于特定的订单说明(“ Budbee订单状态:已交付”)来完成Woocommerce订单。我正在使用挂钩执行此操作,并且有一些代码,但是它不起作用。谁能帮帮我吗? PHP不是我的“母语”语言,因此我不确定是否以及在哪里出错。
两个主要问题是:
- 我正在使用右钩子
woocommerce_new_customer_note
吗? - 我的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
是包含所有订单信息的对象吗?
解决方法
已更新 (已从$
中的数组键中删除了错误的$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订单状态:已发送” ,则此方法可行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。