X

Crie Múltiplos Modelos de Busca para Tipos de Post Personalizados

Snippets por IsItWP

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.

Comentários   Deixe uma resposta

  1. Sally Pilkington January 7, 2019 at 3:09 pm

    Olá, obrigado por este tutorial.
    Estou tentando criar um formulário de pesquisa personalizado para colocar na barra lateral da seção de blog do meu site. Quero que o formulário de pesquisa procure apenas em posts (posts de blog padrão, não um tipo de post personalizado) – e ignore qualquer outro conteúdo, por exemplo, páginas. É possível adaptar este método para o que estou tentando fazer?
    Eu tentei, mas sem sucesso.
    Muito obrigado

    1. Oi Sally,
      Experimente este tutorial sobre como filtrar tipos de postagem dos resultados de pesquisa. Espero que você ache útil 🙂

  2. Miau miau miau-ravilhoso )

  3. Pitico Medtler July 3, 2015 at 2:16 pm

    Perfeito. Obrigado!

  4. Desculpe pela pergunta de novato, mas existe uma maneira de ir um nível além e pesquisar apenas um meta_field personalizado dentro do tipo de post personalizado? Tenho procurado por dias e este é o script mais próximo que consegui encontrar. Atualmente, ele pesquisa os títulos e o conteúdo do post, mas tenho um monte de campos personalizados para o CPT e só quero que o usuário pesquise um campo específico. Pensamentos?

  5. é possível adaptar estas instruções para pesquisar uma taxonomia personalizada em vez de um post personalizado? Estou tentando retornar uma pesquisa separada para cada taxonomia personalizada e não estou entendendo bem. Obrigado!

  6. eu tive alguns erros de sintaxe, elseif sem ponto e vírgula no final, depois disso tudo funcionou bem 🙂

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

    1. Eu acho que sua melhor aposta seria usar javascript para exigir algo no campo antes que eles possam pesquisar.

    2. Eu acho que sua melhor aposta seria usar javascript para exigir algo no campo antes que eles possam pesquisar.

    3. Eu acho que sua melhor aposta seria usar javascript para exigir algo no campo antes que eles possam pesquisar.

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

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

  10. Artigo que salvou minha vida, obrigado, eu estava lutando para encontrar uma boa solução, isso ajudou muito

    1. Sem problemas, fico feliz que pudemos ajudar!

  11. Brilhante. Obrigado. você ARRASOU!

    1. Sem problemas, fico feliz que você gostou do snippet!

  12. Brilhante. Obrigado. você ARRASOU!

  13. Eu estava usando um tema filho. Tive que usar { load_template(get_stylesheet_directory() . ‘/template_one-name.php’); }

  14. Obrigado pela dica! Funciona perfeitamente…

  15. 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,

    1. 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);
      ?>

  16. Isso me retorna uma página em branco.. Alguma ajuda?

  17. Silver-monkey June 24, 2013 at 2:06 pm

    Bem feito, senhor. Ótima dica.

  18. Muito obrigado! você acabou de alegrar minha manhã.

  19. Isso é apenas para tipos de postagem personalizados?

  20. O código funciona bem na 3.4.2, mas tive que mudar "post_type" para "posttype".

    Muito obrigado! 🙂

  21. Não está funcionando para mim na 3.3.1. A variável $s possivelmente não está recebendo nenhum valor. Alguma sugestão?

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

    2. Testei as coisas e parece estar funcionando bem, você criou os arquivos de template personalizados e configurou tudo corretamente?

  22. Recebo um erro de servidor ao tentar implementar isso 🙁

    1. Qual é o erro que você está recebendo?

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

     

  24.  function custom_search_template() {

    $search_refer = $_GET[“post_type”];

    load_template(TEMPLATEPATH . ‘/search/search-‘ .$search_refer. ‘.php’);

    }

  25. Tenho um problema com paginação, quando o resultado da pesquisa de tipo de post personalizado é mais que 5.

    Algum conselho?

    1. Tentei isso no array de argumentos

      ‘bio’,
      ‘posts_per_page’ => 10,
      ‘paged’ => $paged,
      );
      query_posts($args);
      ?>

Adicionar um comentário

Ficamos felizes que você tenha escolhido deixar um comentário. Por favor, tenha em mente que todos os comentários são moderados de acordo com nossa política de privacidade, e todos os links são nofollow. NÃO use palavras-chave no campo do nome. Vamos ter uma conversa pessoal e significativa.

Checklist de Lançamento WordPress

O Checklist Definitivo para Lançamento de WordPress

Compilamos todos os itens essenciais da lista de verificação para o lançamento do seu próximo site WordPress em um e-book prático.
Sim, envie-me o eBook Gratuito!