Maneira fácil de processar os resultados da pesquisa antes de exibir

4

Eu tenho vários formulários de pesquisa no meu site e quero que eles mostrem resultados diferentes. Meu site tem uma hierarquia muito rígida e o formulário de pesquisa em um site pai deve mostrar apenas resultados de suas páginas filhas.

Meu plano era incluir diferentes campos ocultos nas diferentes páginas-mães que contêm o id dessa página em particular. No search.php , eu queria processar os resultados e filtrar as páginas e postagens que não têm relação com a página pai.

Existe uma maneira fácil de conseguir isso?

Obrigado antecipadamente.

EDIT 1

Este é meu 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 ();
}
?>

E o 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

Também adicionei <?php wp_reset_query(); ?> antes do if(have_posts()){} . Isso resulta em nenhuma mudança. As páginas ainda são mostradas.

    
por Sam 04.07.2016 / 14:56

2 respostas

2

Você pode usar o filtro pre_get_posts para filtrar o que precisa. Há um exemplo de como fazer isso no Codex:

enlace

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');

Além disso, este artigo pode levá-lo a editar o formulário de pesquisa ...

    
por user1049961 04.07.2016 / 17:18
0

Enquanto o filtro pre_get_posts permitir que você modifique a consulta principal antes que ela aconteça, permitindo que você adicione requisitos extras, nesse caso não é necessário! Você pode fazer tudo com o URL e o formulário de pesquisa

Primeiro, as variáveis de consulta passadas para WP_Query podem ser usadas na URL. post_parent sendo a consulta que você está querendo.

Então, se tivermos isso:

<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>

Todos os resultados da pesquisa serão limitados àqueles cujo post_parent é a página de origem da pesquisa. Você verá URLs como /?s=test&post_parent=123 .

Esse truque pode ser usado para filtrar por categorias e autores, por exemplo, pesquisando uma categoria:

/category/example/?s=test

Exibindo apenas postagens de um autor específico em um arquivo de data:

/2016/?author=123

    
por Tom J Nowell 05.07.2016 / 01:12