如何根据添加的用户元数据搜索用户

时间:2011-07-18 作者:Gregg

我已经在用户配置文件中添加了几个新字段(区号、公司、分支机构等),我想介绍一种在这些字段上搜索的方法。请给我指出正确的方向。

2 个回复
最合适的回答,由SO网友:Bainternet 整理而成

我刚刚有一个项目,我需要创建一个按用户搜索的元表单,最后我为它创建了一个短代码,我只是对它做了一些修改,以向您展示如何使其与字段一起工作,所以只需将此代码粘贴到主题的函数中即可。php文件或插件文件:

add_shortcode(\'user_search\',\'My_User_search\');
function My_User_search($atts = null){
    $out = user_search_form();
    if (isset($_GET[\'user_search\']) && $_GET[\'user_search\'] == "search_users" && isset($_GET[\'search_by\'])){
        global $wpdb;
        $metakey = $_GET[\'search_by\'];
        $args = array(\'meta_key\' => $metakey);
         if (isset($_GET[\'s_value\'])){
            $metavalue = $_GET[\'s_value\'];
            $args[\'meta_value\'] = $metavalue;
         }


        $search_users = get_users($args);
        $out .= \'<div class="user_search_results">\';
        if (count($search_users) >0){

            // here we loop over the users found and return whatever you want eg:
            $out .= \'<ul>\';
            foreach ($search_users as $user) {
                $out .= \'<li>\' . $user->user_email . \'</li>\';
            }
            $out .= \'</ul>\';
        }else{
            $out .= \'No users found, try searching for something else.\';
        }
        $out .= \'</div>\';
    }
    return $out;
}

//function to display user search form
function user_search_form(){
    $metavalue = $metakey = \'\';
    if (isset($_GET[\'search_by\'])){
        $metakey = $_GET[\'search_by\'];
    }
    if (isset($_GET[\'s_value\'])){
        $metavalue = $_GET[\'s_value\'];
    }
    $re = \'<div class="user_search"><form action="" name="user_s" method="get">
        <label for="search_by">Search by:</label>
            <select id="search_by" name="search_by">\';
    if ($metakey != \'\'){
        $re.= \'"\';
        $re.= ($metakey == "nickname") ? \'<option value="nickname" selected="selected">Name</option>\': \'<option value="nickname">Name</option>\';
        $re.= ($metakey == "areacode") ? \'<option value="areacode" selected="selected">area code</option>\': \'<option value="areacode">area code</option>\';
        $re.= ($metakey == "company") ? \'<option value="company" selected="selected">company</option>\': \'<option value="company">area code</option>\';
        $re.= ($metakey == "affiliate") ? \'<option value="affiliate" selected="selected">affiliate</option>\': \'<option value="affiliate">area code</option>\';
    }else{
        $re .= \'
            <option value="nickname">Name</option>
            <option value="areacode">area code</option>
            <option value="company">company</option>
            <option value="affiliate">affiliate</option>\';
    }
    $re .= \'
            </select>
        <label for="s_value">Value:</label>
            <input id="s_value" name="s_value" type="text" value="\'.$metavalue.\'"/>
            <input name="user_search" id="user_search" type="hidden" value="search_users"/>
            <input id="submit" type="submit" value="Search" />
        </form></div>\';
    return $re;
}

Usage:

只需创建一个页面或帖子,然后输入[user_search]

SO网友:Sean Lee

有一些插件,您可以尝试一下,它可能不准确,但应该满足您的需要:

搜索所有内容http://wordpress.org/extend/plugins/search-everything/

面搜索http://wordpress.org/extend/plugins/faceted-search/

wp自定义字段搜索http://wordpress.org/extend/plugins/wp-custom-fields-search/

结束

相关推荐

Search posts by ID in admin

我正在寻找一种通过ID搜索帖子的方法,最好是支持自定义帖子类型。我希望有一个插件可以实现这个功能,但我没有找到任何东西。如果您有任何想法,我们将不胜感激,谢谢。