按前端的自定义字段(user_meta)搜索用户

时间:2018-04-23 19:21:33

标签: php wordpress search frontend

我有大量用户,我在前端显示WP_User_Query

我在这个前端用户数据库上有一个搜索功能,需要能够按自定义字段进行搜索,每个配置文件都有多个。

目前,搜索引擎会搜索标准的wp用户字段,例如' user_firstname',' user_lastname',但不会搜索我的自定义字段('机构& #39;&'设备'在这个例子中),我不知道为什么。

查询:

 $search = ( isset($_GET['search-meta']) ) ? sanitize_text_field($_GET['search-meta']) : false ;

 if ($search){

    $my_users = new WP_User_Query( 

      array( 
        'role' => 'Subscriber', 
        'search' => '*' . $search . '*',
        'fields'     => 'all',    
        'meta_query' => array(
            'relation' => 'OR',
                array(
                    'key'     => 'institution',
                    'value'   => '*' . $search . '*',
                    'compare' => 'LIKE'
                ),
                array(
                    'key'     => 'equipment',
                    'value'   => '*' . $search . '*',
                    'compare' => 'LIKE'
                )
            )

      ));

  } 

搜索表单:

<form method="get" id="db-search" action="<?php the_permalink() ?>">

    <input type="text" class="field" name="search-meta" id="s" placeholder="Search Database" />

    <button type="submit"><i class="fa fa-search"></i></button>

</form>

1 个答案:

答案 0 :(得分:2)

您的代码中有两个错误。

    @cabrerahector在评论中提到:您应该从* meta_query删除所有value
  1. 您正在尝试使用search

    'role' => 'Subscriber', 
    'search' => '*' . $search . '*',
    

    但问题是,search密钥始终会尝试从$search表格的email address, URL, ID, username or display_name中找到关系wp_users的{​​{1}}。这意味着,如果您的AND与上述某个列不匹配,那么您的查询将不返回任何内容。

  2. 以下是从$search用户搜索的工作代码:

    meta_values