Как мне искать авторов через поисковую форму, используя имя автора?

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

Я пытаюсь использовать поиск от

  1. авторов,
  2. объявлений (т.е. пользовательский тип записи)
  3. товаров (т.е. пользовательский тип записи)

Я могу искать пользовательские типы записей, но не могу сделать это для авторов.

Я использую следующую форму поиска.

<form role="search" method="get" id="searchform" action="<?php echo home_url( "https://wordpress.stackexchange.com/" ); ?>">                  
   <div class="input-box">
       <input name="s" id="s" type="text" class="form-control" placeholder="Что вы ищете...">
    </div>

    <div class="selection-box">
         <select name="post_type" id="basic" class="selectpicker show-tick form-control">
             <option value="job_listing">Объявление</option>
             <option value="product">Магазин</option>
             <option value="author">Автор</option>
             <option value="">Все</option>                        
         </select>                      
     </div>

     <div class="search-btn">
          <input type="submit" class="form-control" value="поиск">
     </div>
</form>

Вам следует создать фильтр pre_get_posts и триггер в $query->is_search(), чтобы проверить, установлен ли post_type на author, и если да, то сбросить post_type на записи или что-либо другое, что вы хотите, и установить параметры автора в объект $query.

Связанные ссылки:

https://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts
https://codex.wordpress.org/Class_Reference/WP_Query#Author_Parameters

Или вам следует создать другой выбор, перечисляющий всех пользователей, и дать ему имя Параметры автора, найденные в wp_query

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

Чтобы внедрить поиск авторов в вашу форму поиска на WordPress, вам необходимо внести несколько изменений и дополнений в ваш код. Давайте подробно разберем процесс.

1. Условие поиска в функции pre_get_posts

Самым простым и очевидным способом достижения вашей цели является использование хука pre_get_posts. Этот метод позволяет модифицировать основные параметры запроса перед тем, как он будет выполнен. Мы будем использовать условие $query->is_search() для проверки, был ли выполнен поиск. Если выбран тип поста author, мы изменим параметры запроса, чтобы искать авторов.

Вот пример кода, который вы можете добавить в файл вашей темы functions.php:

function custom_author_search($query) {
    if ($query->is_search && !is_admin() && isset($_GET['post_type']) && $_GET['post_type'] == 'author') {
        $query->set('post_type', 'post'); // Устанавливаем тип поста. Это может быть любой тип (например, 'post').
        $query->set('author_name', sanitize_text_field($_GET['s'])); // Используем имя автора для поиска.
        $query->set('s', ''); // Очищаем основное значение поиска, чтобы избежать конфликтов.
    }
    return $query;
}
add_action('pre_get_posts', 'custom_author_search');

2. Изменение HTML формы поиска

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

<form role="search" method="get" id="searchform" action="<?php echo esc_url(home_url('/')); ?>">
   <div class="input-box">
       <input name="s" id="s" type="text" class="form-control" placeholder="Что вы ищете..." required>
    </div>

    <div class="selection-box">
         <select name="post_type" id="basic" class="selectpicker show-tick form-control">
             <option value="job_listing">Объявление</option>
             <option value="product">Магазин</option>
             <option value="author">Автор</option>
             <option value="">Все</option>                        
         </select>                      
     </div>

     <div class="search-btn">
          <input type="submit" class="form-control" value="Поиск">
     </div>
</form>

3. Предоставление дополнительного выбора авторов

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

<div class="selection-box">
    <select name="author_name" id="author" class="selectpicker show-tick form-control">
        <option value="">Выберите автора</option>
        <?php
        $authors = get_users(array('who' => 'authors'));
        foreach ($authors as $author) {
            echo '<option value="' . esc_attr($author->user_nicename) . '">' . esc_html($author->display_name) . '</option>';
        }
        ?>
    </select>
</div>

Заключение

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

Не забудьте протестировать все изменения в различных сценариях, чтобы убедиться, что поиск работает корректно и предоставляет пользователям ожидаемые результаты.

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

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