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

Приведённый ниже код должен исключить тип записи "страница" из поиска.
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

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

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

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

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

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

Вот код для исключения определенных страниц из поиска в 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, если я возьму его из другой темы, будет ли он работать? Спасибо

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

Это решение следует (уважает) 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 и, как любая прямая модификация переменных, должен рассматриваться как хак, а не как решение.

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