Intereting Posts
Убедитесь, что тег используется для сообщений Если WP-версия взломана, может ли она распространяться на другие домены на сервере? статическая целевая страница, ведущая к конкретным страницам автора с «живым» контентом Может ли wp-cli отображать всех пользователей и их роли на всех сайтах в многопользовательском экземпляре? Как создать пользовательский html для подменю Поддерживает ли wordpress wp_enqueue_style noscript? Как определить, что WP использует переменные перезаписи или переменные $ _GET? Пользовательские поля Как получить доступ к глобальной переменной $ wp_meta_boxes на интерфейсе? Как отображать фильтры запросов WP? Как get_queried_объект на нескольких объектах? Настройка двух отдельных блогов при использовании WordPress в качестве CMS Как использовать WP_Query для получения диапазона сообщений с настраиваемыми полями, в которых есть числа с буквами? Как включить HTML в выдержки? контактная форма в шаблоне с jquery, validate и ajax

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

Я разрабатываю собственную тему 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"]); } } 

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

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