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

如何在WooCommerce后台按billing_customer_number搜索用户?

在WooCommerce后台用户搜索中添加billing_customer_number筛选的解决方案

默认WooCommerce后台「用户→搜索用户」仅支持搜索user_login、user_url、user_email、user_nicename、display_name这些wp_users表的字段,要实现按billing_customer_number(用户元字段)搜索,你之前的尝试存在几个核心问题,以下是修正后的方案:

问题分析

  1. 直接修改核心文件无效:search_columns仅支持wp_users表的原生字段,billing_customer_number属于wp_usermeta表的元字段,无法通过该参数添加;且修改核心文件会在WooCommerce更新后丢失改动。
  2. 元查询修改逻辑错误:你单独构建的元查询覆盖了原有搜索逻辑,没有和默认的用户表字段搜索结合,导致搜索范围被限制,且未正确利用钩子的参数传递。
  3. 钩子代码未覆盖全场景:仅处理meta_query类型的查询,但WooCommerce的用户搜索会同时触发main_query和meta_query两种类型,遗漏其中一种会导致搜索失效。

正确实现代码

将以下代码添加到主题的functions.php文件或自定义插件中,不要修改WooCommerce核心文件:

add_filter('woocommerce_customer_search_customers', 'add_billing_customer_number_to_customer_search', 10, 4);
function add_billing_customer_number_to_customer_search($query_args, $term, $limit, $type) {
    // 处理主查询:保留原有用户表字段搜索,同时加入元字段搜索
    if ($type === 'main_query') {
        $original_search = $query_args['search'];
        $original_columns = $query_args['search_columns'];
        
        // 组合原有搜索条件与自定义元字段搜索
        $query_args = array(
            'fields'   => 'ID',
            'number'   => $limit,
            'relation' => 'OR',
            // 原有用户表字段搜索
            array(
                'search'         => $original_search,
                'search_columns' => $original_columns,
            ),
            // 自定义元字段搜索
            array(
                'meta_query' => array(
                    array(
                        'key'     => 'billing_customer_number',
                        'value'   => $term,
                        'compare' => 'LIKE',
                    ),
                ),
            ),
        );
    }
    // 处理元查询:将自定义字段加入现有元搜索条件
    elseif ($type === 'meta_query') {
        // 确保元查询数组存在OR关系
        if (!isset($query_args['meta_query'])) {
            $query_args['meta_query'] = array('relation' => 'OR');
        } elseif (!isset($query_args['meta_query']['relation'])) {
            $query_args['meta_query']['relation'] = 'OR';
        }
        
        // 添加billing_customer_number搜索条件
        $query_args['meta_query'][] = array(
            'key'     => 'billing_customer_number',
            'value'   => $term,
            'compare' => 'LIKE',
        );
    }
    
    return $query_args;
}

验证要点

  1. 确认billing_customer_number确实存在于wp_usermeta表中,可通过phpMyAdmin或自定义函数查询用户元数据验证。
  2. 测试搜索时,输入存在的billing_customer_number值,确认能匹配到对应用户,同时原有默认字段的搜索功能不受影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 12:11:24