X

Criar vários modelos de pesquisa para tipos de post personalizados

Snippets by IsItWP

Você está procurando uma maneira de criar vários modelos de pesquisa para tipos de post personalizados? Embora provavelmente exista um plug-in para isso, criamos um trecho de código rápido que você pode usar para criar vários modelos de pesquisa para tipos de post personalizados no WordPress.

Instruções:

Modelo de pesquisa

Crie um novo arquivo chamado search.php e adicione o seguinte modelo de pesquisa. Altere $search_refer= CUSTOM_POST_TYPE para os nomes de 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 pesquisa

Adicione esse query_post logo acima do loop nos modelos de pesquisa que você criar. Não se esqueça de alterar o CUSTOM_POST_TYPE para cada um de seus modelos.

<?php 
	$args = array(
		'post_type'=> 'CUSTOM_POST_TYPE',
                's'    => $s,
                'paged' => $paged,
                );
		query_posts($args);
?>

Formulário de pesquisa

Adicione este HTML ao modelo que você deseja exibir o formulário de pesquisa. Você precisará alterar o nome CUSTOM_POST_TYPE para o tipo de postagem que deseja pesquisar. 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 primeira vez que você adiciona trechos de código no WordPress, consulte nosso guia sobre como adicionar corretamente trechos de código no WordPress para não danificar acidentalmente seu site.

Se você gostou desse snippet de código, considere dar uma olhada em 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. i had some syntax errors, elseif without semicolon at the end, after that all worked fine 🙂

  2. if search value is empty , example: ?s=&post_type=products it always returns me results in default template, no metter which post_type I have in search string? any fix for that?

    For example: ?s=+&post_type=products THIS WILL WORK, open in search-products.php
    this: ?s=&post_type=products WILL NOT WORK, open in search-post.php

    1. I would think your best bet would be to use javascript to require something in the field before they are able to search.

    2. I would think your best bet would be to use javascript to require something in the field before they are able to search.

    3. I would think your best bet would be to use javascript to require something in the field before they are able to search.

  3. if search value is empty , example: ?s=&post_type=products it always returns me results in default template, no metter which post_type I have in search string? any fix for that?

    For example: ?s=+&post_type=products THIS WILL WORK, open in search-products.php
    this: ?s=&post_type=products WILL NOT WORK, open in search-post.php

  4. if search value is empty , example: ?s=&post_type=products it always returns me results in default template, no metter which post_type I have in search string? any fix for that?

    For example: ?s=+&post_type=products THIS WILL WORK, open in search-products.php
    this: ?s=&post_type=products WILL NOT WORK, open in search-post.php

  5. Life saving article,thank you, i was struggling finding a good solution, this helped a lot

    1. No problem glad that we could help!

  6. Brilliant. Thank you. you ROCK!

    1. No problem glad you like the snippet!

  7. Brilliant. Thank you. you ROCK!

  8. I was using a child-theme. I had to use { load_template(get_stylesheet_directory() . ‘/template_one-name.php’); }

  9. Thanks for the tip! Works perfect…

  10. I love the idea behind this so clever.
    I do have an issue with pagination though. So renders it sorta useless unless I display all results with a ‘showposts’=>999,

    1. OH SNAP… so I had been working on this for an hour or so b4 i gave up and commented… and then i figured it out…
      Changed the query_posts arg to this

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

  11. That returns to me a blank page.. Any help?

  12. Well done Sir. Great tip.

  13. Thanks very much! you’ve just made my morning.

  14. Is this only for custom post types?

  15. The code works fine in 3.4.2, but I had to change “post_type” to “posttype”.

    Thanks a lot! 🙂

  16. Not working for me in 3.3.1. The $s variable is possibly not getting any value. Any suggestions?

    1. Ill test things out in a recent version of wordpress just to make sure although you should not have any issues. I would also suggest updating to 3.4. Ill post back here with the results.

    2. Tested things out and appears to be working fine, did you create the custom template files and have everything setup correctly ?

  17. I get a server error trying to implement this 🙁

    1. what is the error you are getting ?

  18. alright, this is what i did for a fall-back:

    1. i created a folder within my template files called “search”. –> TEMPLATEPATH .’/search/’

    2. then created custom post templates using WordPress default search.php code.
    eg. : search-xxxxx.php where xxxxx is the custom post type.

    3. place all search-xxxxx.php custom post templates in the newly created search folder.

    4. rename default WordPress search.php to –> default-search.php

    5. create a new search.php and put the following code:

     

    6. wer’re basically calling a function called custom_search_template().

    7. lets define that function in the file 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. Finally the search form:

    <form id="searchform" action="/” method=”get”>
           

           

          
     

                Select Post Type

               
                    Business
                    News
                    LABEL
                    
              

    9. Basicaly when you use this form to submit a search querie,
       WordPress gets name=”post_type” –> ie:   $_GET[“post_type”];

    The function then checks if  $_GET[“post_type”] has been set,
     if so then loads a template file based on $search_refer = $_GET[“post_type”]
    from the /search/ folder we created.  ie. search-xxxxx.php  —>  search-$search_refer.php

    if no template called “search-$search_refer.php” exists then the function uses default-search.php to display search results.

    10. Please commemt if im mistaken.

     

  19.  function custom_search_template() {

    $search_refer = $_GET[“post_type”];

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

    }

  20. I have a problem with pagination, when custom post type search result is more than 5.

    Any advices?

    1. I tried this on the arg array

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

  21. Vadim Goncharov março 7, 2012 em 10:18 pm

    How do you set up something where “nothing found” messages appears if there is no records in the db? 

  22. Ooh, great! What about form fields based on taxonomies or custom fields, like for a real estate search field? Just reading the snippet, it looks like a regular free-form search box that searches the post type of the post you’re currently viewing. What if it’s a search box on the homepage or another non-CPT? It doesn’t look like there’s a fallback to a regular ‘ol WordPress search. Please correct if wrong.

    1. No no my friend, you seem a little confused
       Check this line:

      You could change it to a custom post selector:

      Business
      News LABEL

      and so on..

      Note that:
        name=”post_type” —-> $_GET[“post_type”]; —> = $search_refer.meaning the search is not based on the post type of the post you’re currently viewing.its based on : name=”post_type” value.

  23. Flávio Leonard Vargas janeiro 30, 2012 em 4:30 am

    Working Great! Thanks a bunch!

  24. This does work (brilliantly! thank you Kevin) only problem is there is a misplaced } in the
    Display search results section. This might be the source of Lin D’s problem.

    1. @toomanyairmiles:disqus  glad to hear that you like the snippet and thanks for the heads up for that extra } I updated the snippet.

  25. This didn’t work on mine

    1. Hi Lin D. this does work I have it running with a number of clients. If you wanted to email me with this form bellow I can help you further via email to get things running and even take a look at your templates if you would like.

      http://wpsnipp.com/contact/

Adicionar um comentário

Ficamos felizes por você ter optado por deixar um comentário. Lembre-se de 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.

WordPress Launch Checklist

A lista de verificação definitiva para o lançamento do WordPress

Compilamos todos os itens essenciais da lista de verificação para o lançamento de seu próximo site WordPress em um ebook prático.
Sim, envie-me o livro eletrônico gratuito grátis!