Как убрать страницы из поиска?
Я не хочу, чтобы страницы моего сайта отображались в поиске, и хочу искать только записи, как это можно сделать? Спасибо
Приведённый ниже код должен исключить тип записи "страница" из поиска.
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
Огромное спасибо. Я просто скопировал и вставил, и он работает идеально
User
Есть ли способ скрыть определённые страницы вместо всех страниц?
user9437856
должно быть решением. более элегантным, более поддерживаемым. вышеприведенное просто изменяет параметры типа записи, это решение изменяет сам поисковый запрос. +1
kaiser
Изменение объекта типа записи для типа 'page' является лучшим решением. Это решение жестко устанавливает тип записи как 'post' для всех поисковых запросов, что может помешать отображению пользовательских типов записей в результатах поиска, если они есть на сайте. Глобальная установка свойства exclude_from_search объекта типа записи 'page' означает, что любой код, зависящий от проверки этого свойства, будет получать корректную информацию.
prettyboymp
Отчасти релевантная ссылка с дополнительной информацией: http://codex.wordpress.org/Post_Types#Custom_Post_Types_in_the_main_Query
its_me
Вот код для исключения определенных страниц из поиска в 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');
Добавьте это в ваш файл 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
У меня нет файла search.php, если я возьму его из другой темы, будет ли он работать? Спасибо
User
Да. Сначала создайте пустой файл search.php, затем скопируйте и вставьте код из index.php. После этого сделайте то, что я сказал выше.
andrewk
Это решение следует (уважает) 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 );
}
@Rup - Я говорил про WP API, а не WP REST API (что здесь не применимо). И это не "альтернативный способ" к принятому ответу, а "правильный способ", так как "принятый ответ" не следует WP API и, как любая прямая модификация переменных, должен рассматриваться как хак, а не как решение.
Krzysztof Przygoda
@Rup - И ты прав - comment не является типом записи (исправлено).
Krzysztof Przygoda