Pesquisar páginas que são filho da página atual

Estou desenvolvendo o meu próprio tema do WordPress e eu queria saber se é possível modificar a consulta de pesquisa de forma a que eles apenas retornem resultados que são páginas secundárias da página atual.

A razão pela qual eu quero isso é que nosso site está ficando realmente grande e o usuário deve poder navegar até uma página pai e, em seguida, procurar páginas neste tópico.

Dou-lhe um exemplo. Nosso site é sobre os estudos de química e tem uma tree de páginas da seguinte forma:

  • Casa
  • Tipps & Ticks
  • Cursos práticos
    • Química orgânica
      • Síntese
    • Química Inorgânica
      • Prova de aniões
        • Sulfureto
    • Química Física

Então, se o visitante navegou para a página “cursos práticos”, o formulário de pesquisa só deve procurar a input em suas páginas filho. O mesmo para as subpáginas dessa página. Isso simplificaria enormemente o processo de encontrar o artigo correto, pois o usuário pode adicionar “filtros” navegando para uma página específica.

Estou feliz por todas as respostas e idéias. Atenciosamente, Chwebo

Solutions Collecting From Web of "Pesquisar páginas que são filho da página atual"

Eu comecei isso em um comentário, mas pensei que eu iria expandi-lo para você porque eu gosto da pergunta;)

Eu provavelmente abordaria isso adicionando um campo oculto ao formulário de pesquisa com a ID da página atual e, em seguida, usando o filtro pre_get_posts para modificar a consulta de pesquisa para apenas retornar páginas com um pai correspondente.

No entanto : não acho que possamos lidar com um nível adicional de subpáginas desta forma, apenas o primeiro nível. Eu sei que esta resposta, portanto, não responde completamente a sua pergunta, mas é um começo, e vou acrescentar se eu puder descobrir isso (entretanto, espero que alguém possa usar isso como base para sua própria resposta) .

1. Adicionando o campo oculto

No seu tema, você precisará criar um searchform.php se ainda não estiver lá, para modificar o formulário padrão que é emitido. Se você estiver criando isso a partir do zero, você pode pegar o formulário existente nesta página .

Em seguida, adicionaremos um campo oculto, entre as tags

, a impressão da ID da página atual ou da sua página principal se não estivermos no nível superior:

 < ?php if(is_page()){ ?>  < ?php } ?> 

2. Entrando em pre_get_posts

Nas functions.php do seu tema.php , precisaremos conectar-se à ação ‘ pre_get_posts do WordPress’ para modificar a consulta para excluir páginas que não estão na hierarquia desejada. Claro, queremos ter certeza de que só fazemos isso ao fazer uma pesquisa:

 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"]); } } 

Existem alguns outros condicionais nesse código, para garantir que não afetem o painel de administração ou outras consultas na página (como consultas de menu) e, claro, para garantir que o nosso valor personalizado esteja configurado antes de tentarmos use-o.

Não testei isso, mas tenho certeza de que deveria funcionar!