Intereting Posts
Исключить категорию, если сообщение находится только в этой категории, используя wp_Query Создание динамического имени класса в моем настраиваемом виджете Как использовать файл index.php для страницы «Блог», и это не домашняя страница Как включить все файлы в папку и ее подпапки в functions.php? Получение заметки с изображением для показа только если заполнено Ограничение количества пользовательских сообщений, отображаемых на странице таксономии Проблема с заголовком и навигационным меню на сайте Thesis Проблема с разбивкой по страницам с помощью tag.php Мой javascript jquery не будет работать? запрос wp foreach удаление записи, возвращающей только первый или последний элемент Скрипты в конце страницы Предварительный просмотр настроек не обновляет значение get_option () правильно Как редактировать файлы плагинов в DataBase через phpMyAdmin? Выпадающее меню с выбором категории выполнить функцию в плагине wordpress с помощью crontab

Поиск страниц, которые являются дочерними элементами текущей страницы

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

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

Я приведу вам пример. Наш сайт посвящен исследованиям химии и имеет дерево страниц следующей формы:

  • Главная
  • Tipps & Ticks
  • Практические курсы
    • Органическая химия
      • Синтез
    • Неорганическая химия
      • Доказательство анионов
        • сульфид
    • Физическая химия

Поэтому, если посетитель перешел на страницу «практические курсы», форма поиска должна искать только входные данные на дочерних страницах. То же самое для подстраниц этой страницы. Это упростит процесс поиска нужной статьи, поскольку пользователь может добавить «фильтры», перейдя на определенную страницу.

Я рад за все ответы и идеи. С уважением, Chwebo

Solutions Collecting From Web of "Поиск страниц, которые являются дочерними элементами текущей страницы"

Я начал это в комментарии, но думал, что я его расширю, потому что мне нравится вопрос;)

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

Однако : я не думаю, что мы можем справиться с дополнительным уровнем подстраниц таким образом, только на первом уровне. Я знаю, что этот ответ поэтому не полностью отвечает на ваш вопрос, но это начало, и я добавлю к нему, если я смогу это понять (в то же время, надеюсь, кто-то другой может использовать это как основу для своего собственного ответа) ,

1. Добавление скрытого поля

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

Затем мы добавим скрытое поле между тегами <form></form> , распечатав либо идентификатор текущей страницы, либо ее родительскую страницу, если мы не находимся на верхнем уровне:

 <?php if(is_page()){ ?> <input type="hidden" name="current_page_id" value="<?php echo $post->post_parent == 0 ? $post->ID : $post->post_parent; ?>" /> <?php } ?> 

2. Включение в pre_get_posts

В functions.php вашей темы нам нужно подключиться к действию pre_get_posts WordPress, чтобы изменить запрос, чтобы исключить страницы, которые не находятся в нашей желаемой иерархии. Конечно, мы хотим убедиться, что мы делаем это только при выполнении поиска:

 add_action("pre_get_posts", "wpse_226092_search_by_page_parent"); function wpse_226092_search_by_page_parent($query){ if(!is_admin() && $query->is_main_query() && is_search() && isset($_GET["current_page_id"])){ $query->set("post_parent", $_GET["current_page_id"]); } } 

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

Я не тестировал это, но уверен, что он должен работать!