Arquivo de postagem personalizado com pesquisa, is_search () é falso?

Eu tenho um tipo de postagem personalizado e criei um modelo de arquivo, archive-custom_post_type.php, que inclui um formulário de pesquisa.

Eu estou usando pre_get_posts para adicionar parâmetros à consulta para filtrar meus resultados.

No entanto, para garantir que isso só aconteça nesta página de arquivo, eu quero verificar algumas coisas. Primeiro, verifico se o tipo de publicação corresponde.

Mas então eu queria verificar o parâmetro is_search (), apenas para ver que é falso.

Como e quando isso é definido? Posso fazer qualquer coisa para que a WP saiba que uma pesquisa está acontecendo?

pre-get_posts callback

$post_type = get_query_var( 'post_type' ); if ( $post_type === 'document' ) { $params = $_POST; if ( $params ) { $query->set( 's', $params['keyword'] ); $query->set( 'order', $params['order'] ); $query->set( 'orderby', $params['order_by'] ); } } 

archive-document.php

   

Sorry, no posts matched your criteria

document-filter.php

 
Date Name DESC ASC

Solutions Collecting From Web of "Arquivo de postagem personalizado com pesquisa, is_search () é falso?"

Nomeie sua input de palavra-chave apenas s

  

Isso é suficiente para que a WP reconheça a solicitação como pesquisa mais você não terá que fazer a $query->set( 's', ... ) mais tarde

Na ação pre_get_posts use o is_post_type_archive( 'document' ) condicional is_post_type_archive( 'document' ) para que sua instrução if seja algo como isto:

 if ( is_post_type_archive('document') && is_search() ) { ... } 

espero que ajude

Atualizar

Uma vez que você está procurando, o modelo de pesquisa (search.php, index.php) terá precedência sobre o arquivo. Você precisará filtrar o modelo que WP atribui para esses pedidos também.

 add_filter( 'search_template', function ( $template ) { if ( is_post_type_archive('document') && is_search() ) { $find_template = locate_template( ['archive-document.php'] ); if ( '' !== $find_template ) { $template = $find_template; } } return $template; });