Как искать пользователей на основе добавленных пользовательских метаданных

Вопрос или проблема

Я добавил несколько новых полей в профиль пользователя (код области, компания, аффилиат и т.д.) и хотел бы предложить способ искать по этим полям. Пожалуйста, направьте меня в правильном направлении.

У меня был проект, где нужно было создать форму поиска по метаданным пользователей, и в итоге я создал шорткод для этой цели. Я немного изменил его, чтобы показать вам, как заставить его работать с вашими полями, поэтому просто вставьте этот код в файл 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){

            // здесь мы перебираем найденных пользователей и возвращаем, что вам нужно, например:
            $out .= '<ul>';
            foreach ($search_users as $user) {
                $out .= '<li>' . $user->user_email . '</li>';
            }
            $out .= '</ul>';
        }else{
            $out .= 'Пользователи не найдены, попробуйте поискать что-то другое.';
        }
        $out .= '</div>';
    }
    return $out;
}

//функция для отображения формы поиска пользователей
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">Искать по:</label>
            <select id="search_by" name="search_by">";
    if ($metakey != ''){
        $re.= '"';
        $re.= ($metakey == "nickname") ? '<option value="nickname" selected="selected">Имя</option>': '<option value="nickname">Имя</option>';
        $re.= ($metakey == "areacode") ? '<option value="areacode" selected="selected">Код области</option>': '<option value="areacode">Код области</option>';
        $re.= ($metakey == "company") ? '<option value="company" selected="selected">Компания</option>': '<option value="company">Код области</option>';
        $re.= ($metakey == "affiliate") ? '<option value="affiliate" selected="selected">Аффилиат</option>': '<option value="affiliate">Код области</option>';
    }else{
        $re .= '
            <option value="nickname">Имя</option>
            <option value="areacode">Код области</option>
            <option value="company">Компания</option>
            <option value="affiliate">Аффилиат</option>';
    }
    $re .= '
            </select>
        <label for="s_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="Поиск" />
        </form></div>';
    return $re;
}

Использование:

просто создайте страницу или запись и введите [user_search]

Существуют некоторые плагины, которые вы можете попробовать, они могут быть не точными, но должны удовлетворять вашим потребностям:

Искать все
http://wordpress.org/extend/plugins/search-everything/

фасетный поиск
http://wordpress.org/extend/plugins/faceted-search/

поиск по пользовательским полям wp
http://wordpress.org/extend/plugins/wp-custom-fields-search/

Ответ или решение

Для решения задачи поиска пользователей на основе добавленных метаданных пользователя, таких как areacode, company, affiliate и других, необходимо понимать механику работы с метаданными в среде WordPress. Метаданными называются дополнительные поля, которые можно привязывать к профилю пользователя, предоставляя таким образом средства для более детального и персонализированного поиска.

Теория

В WordPress метаданные пользователей хранятся в таблице wp_usermeta, где конкретная запись метаданной состоит из user_id, meta_key и meta_value. Вот почему для осуществления поиска по метаданным главное — правильно сформировать параметры, по которым будет осуществляться выборка данных.

Функция get_users() WordPress позволяет выполнять поиск пользователей на основе различных параметров, включая параметры метаданных. Вы можете указать meta_key и meta_value для определения критериев поиска. Это крайне полезно в случае, когда вам нужно осуществить поиск по пользовательским полям.

Пример

Рассмотрим предоставленный код, который создает короткий код для выполнения поиска по указанным метаданным:

add_shortcode('user_search','My_User_search');
function My_User_search($atts = null){
    $output = 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);
        $output .= '<div class="user_search_results">';
        if (count($search_users) > 0){
            $output .= '<ul>';
            foreach ($search_users as $user) {
                $output .= '<li>' . $user->user_email . '</li>'; // Здесь можно менять выводимые данные
            }
            $output .= '</ul>';
        } else {
            $output .= 'Пользователи не найдены, попробуйте изменить критерии поиска.';
        }
        $output .= '</div>';
    }
    return $output;
}

// Функция для отображения формы поиска пользователей
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\">Поиск по:</label>
            <select id=\"search_by\" name=\"search_by\">";
    if ($metakey != ''){
        $re .= ($metakey == "nickname") ? '<option value="nickname" selected="selected">Имя</option>': '<option value="nickname">Имя</option>';
        $re .= ($metakey == "areacode") ? '<option value="areacode" selected="selected">Код района</option>': '<option value="areacode">Код района</option>';
        $re .= ($metakey == "company") ? '<option value="company" selected="selected">Компания</option>': '<option value="company">Компания</option>';
        $re .= ($metakey == "affiliate") ? '<option value="affiliate" selected="selected">Аффилиат</option>': '<option value="affiliate">Аффилиат</option>';
    } else {
        $re .= '
            <option value="nickname">Имя</option>
            <option value="areacode">Код района</option>
            <option value="company">Компания</option>
            <option value="affiliate">Аффилиат</option>';
    }
    $re .= '
            </select>
        <label for="s_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="Поиск" />
        </form></div>';
    return $re;
}

Данный код создает форму на странице WordPress, с помощью которой можно выбрать метаданное поле для поиска и ввести его значение. После отправки формы выполняется поиск пользователей, соответствующих указанным критериям, и результаты отображаются на странице.

Применение

Чтобы внедрить данное решение на ваш сайт WordPress, выполните следующие шаги:

  1. Вставьте указанный выше код в файл functions.php вашей темы или в отдельный плагин.
  2. Создайте страницу или пост на вашем сайте и добавьте следующий шорткод: [user_search].
  3. Посетите созданную страницу и попробуйте выполнить поиск по вашему новому полю, введя соответствующее значение.

В дополнение к пользовательскому коду, вы можете воспользоваться плагинами WordPress, которые обеспечивают поддержку поиска по метаданным:

  • Search Everything: улучшает возможности стандартного поиска WordPress, включая метаданные.
  • Faceted Search: предоставляет интерфейс фасетного поиска, который позволяет пользователям фильтровать результаты по различным критериям.
  • WP Custom Fields Search: специализирован для поиска по метаданным и предлагает более широкий функционал для кастомизации процесса поиска.

Решение выбора между собственным кодом и использованием плагина зависит от конкретных нужд вашего проекта и степени необходимой кастомизации. Использование кода может дать больший контроль над отображением и логикой поиска, тогда как плагины обеспечивают более простое развертывание и поддерживают дополнительный функционал.

Таким образом, следуя данным рекомендациям, вы сможете успешно организовать поиск пользователей по добавленным метаданным, обеспечивая удобный интерфейс для пользователей вашего сайта.

Оцените материал
Добавить комментарий

Капча загружается...