You need to enable JavaScript to run this app. 如何在WordPress后台让用户自定义地址列支持WP_User_Query搜索
优惠活动
大模型
产品
解决方案
定价
更多

如何在WordPress后台让用户自定义地址列支持WP_User_Query搜索

你直接将billing_address加入search_columns参数不生效,是因为该参数仅支持wp_users系统表的原生字段,而账单地址存储在用户元数据表的billing_state、billing_city、billing_postcode三个独立字段中,不属于用户表原生字段,WP_User_Query默认不会检索这类自定义元数据。

具体实现方案

分两种场景适配,按需选择即可:

场景1:适配WordPress后台自带的用户列表搜索

直接在主题functions.php或自定义插件中加入以下代码,即可让后台用户搜索同时匹配用户名、邮箱、三个账单地址字段:

add_action('pre_get_users', 'add_billing_fields_to_user_search');
function add_billing_fields_to_user_search($query) {
    // 仅在后台用户列表页面的搜索请求中生效
    global $pagenow;
    if (!is_admin() || $pagenow !== 'users.php' || empty($query->query_vars['search'])) {
        return;
    }
    
    // 去掉搜索关键词默认的前后%,后面自定义匹配规则
    $search_keyword = trim($query->query_vars['search'], '*%');
    if (empty($search_keyword)) {
        return;
    }

    // 新增元数据查询条件,匹配三个账单字段
    $meta_query = array(
        'relation' => 'OR',
        array(
            'key' => 'billing_state',
            'value' => $search_keyword,
            'compare' => 'LIKE'
        ),
        array(
            'key' => 'billing_city',
            'value' => $search_keyword,
            'compare' => 'LIKE'
        ),
        array(
            'key' => 'billing_postcode',
            'value' => $search_keyword,
            'compare' => 'LIKE'
        )
    );

    // 将元查询和原有的用户表查询做OR关联,实现联合搜索
    $query->set('meta_query', array(
        'relation' => 'OR',
        $meta_query,
        // 保留原有的用户表字段搜索逻辑
        array(
            'relation' => 'OR',
            array(
                'key' => 'user_login',
                'value' => $search_keyword,
                'compare' => 'LIKE'
            ),
            array(
                'key' => 'user_email',
                'value' => $search_keyword,
                'compare' => 'LIKE'
            )
        )
    ));

    // 清空原search参数,避免重复查询
    $query->set('search', '');
}

场景2:自定义调用WP_User_Query时支持账单地址搜索

如果你是自己写查询逻辑,不需要修改全局钩子,直接在查询参数中加入meta_query即可,示例代码如下:

$search_keyword = '你要搜索的关键词';
$args = array(
    'number'         => 200,
    'fields'         => 'all',
    'meta_query'     => array(
        'relation' => 'OR',
        // 匹配账单地址字段
        array(
            'key' => 'billing_state',
            'value' => $search_keyword,
            'compare' => 'LIKE'
        ),
        array(
            'key' => 'billing_city',
            'value' => $search_keyword,
            'compare' => 'LIKE'
        ),
        array(
            'key' => 'billing_postcode',
            'value' => $search_keyword,
            'compare' => 'LIKE'
        ),
        // 匹配用户名、邮箱
        array(
            'key' => 'user_login',
            'value' => $search_keyword,
            'compare' => 'LIKE'
        ),
        array(
            'key' => 'user_email',
            'value' => $search_keyword,
            'compare' => 'LIKE'
        )
    )
);
$zip_search = new WP_User_Query($args);
注意事项
  • 你原来代码里search_columns参数中的billing_address可以删除,该参数不支持自定义元字段,加了也不会生效
  • 如果需要精确匹配,把代码中的compare参数值从LIKE改成=即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 05:54:04