Поиск по слову, категории, тегу, автору

19 июл. 2012 г., 15:48:43
Просмотры: 20K
Голосов: 2

Для создания страницы поиска с возможностями поиска по: 1) слову 2) тегу 3) категории 4) автору Вы можете использовать WordPress WP_Query с параметрами поиска. Вот пример реализации:


// Получаем параметры поиска
$search_word = isset($_GET['s']) ? sanitize_text_field($_GET['s']) : '';
$search_tag = isset($_GET['tag']) ? (int)$_GET['tag'] : 0;
$search_cat = isset($_GET['cat']) ? (int)$_GET['cat'] : 0;  
$search_author = isset($_GET['author']) ? (int)$_GET['author'] : 0;

// Формируем параметры запроса
$args = array(
    'post_type' => 'post',
    'posts_per_page' => 10
);

// Добавляем поиск по слову
if(!empty($search_word)) {
    $args['s'] = $search_word;
}

// Добавляем поиск по тегу
if($search_tag > 0) {
    $args['tag_id'] = $search_tag;
}

// Добавляем поиск по категории  
if($search_cat > 0) {
    $args['cat'] = $search_cat;
}

// Добавляем поиск по автору
if($search_author > 0) {
    $args['author'] = $search_author;
}

// Выполняем поиск
$query = new WP_Query($args);

// Выводим результаты
if($query->have_posts()) :
    while($query->have_posts()) : $query->the_post();
        // Вывод постов
        get_template_part('template-parts/content', 'search');
    endwhile;
else :
    echo 'Ничего не найдено';
endif;

wp_reset_postdata();

А вот пример формы поиска:


<form method="get" action="<?php echo esc_url(home_url('/')); ?>">
    <input type="text" name="s" placeholder="Поиск по слову" value="<?php echo get_search_query(); ?>">
    
    <select name="cat">
        <option value="">Выберите категорию</option>
        <?php
        $categories = get_categories();
        foreach($categories as $category) {
            echo '<option value="' . $category->term_id . '">' . $category->name . '</option>';
        }
        ?>
    </select>
    
    <select name="tag">
        <option value="">Выберите тег</option>
        <?php
        $tags = get_tags();
        foreach($tags as $tag) {
            echo '<option value="' . $tag->term_id . '">' . $tag->name . '</option>';
        }
        ?>
    </select>
    
    <select name="author">
        <option value="">Выберите автора</option>
        <?php
        $authors = get_users(['who' => 'authors']);
        foreach($authors as $author) {
            echo '<option value="' . $author->ID . '">' . $author->display_name . '</option>';
        }
        ?>
    </select>
    
    <button type="submit">Поиск</button>
</form>
0
Все ответы на вопрос 2
1

Вам нужно добавить переключатели (radio buttons) в форму поиска. Затем добавьте фильтр к вашему поиску:

function filter_search( $query ) {
if( $query->is_search ) {
            if ( isset($_GET['tag']) )
            // измените ваш поисковый запрос здесь.
}
return $query;
}
add_filter( 'pre_get_posts' , 'filter_search' );

Под влиянием http://wordpress.org/support/topic/how-to-add-search-filter-by-custom-values#post-1463329

19 июл. 2012 г. 16:26:38
Комментарии

Я учту это, если буду вручную формировать строку запроса с помощью радио-кнопок и текстовых полей. Спасибо!

p.a. p.a.
20 июл. 2012 г. 09:21:52
2

Если вы предпочитаете, чтобы всю работу за вас выполнял плагин WordPress, обратите внимание на Search Everything в репозитории плагинов WordPress.

Улучшает стандартный функционал поиска WordPress в три простых шага с помощью Search Everything.

Улучшенный поиск в WordPress за три шага

Активировать → Настроить параметры → Искать (может быть, это всего два шага).

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

Что делает плагин:

Search Everything расширяет возможности стандартного поиска WordPress, доступны следующие опции:

  • Подсветка результатов поиска
  • Поиск по всем страницам
  • Поиск по всем меткам
  • Поиск по пользовательским таксономиям (новая функция)
  • Поиск по всем категориям
  • Поиск только по страницам без пароля
  • Поиск по всем комментариям
  • Поиск только по одобренным комментариям
  • Поиск по всем черновикам
  • Поиск по всем отрывкам
  • Поиск по всем вложениям (тип записи)
  • Поиск по всем пользовательским полям (метаданным)
  • Исключение записей из поиска
  • Исключение категорий из поиска

[Плагин WordPress]: Search Everything

19 июл. 2012 г. 16:44:21
Комментарии

Отличная идея, я попробовал для поиска по пользовательским типам записей, и это работает, спасибо!

p.a. p.a.
20 июл. 2012 г. 09:20:52

Этот плагин полезен, но делает противоположное тому, что мне нужно: он принимает слово на вход и ищет его в метках, категориях, заголовках и т.д. Мне же нужны критерии типа: категорияZ & метка "XYY" & заголовок содержит "Дом". Так что, полагаю, этот плагин здесь не подходит. Верно?

p.a. p.a.
20 июл. 2012 г. 10:29:18