web-dev-qa-db-ja.com

追加されたユーザーメタデータに基づいてユーザーを検索する方法

ユーザープロファイルにいくつかの新しいフィールド(areacode、company、affiliateなど)を追加しました。これらのフィールドで検索する方法を提示したいと思います。私を正しい方向に向けてください。

5
Gregg

ユーザーメタフォームで検索を作成する必要があるプロジェクトがあり、そのためのショートコードを作成しました。フィールドをどのように機能させるかを示すために少し変更したので、このコードを貼り付けます。テーマのfunctions.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;
}

使用法:

単にページまたは投稿を作成して[user_search]と入力してください。

4
Bainternet

試してみることができるいくつかのプラグインがあります、それは正確ではないかもしれませんが、それはあなたのニーズをカバーするべきです:

すべて検索/ http://wordpress.org/extend/plugins/search-everything/ /

ファセット検索 http://wordpress.org/extend/plugins/faceted-search/ /

wpカスタムフィールド検索 http://wordpress.org/extend/plugins/wp-custom-fields-search/ /

1
Sean Lee