Eu tenho um campo de pesquisa para as postagens do blog, mas preciso de outra para um tipo de postagem personalizada. Como posso criar este formulário de pesquisa personalizado com um layout de resultado de pesquisa diferente ?
44
Eu tenho um campo de pesquisa para as postagens do blog, mas preciso de outra para um tipo de postagem personalizada. Como posso criar este formulário de pesquisa personalizado com um layout de resultado de pesquisa diferente ?
Aqui está o que eu tentei e obtive uma solução com 3 etapas. Digamos que seu tipo de postagem personalizado seja " produtos "
1 Adicione o código da função aqui, você pode especificar o archive-search.php
function template_chooser($template)
{
global $wp_query;
$post_type = get_query_var('post_type');
if( $wp_query->is_search && $post_type == 'products' )
{
return locate_template('archive-search.php'); // redirect to archive-search.php
}
return $template;
}
add_filter('template_include', 'template_chooser');
2) Crie um modelo de resultado de pesquisa para o tipo de postagem personalizada (archive-search.php)
<?php
/* Template Name: Custom Search */
get_header(); ?>
<div class="contentarea">
<div id="content" class="content_right">
<h3>Search Result for : <?php echo "$s"; ?> </h3>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<div id="post-<?php the_ID(); ?>" class="posts">
<article>
<h4><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></h4>
<p><?php the_exerpt(); ?></p>
<p align="right"><a href="<?php the_permalink(); ?>">Read More</a></p>
<span class="post-meta"> Post By <?php the_author(); ?>
| Date : <?php echo date('j F Y'); ?></span>
</article><!-- #post -->
</div>
<?php endwhile; ?>
<?php endif; ?>
</div><!-- content -->
</div><!-- contentarea -->
<?php get_sidebar(); ?>
<?php get_footer(); ?>
Criar formulário de pesquisa
Neste formulário de pesquisa, o valor "produtos" está oculto e pesquisará apenas postagens de produtos .
<div>
<h3>Search Products</h3>
<form role="search" action="<?php echo site_url('/'); ?>" method="get" id="searchform">
<input type="text" name="s" placeholder="Search Products"/>
<input type="hidden" name="post_type" value="products" /> <!-- // hidden 'products' value -->
<input type="submit" alt="Search" value="Search" />
</form>
</div>
para obter mais informações, eu gostaria de vincular você aqui
http://www.wpbeginner.com/wp-tutorials/how-to-create-advanced-search-form-in-wordpress-for-custom-post-types/
get_query_var('post_type')
retornou uma matriz (em vez de uma string) para que não pudesse ser comparada diretamente. Como só estou pesquisando um tipo de postagem de cada vez, simplesmente mudei meu$post_type
var para$post_type[0]
.http://localhost:3000/?s=cloud%27&post_type=product
dehttp://localhost:3000/search/cloud/product
search_template
filtro parece ser uma alternativa mais adequada paratemplate_include
Aqui está o que funciona para mim. Não é tão limpo, mas não consegui obter nenhuma dessas respostas para o trabalho.
Formulário de pesquisa para o tipo de postagem personalizada:
Em functions.php:
Em search.php:
Naturalmente, nos três lugares, você precisará substituir "livro" pelo seu tipo de postagem personalizado.
Espero que isso ajude alguém!
fonte
Um código curto mais atualizado
fonte
Eu estava procurando usar dois formulários diferentes para minhas pesquisas normais e minhas pesquisas em um tipo de postagem personalizado.
Meu tipo de postagem personalizado usa um cabeçalho diferente das páginas normais. Na minha página normal, a chamada para o meu formulário de pesquisa é:
E a chamada para o meu formulário de pesquisa no cabeçalho do tipo de postagem personalizada é:
Que possui um campo adicional:
No arquivo de funções, tenho o seguinte código que você forneceu.
Que detecta se o formulário de pesquisa está fazendo uma pesquisa nos campos personalizados, mostrando a pesquisa em um modelo personalizado; caso contrário, use o modelo normal.
Edit: corrigida a chamada de função get_search_form () que retornaria true, não importa o quê.
fonte
get_search_form('true')
deveria serget_search_form(true)
.get_search_form
está procurando uma entrada booleana, entãotrue
oufalse
. Ao colocá-lo entre aspas, você está alimentando uma string, não um parâmetro booleano. A maneira como essa função é configurada, ambas'true'
e'false'
retornaria o mesmo resultado, porque ambas são seqüências de caracteres não vazias (o que faz com que a função retorne verdadeira nos dois casos).Para corrigir o problema de pesquisa de entrada vazia, você pode substituir o código da função por este:
fonte