Intereting Posts
Как изолировать код на экране редактирования сообщений Как получить первый тег сообщения в виде гиперссылки? Что это за ошибка HTTP ? Как удалить меню «Обновления» в панели администратора WordPress? Я хочу удалить изображение заголовка главной страницы со всех других страниц Функция WordPress: ограничение размера, только jpg, jpeg, ограничение загруженных файлов на аккаунт Программно загружать файл в WordPress с помощью API Metabox сохраняет информацию об обновлении или публикации, но не о сохранении черновика Использование WP_Query – как отображать что-либо, если нет результатов Устаревшая проблема в WordPress Детские страницы с одинаковым слизнем Почему переменная GET на одной странице сайта вызывает ошибку 404, когда переменная GET работает на другой странице сайта? Как исправить неизменные URL-адреса в базе данных после запуска сериализованного поиска и замены скрипта? Количество сообщений с определенным term_meta Таксономия Пользовательская колонка – фильтр «manage_ {TAXONOMY} _custom_column» пропускает только 2 аргумента

Простой способ обработки результатов поиска перед отображением

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

Мой план состоял в том, чтобы включить различные скрытые поля на разные родительские страницы, содержащие идентификатор этой конкретной страницы. В search.php я тогда хотел обработать результаты и отфильтровать страницы и сообщения, которые не имеют отношения к родительской странице.

Есть ли простой способ добиться этого?

Заранее спасибо.

ИЗМЕНИТЬ 1


Это мой search.php

 <?php if (have_posts()){ while(have_posts()){ the_post(); ?> <div> <h4><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h4> <p><?php echo get_the_author(); ?> - <?php echo get_the_date(); ?></p> <p><?php echo get_the_excerpt(); ?></p> </div> <?php } } else{ ?> <h3>Sorry</h3> <p>We are sorry but we could not find any matching articles on our site. Please try again with an other search request.</p> <?php get_search_form (); } ?> в <?php if (have_posts()){ while(have_posts()){ the_post(); ?> <div> <h4><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h4> <p><?php echo get_the_author(); ?> - <?php echo get_the_date(); ?></p> <p><?php echo get_the_excerpt(); ?></p> </div> <?php } } else{ ?> <h3>Sorry</h3> <p>We are sorry but we could not find any matching articles on our site. Please try again with an other search request.</p> <?php get_search_form (); } ?> К <?php if (have_posts()){ while(have_posts()){ the_post(); ?> <div> <h4><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h4> <p><?php echo get_the_author(); ?> - <?php echo get_the_date(); ?></p> <p><?php echo get_the_excerpt(); ?></p> </div> <?php } } else{ ?> <h3>Sorry</h3> <p>We are sorry but we could not find any matching articles on our site. Please try again with an other search request.</p> <?php get_search_form (); } ?> 

И searchform.php :

 <form role="search" method="get" id="searchform" action="<?php echo esc_url( home_url( '/' ) ); ?>"> <label>Search...</label> <input type="text" name="s" id="s" value="<?php echo get_search_query(); ?>" placeholder="Search..." /> <input type="hidden" name="post_parent" value="<?php echo (int)get_the_ID(); ?>" /> <button type="submit"><i class="fa fa-search" aria-hidden="true"></i></button> </form> 

EDIT 2

Я также добавил <?php wp_reset_query(); ?> <?php wp_reset_query(); ?> перед if(have_posts()){} . Это не приводит к изменениям. Страницы все еще отображаются.

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

https://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts#Exclude_Pages_from_Search_Results

 function search_filter($query) { if ( !is_admin() && $query->is_main_query() ) { if ($query->is_search) { $query->set('post_type', 'post'); } } } add_action('pre_get_posts','search_filter'); 

Кроме того, эта статья может помочь вам в редактировании формы поиска …

Пока фильтр pre_get_posts позволит вам изменить основной запрос до его возникновения, добавив дополнительные требования, в этом случае это не обязательно! Вы можете сделать все с URL-адресом и формой поиска

Во-первых, переменные запроса, переданные в WP_Query могут использоваться в URL-адресе. post_parent – это запрос var, который вы хотите.

Поэтому, если у нас есть это:

 <form action="/" method="get"> <input type="text" name="s" /> <input type="hidden" name="post_parent" value="<?php echo (int)get_the_ID(); ?>"/> <input type="hidden" name="post_type" value="page"/> </form> 

Тогда любые результаты поиска будут ограничены теми, чья post_parent является страницей, с которой пришел поиск. Вы увидите URL-адреса, такие как /?s=test&post_parent=123 .

Этот трюк можно использовать для фильтрации по категориям и авторам, например, поиск категории:

/category/example/?s=test

Только показ сообщений определенного автора в архиве дат:

/2016/?author=123