在 WooCommerce 中为特定用户角色创建订单时添加额外的客户注释

Posted

技术标签:

【中文标题】在 WooCommerce 中为特定用户角色创建订单时添加额外的客户注释【英文标题】:Add extra customer note on order creation for specific user role in WooCommerce 【发布时间】:2021-12-22 20:14:47 【问题描述】:

对于特定的用户角色,我想在订单中添加特定的客户备注。

这是我的代码:

add_action( 'woocommerce_new_order', 'add_customer_note_user_role' );
function add_customer_note_user_role( $order_id ) 

    $user_info = get_userdata(get_current_user_id());

    if ( $user_info->roles[0]=="administrator" ) 

        $order = wc_get_order( $order_id );

        // The text for the note
        $note = 'This is the message';

        // Add the note
        $order->add_order_note( $note );

        // Save the data
        $order->save();
    

但这会将消息放在错误的位置。当您在后端检查订单时,它会显示在紫色消息框中。

我希望将消息显示为送货地址下方的客户备注。因为我的 API 正在从那个地方提取笔记并将它们放入我们的 ERP。

我试图改变

$order->add_order_note( $note );

$order->add_order_note( $note, 'is_customer_note', true );

但是没有想要的结果,有什么建议吗?

【问题讨论】:

【参考方案1】:

要将消息显示为送货地址下方的客户备注,您可以改用set_customer_note()。

所以你得到:

function action_woocommerce_new_order( $order_id ) 
    // Get the WC_Order Object
    $order = wc_get_order( $order_id );

    // Get the WP_User Object
    $user = $order->get_user();
    
    // Check for "administrator" user roles only
    if ( is_a( $user, 'WP_User' ) && in_array( 'administrator', (array) $user->roles ) ) 
        // The text for the note
        $note = 'This is the message';
        
        // Set note
        $order->set_customer_note( $note );
        
        // Save
        $order->save();
    

add_action( 'woocommerce_new_order', 'action_woocommerce_new_order', 10, 1 );

要保留原始消息(当不为空时),请改用:

function action_woocommerce_new_order( $order_id ) 
    // Get the WC_Order Object
    $order = wc_get_order( $order_id );

    // Get the WP_User Object
    $user = $order->get_user();
    
    // Check for "administrator" user roles only
    if ( is_a( $user, 'WP_User' ) && in_array( 'administrator', (array) $user->roles ) ) 
        // The text for the note
        $note = 'This is the message';
        
        // Get customer note
        $customer_note = $order->get_customer_note();
        
        // NOT empty
        if ( ! empty ( $customer_note ) ) 
            $note = $customer_note . ' | ' . $note;
        
        
        // Set note
        $order->set_customer_note( $note );
        
        // Save
        $order->save();
    

add_action( 'woocommerce_new_order', 'action_woocommerce_new_order', 10, 1 );

【讨论】:

以上是关于在 WooCommerce 中为特定用户角色创建订单时添加额外的客户注释的主要内容,如果未能解决你的问题,请参考以下文章

为 Woocommerce 中的特定用户角色自定义我的帐户新菜单项

如何在 WooCommerce 中为未登录用户禁用特定插件?

在 Woocommerce 中隐藏特定用户角色的特定运输方式

在 WooCommerce 中隐藏特定用户角色的增值税

在 WooCommerce 中检查挂钩功能破坏网站上的用户角色

Woocommerce 订单 API 订单项 ID 在更新时更改