You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WooCommerce后台订单列表自定义列仅展示特定状态订单客户备注

实现WooCommerce订单列表客户备注列的状态过滤显示

当然可以实现这个需求!只需要在你现有的自定义列代码中添加订单状态判断逻辑,就能让客户备注仅在订单处于wc-autoquote状态时显示。下面分两种场景给你提供解决方案:

场景1:列始终显示,但仅目标状态订单输出备注内容

这种方式下,Customer Notes列会一直出现在订单列表中,但只有状态为wc-autoquote的订单才会显示客户备注,其他状态的订单该列会显示占位符(或空内容)。

修改后的完整代码如下:

// 添加客户备注列头部
add_filter('manage_edit-shop_order_columns', 'add_customer_note_column_header');
function add_customer_note_column_header($columns) {
    $new_columns = is_array($columns) ? $columns : array();
    $new_columns['order_customer_note'] = 'Customer Notes';
    return $new_columns;
}

// 设置列宽度样式
add_action('admin_print_styles', 'add_customer_note_column_style');
function add_customer_note_column_style() {
    $css = '.widefat .column-order_customer_note { width: 15%; }';
    wp_add_inline_style('woocommerce_admin_styles', $css);
}

// 输出客户备注列内容,仅在订单状态为wc-autoquote时显示
add_action('manage_shop_order_posts_custom_column', 'add_customer_note_column_content');
function add_customer_note_column_content($column) {
    global $post, $the_order;

    // 确保订单对象正确初始化
    if(empty($the_order) || $the_order->get_id() != $post->ID) {
        $the_order = wc_get_order($post->ID);
    }

    if($column == 'order_customer_note') {
        // 检查订单状态是否匹配自定义状态wc-autoquote
        if($the_order->get_status() === 'wc-autoquote') {
            $customer_note = $the_order->get_customer_note();
            // 转义输出内容避免安全问题,空备注显示提示文本
            echo '<span class="order-customer-note">' . (!empty($customer_note) ? esc_html($customer_note) : 'No customer note provided') . '</span>';
        } else {
            // 非目标状态输出占位符,也可改为echo '';
            echo '<span class="order-customer-note">-</span>';
        }
    }
}

关键修改说明:

  • 在内容输出函数中新增了$the_order->get_status() === 'wc-autoquote'的状态判断,只有匹配时才渲染客户备注
  • 加入了esc_html()转义处理,避免XSS安全风险
  • 为空备注添加了友好提示,非目标状态订单显示短横线占位符,提升界面一致性

场景2:仅当列表存在目标状态订单时,才显示整个列

如果你希望更极致的体验——当订单列表中没有wc-autoquote状态的订单时,直接隐藏Customer Notes列,可以额外添加以下代码(和上面的代码配合使用):

// 动态控制客户备注列的显示:仅当列表中有wc-autoquote状态订单时才显示
add_filter('manage_edit-shop_order_columns', 'conditional_show_customer_note_column', 20);
function conditional_show_customer_note_column($columns) {
    global $wp_query;

    // 先检查是否直接筛选了wc-autoquote状态
    if(isset($wp_query->query_vars['post_status']) && $wp_query->query_vars['post_status'] === 'wc-autoquote') {
        return $columns;
    }

    // 遍历当前查询的订单,检查是否存在目标状态的订单
    $posts = $wp_query->get_posts();
    foreach($posts as $post) {
        $order = wc_get_order($post->ID);
        if($order && $order->get_status() === 'wc-autoquote') {
            return $columns;
        }
    }

    // 没有目标状态订单,移除该列
    unset($columns['order_customer_note']);
    return $columns;
}

逻辑说明:

  • 先判断用户是否直接筛选了wc-autoquote状态,如果是则直接保留列
  • 否则遍历当前列表的所有订单,只要存在一个目标状态的订单,就保留列
  • 如果完全没有目标状态订单,就移除Customer Notes列

内容的提问来源于stack exchange,提问作者Jerry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 19:37:39