Как убрать страницы из поиска?

16 дек. 2010 г., 03:01:47
Просмотры: 21.8K
Голосов: 18

Я не хочу, чтобы страницы моего сайта отображались в поиске, и хочу искать только записи, как это можно сделать? Спасибо

0
Все ответы на вопрос 5
5
37

Приведённый ниже код должен исключить тип записи "страница" из поиска.

function remove_pages_from_search() {
    global $wp_post_types;
    $wp_post_types['page']->exclude_from_search = true; // Устанавливаем исключение страниц из поиска
}
add_action('init', 'remove_pages_from_search'); // Добавляем функцию на хук init
16 дек. 2010 г. 04:23:36
Комментарии

Куда мне вставить этот код? Спасибо

User User
16 дек. 2010 г. 05:09:22

Вы можете поместить его в файл functions.php вашей темы.

prettyboymp prettyboymp
16 дек. 2010 г. 05:18:38

Огромное спасибо. Я просто скопировал и вставил, и он работает идеально

User User
18 дек. 2010 г. 22:14:25

Есть ли способ скрыть определённые страницы вместо всех страниц?

user9437856 user9437856
18 окт. 2021 г. 14:19:39

Эта идея не соответствует WP API, и любое прямое изменение переменных должно рассматриваться как хак, а не как решение.

Krzysztof Przygoda Krzysztof Przygoda
21 окт. 2021 г. 00:26:59
4
14

Следующий код в functions.php также хорошо работает:

//Удаляем страницы из результатов поиска
function mySearchFilter($query) {
if ($query->is_search) {
$query->set('post_type', 'post');
}
return $query;
}
add_filter('pre_get_posts','mySearchFilter');
16 дек. 2010 г. 07:18:41
Комментарии

должно быть решением. более элегантным, более поддерживаемым. вышеприведенное просто изменяет параметры типа записи, это решение изменяет сам поисковый запрос. +1

kaiser kaiser
4 февр. 2011 г. 11:37:05

Изменение объекта типа записи для типа 'page' является лучшим решением. Это решение жестко устанавливает тип записи как 'post' для всех поисковых запросов, что может помешать отображению пользовательских типов записей в результатах поиска, если они есть на сайте. Глобальная установка свойства exclude_from_search объекта типа записи 'page' означает, что любой код, зависящий от проверки этого свойства, будет получать корректную информацию.

prettyboymp prettyboymp
23 янв. 2012 г. 20:44:37

Отчасти релевантная ссылка с дополнительной информацией: http://codex.wordpress.org/Post_Types#Custom_Post_Types_in_the_main_Query

its_me its_me
27 февр. 2013 г. 07:57:19

Работает хорошо, но не отображает темы в bbpress, поэтому это не очень хорошо. Использование "$wp_post_types['page']->exclude_from_search = true;" кажется хорошим вариантом

Kishore Sahoo Kishore Sahoo
24 июл. 2015 г. 16:27:12
1

Вот код для исключения определенных страниц из поиска в WordPress, добавьте следующий код в файл function.php Просто замените массив на ID ваших страниц

function remove_pages_from_search($query) {
  if ( !is_admin() && $query->is_main_query() ) {
    if ($query->is_search) {
      $query->set('post__not_in', array(3031,2958,2926));
    }
  }
}

add_action('pre_get_posts','remove_pages_from_search');
7 июл. 2021 г. 18:01:04
Комментарии

У меня работает. Спасибо и плюсую с моей стороны

user9437856 user9437856
18 окт. 2021 г. 14:35:35
3

Добавьте это в ваш файл search.php

<?php if (is_search() && ($post->post_type=='page')) continue; ?>

непосредственно под этим кодом -> <?php if ( have_posts() ) : while ( have_posts() ) : the_post();?>

Подробнее можно узнать здесь http://wordpress.org/support/topic/possible-search-only-posts-exclude-pages

16 дек. 2010 г. 04:00:37
Комментарии

У меня нет файла search.php, если я возьму его из другой темы, будет ли он работать? Спасибо

User User
16 дек. 2010 г. 05:10:31

Да. Сначала создайте пустой файл search.php, затем скопируйте и вставьте код из index.php. После этого сделайте то, что я сказал выше.

andrewk andrewk
16 дек. 2010 г. 07:33:38

На самом деле вам следует использовать код @prettyboymp. Это проще и делает то, что вы просили. Я проверил. Если хотите...

andrewk andrewk
16 дек. 2010 г. 07:38:31
3

Это решение следует (уважает) WP API, а не изменяет внутренние переменные напрямую.

Обратите внимание, что таким образом вы также можете включить (перезаписать регистрацию) типы или изменить аргументы регистрации, указанные в register_post_type(). Ознакомьтесь с описанием параметра 'exclude_from_search' в документации.

/**
 * Фильтрация типов объектов в результатах поиска.
 * 
 * @param array $args  Массив аргументов для регистрации типа записи.
 *                     Смотрите функцию register_post_type() для списка принимаемых аргументов.
 * @param string $type Ключ типа записи (объекта) (например, 'post', 'page', 'attachment'...,
 *                     или любой зарегистрированный пользовательский тип записи).
 * @return array Отфильтрованные атрибуты типа.
 */
function _filter_search_types( $args, $type ) {
    $exclude_types = array( 'page' );

    if ( in_array( $type, $exclude_types, true ) ) {
        $args['exclude_from_search'] = true;
    }

    return $args;
}
if ( ! is_admin() ) {
    add_filter( 'register_post_type_args', __NAMESPACE__ . '\_filter_search_types', 10, 2 );
}
21 окт. 2021 г. 00:15:49
Комментарии

@Rup - Я говорил про WP API, а не WP REST API (что здесь не применимо). И это не "альтернативный способ" к принятому ответу, а "правильный способ", так как "принятый ответ" не следует WP API и, как любая прямая модификация переменных, должен рассматриваться как хак, а не как решение.

Krzysztof Przygoda Krzysztof Przygoda
21 окт. 2021 г. 01:51:51

@Rup - И ты прав - comment не является типом записи (исправлено).

Krzysztof Przygoda Krzysztof Przygoda
21 окт. 2021 г. 01:59:54

Да, я неправильно понял, извини

Rup Rup
21 окт. 2021 г. 12:36:48