显示所有WordPress作者然后按元键过滤列表

时间:2018-02-10 20:55:08

标签: php wordpress

我试图在网站的前端显示我所有WordPress网站作者的列表。我希望该网站的用户能够从下拉菜单中选择一个区域,并选择要由所选区域过滤的用户列表。该区域被设置为名为“县”的元键。

我已经按照this link中的示例进行了操作,该示例在大多数情况下都有所帮助,但我目前遇到的问题是用户列表为空,仅在运行搜索时填充。

我目前设置的代码如下:

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_query'    => array(
            'relation'  => 'AND',
            array( 
                'key'     => $metakey,
            ),
            array(
                'key'     => 'rescue_pound_vet',
                'value'   => 'rescue'
            )
        )
    );

         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_nicename . '</li>';
                $out .= '<li>' . $user->county . '</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 == "county") ? '<option value="county" selected="selected">County</option>': '<option value="county">County</option>';
    }else{
        $re .= '
            <option value="county">County</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;
}

有没有办法设置$ args首先显示所有作者,然后修改为用户到网站进行搜索。

由于

1 个答案:

答案 0 :(得分:0)

我找到了答案。

初始参数集位于if语句中,该语句仅在执行搜索时运行。我对此进行了修改,因此首先运行一组基本参数然后如果使用了搜索,那么只有变量的参数才会运行。

这是经过修改和修复的部分:

add_shortcode('user_search','My_User_search');
function My_User_search($atts = null){
    $out = user_search_form();

    $args = array(
        'meta_query'    => array(
            array(
                'key'     => 'rescue_pound_vet',
                'value'   => 'rescue'
            )
        )
    );

    if (isset($_GET['user_search']) && $_GET['user_search'] == "search_users" && isset($_GET['search_by'])){
        global $wpdb;
        $metakey = $_GET['search_by'];
        $args = array(
        'meta_query'    => array(
            'relation'  => 'AND',
            array( 
                'key'     => $metakey,
            ),
            array(
                'key'     => 'rescue_pound_vet',
                'value'   => 'rescue'
            )
        )
    );
}