Você está procurando uma maneira de criar múltiplos modelos de busca para tipos de post personalizados? Embora provavelmente exista um plugin para isso, criamos um snippet de código rápido que você pode usar para criar múltiplos modelos de busca para tipos de post personalizados no WordPress.
Instruções:
Modelo de busca
Crie um novo arquivo chamado search.php e adicione o seguinte modelo de busca. Altere o $search_refer= CUSTOM_POST_TYPE para os nomes dos seus tipos de post. Você também precisará alterar o caminho do modelo para o modelo correspondente que deseja exibir os resultados.
<?
/* Template Name: Search Results */
$search_refer = $_GET["post_type"];
if ($search_refer == 'CUSTOM_POST_TYPE') { load_template(TEMPLATEPATH . '/template_one-name.php'); }
elseif ($search_refer == 'CUSTOM_POST_TYPE') { load_template(TEMPLATEPATH . '/template_two-name.php'); };
?>
Exibir resultados da busca
Adicione esta query_post logo acima do loop nos modelos de busca que você criar. Não se esqueça de alterar o CUSTOM_POST_TYPE para cada um dos seus modelos.
<?php
$args = array(
'post_type'=> 'CUSTOM_POST_TYPE',
's' => $s,
'paged' => $paged,
);
query_posts($args);
?>
Formulário de busca
Adicione este HTML ao modelo que você deseja exibir o formulário de busca. Você precisará alterar o nome CUSTOM_POST_TYPE para o tipo de post que deseja buscar. Você precisará criar um novo formulário para cada tipo de post personalizado ou usar um menu de seleção para definir o post_type.
<form id="searchform" action="<?php bloginfo('home'); ?>/" method="get">
<input id="s" maxlength="150" name="s" size="20" type="text" value="" class="txt" />
<input name="post_type" type="hidden" value="CUSTOM_POST_TYPE" />
<input id="searchsubmit" class="btn" type="submit" value="Search" />
</form>
Observação: Se esta é a sua primeira vez adicionando snippets de código no WordPress, consulte nosso guia sobre como adicionar snippets de código corretamente no WordPress, para não quebrar acidentalmente seu site.
Se você gostou deste snippet de código, considere conferir nossos outros artigos no site, como: 43 melhores temas de fotografia para WordPress e como criar um formulário de contato no WordPress.
eu tive alguns erros de sintaxe, elseif sem ponto e vírgula no final, depois disso tudo funcionou bem 🙂
se o valor da pesquisa estiver vazio, exemplo: ?s=&post_type=products ele sempre me retorna resultados no template padrão, não importa qual post_type eu tenha na string de pesquisa? alguma correção para isso?
Por exemplo: ?s=+&post_type=products ISSO FUNCIONARÁ, abra em search-products.php
isto: ?s=&post_type=products NÃO FUNCIONARÁ, abra em search-post.php
Eu acho que sua melhor aposta seria usar javascript para exigir algo no campo antes que eles possam pesquisar.
Eu acho que sua melhor aposta seria usar javascript para exigir algo no campo antes que eles possam pesquisar.
Eu acho que sua melhor aposta seria usar javascript para exigir algo no campo antes que eles possam pesquisar.
se o valor da pesquisa estiver vazio, exemplo: ?s=&post_type=products ele sempre me retorna resultados no template padrão, não importa qual post_type eu tenha na string de pesquisa? alguma correção para isso?
Por exemplo: ?s=+&post_type=products ISSO FUNCIONARÁ, abra em search-products.php
isto: ?s=&post_type=products NÃO FUNCIONARÁ, abra em search-post.php
se o valor da pesquisa estiver vazio, exemplo: ?s=&post_type=products ele sempre me retorna resultados no template padrão, não importa qual post_type eu tenha na string de pesquisa? alguma correção para isso?
Por exemplo: ?s=+&post_type=products ISSO FUNCIONARÁ, abra em search-products.php
isto: ?s=&post_type=products NÃO FUNCIONARÁ, abra em search-post.php
Artigo que salvou minha vida, obrigado, eu estava lutando para encontrar uma boa solução, isso ajudou muito
Sem problemas, fico feliz que pudemos ajudar!
Brilhante. Obrigado. você ARRASOU!
Sem problemas, fico feliz que você gostou do snippet!
Brilhante. Obrigado. você ARRASOU!
Eu estava usando um tema filho. Tive que usar { load_template(get_stylesheet_directory() . ‘/template_one-name.php’); }
Obrigado pela dica! Funciona perfeitamente…
Eu amo a ideia por trás disso, tão inteligente.
Eu tenho um problema com paginação, no entanto. Então, isso o torna meio inútil, a menos que eu exiba todos os resultados com um 'showposts'=>999,
OH SNAP… então eu estava trabalhando nisso por cerca de uma hora antes de desistir e comentar… e então eu descobri…
Mudei o argumento query_posts para isto
‘bio’,
‘posts_per_page’ => 10,
‘paged’ => $paged,
);
query_posts($args);
?>
Isso me retorna uma página em branco.. Alguma ajuda?
Bem feito, senhor. Ótima dica.
Muito obrigado! você acabou de alegrar minha manhã.
Isso é apenas para tipos de postagem personalizados?
O código funciona bem na 3.4.2, mas tive que mudar "post_type" para "posttype".
Muito obrigado! 🙂
Não está funcionando para mim na 3.3.1. A variável $s possivelmente não está recebendo nenhum valor. Alguma sugestão?
Testarei as coisas em uma versão recente do WordPress apenas para ter certeza, embora você não deva ter problemas. Eu também sugeriria atualizar para a 3.4. Postarei de volta aqui com os resultados.
Testei as coisas e parece estar funcionando bem, você criou os arquivos de template personalizados e configurou tudo corretamente?
Recebo um erro de servidor ao tentar implementar isso 🙁
Qual é o erro que você está recebendo?
Certo, é isso que eu fiz como plano de contingência:
1. Criei uma pasta dentro dos meus arquivos de template chamada "search". --> TEMPLATEPATH .'/search/'
2. em seguida, criei modelos de postagem personalizados usando o código search.php padrão do WordPress.
Ex.: search-xxxxx.php onde xxxxx é o tipo de postagem personalizado.
3. Coloquei todos os templates de post personalizados search-xxxxx.php na pasta search recém-criada.
4. renomear o Wordpress search.php padrão para –> default-search.php
5. criar um novo search.php e colocar o seguinte código:
6. estamos basicamente chamando uma função chamada custom_search_template().
7. vamos definir essa função no arquivo fuctions.php :
function custom_search_template() {
$search_refer = $_GET[“post_type”];
if ( isset($_GET["post_type"])) { if (file_exists(TEMPLATEPATH . '/search/search-' .$search_refer. '.php')) load_template(TEMPLATEPATH . '/search/search-' .$search_refer. '.php'); else { load_template(TEMPLATEPATH . '/search-default.php'); } } else { load_template(TEMPLATEPATH . '/search-default.php'); }
8. Finalmente o formulário de busca:
Selecionar Tipo de Post
Negócios Notícias RÓTULO
9. Basicamente, quando você usa este formulário para enviar uma consulta de pesquisa, o Wordpress obtém name="post_type" -> ou seja: $_GET["post_type"];
A função então verifica se $_GET["post_type"] foi definido, se sim, carrega um arquivo de template com base em $search_refer = $_GET["post_type"] da pasta /search/ que criamos. Ou seja, search-xxxxx.php -> search-$search_refer.php
se nenhum template chamado "search-$search_refer.php" existir, a função usa default-search.php para exibir os resultados da pesquisa.
10. Por favor, comente se eu estiver enganado.
function custom_search_template() {
$search_refer = $_GET[“post_type”];
load_template(TEMPLATEPATH . ‘/search/search-‘ .$search_refer. ‘.php’);
}
Tenho um problema com paginação, quando o resultado da pesquisa de tipo de post personalizado é mais que 5.
Algum conselho?
Tentei isso no array de argumentos
‘bio’,
‘posts_per_page’ => 10,
‘paged’ => $paged,
);
query_posts($args);
?>
Como você configura algo onde mensagens de "nada encontrado" aparecem se não houver registros no banco de dados?
Ooh, ótimo! E quanto a campos de formulário baseados em taxonomias ou campos personalizados, como para um campo de busca de imóveis? Apenas lendo o trecho, parece uma caixa de busca comum de formato livre que pesquisa o tipo de post do post que você está visualizando no momento. E se for uma caixa de busca na página inicial ou em outro não-CPT? Não parece haver um fallback para uma busca normal do WordPress. Por favor, corrija se estiver errado.
Não, não meu amigo, você parece um pouco confuso. Verifique esta linha:
Você poderia mudá-lo para um seletor de post personalizado:
Negócios Notícias RÓTULO
e assim por diante..
Note que: name=”post_type” —-> $_GET[“post_type”]; —> = $search_refer.significando que a busca não é baseada no tipo de postagem da postagem que você está visualizando. É baseada em: name=”post_type” value.
Funcionando Ótimo! Muito obrigado!
Isso funciona (brilhantemente! obrigado Kevin) o único problema é que há um } fora do lugar na seção de
Exibir resultados da pesquisa. Esta pode ser a fonte do problema de Lin D.
@toomanyairmiles:disqus fico feliz em saber que você gostou do snippet e obrigado pelo aviso sobre esse } extra. Atualizei o snippet.
Isso não funcionou no meu
Olá Lin D. Isso funciona, eu o tenho rodando com vários clientes. Se você quisesse me enviar um e-mail com este formulário abaixo, posso ajudá-lo ainda mais por e-mail para colocar as coisas em funcionamento e até mesmo dar uma olhada em seus modelos, se desejar.
http://wpsnipp.com/contact/