¿Estás buscando una manera de crear múltiples plantillas de búsqueda para tipos de entradas personalizadas? Si bien es probable que haya un plugin para esto, hemos creado un fragmento de código rápido que puede utilizar para crear múltiples plantillas de búsqueda para tipos de entradas personalizadas en WordPress.
Instrucciones:
Plantilla de búsqueda
Crea un nuevo archivo llamado search.php y añade la siguiente plantilla de búsqueda. Cambie $search_refer=
CUSTOM_POST_TYPE
por los nombres de sus tipos de entrada. También tendrá que cambiar la ruta de la plantilla a la plantilla correspondiente que desea mostrar los 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'); }; ?>
Mostrar resultados de búsqueda
Añade este query_post
justo encima del bucle en las plantillas de búsqueda que crees. No olvide cambiar el CUSTOM_POST_TYPE
para cada una de sus plantillas.
<?php $args = array( 'post_type'=> 'CUSTOM_POST_TYPE', 's' => $s, 'paged' => $paged, ); query_posts($args); ?>
Formulario de búsqueda
Añada este HTML a la plantilla en la que desea mostrar el formulario de búsqueda. Deberá cambiar el nombre CUSTOM_POST_TYPE
por el tipo de entrada que desea buscar. Tendrá que crear un nuevo formulario para cada tipo de entrada personalizada o utilizar un menú de selección para establecer el 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>
Nota: Si es la primera vez que añade fragmentos de código en WordPress, consulte nuestra guía sobre cómo añadir correctamente fragmentos de código en WordPress, para no romper accidentalmente su sitio.
Si te ha gustado este fragmento de código, por favor, considere revisar nuestros otros artículos en el sitio como: 43 mejores temas de fotografía para WordPress y cómo crear un formulario de contacto en WordPress.
Hi, Thanks for this tutorial.
I’m trying to create a custom search form to place in the sidebar of my website’s blog section. I want the search form to only look within ONLY posts (standard blog posts, not a custom post type) – and to ignore any other content, eg.pages. Is it possible to adapt this method to suit what I’m trying to do?
I’ve had a go but with no luck.
Many thanks
Hey Sally,
Try this tutorial on how to filter post types from search results. Hope you’ll find it helpful 🙂
Purr purr purrrrfect )
Perfect. Thanks!
Sorry for the noob question, but is there a way to take a level further and to only search a custom meta_field within the custom post type? I’ve been searching for days and this is the closest script I could find. Right now it searches the titles and content of the post, but I’ve got a ton of custom fields for the CPT and only want to the user to search specific field. Thoughts?
is it possible to adapt these instructions to search a custom taxonomy instead of a custom post? Trying to return a separate search for each custom taxonomy and I’m not quite figuring it out. Thanks!
i had some syntax errors, elseif without semicolon at the end, after that all worked fine 🙂
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
I would think your best bet would be to use javascript to require something in the field before they are able to search.
I would think your best bet would be to use javascript to require something in the field before they are able to search.
I would think your best bet would be to use javascript to require something in the field before they are able to search.
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
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
Life saving article,thank you, i was struggling finding a good solution, this helped a lot
No problem glad that we could help!
Brilliant. Thank you. you ROCK!
No problem glad you like the snippet!
Brilliant. Thank you. you ROCK!
I was using a child-theme. I had to use { load_template(get_stylesheet_directory() . ‘/template_one-name.php’); }
Thanks for the tip! Works perfect…
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,
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);
?>
That returns to me a blank page.. Any help?
Well done Sir. Great tip.
Thanks very much! you’ve just made my morning.
Is this only for custom post types?
The code works fine in 3.4.2, but I had to change “post_type” to “posttype”.
Thanks a lot! 🙂
Not working for me in 3.3.1. The $s variable is possibly not getting any value. Any suggestions?
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.
Tested things out and appears to be working fine, did you create the custom template files and have everything setup correctly ?
I get a server error trying to implement this 🙁
what is the error you are getting ?
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.
function custom_search_template() {
$search_refer = $_GET[“post_type”];
load_template(TEMPLATEPATH . ‘/search/search-‘ .$search_refer. ‘.php’);
}
I have a problem with pagination, when custom post type search result is more than 5.
Any advices?
I tried this on the arg array
‘bio’,
‘posts_per_page’ => 10,
‘paged’ => $paged,
);
query_posts($args);
?>