¿Está buscando una forma de crear múltiples plantillas de búsqueda para tipos de publicación personalizados? Si bien probablemente exista un plugin para esto, hemos creado un fragmento de código rápido que puede usar para crear múltiples plantillas de búsqueda para tipos de publicación personalizados en WordPress.
Instrucciones:
Plantilla de búsqueda
Cree un nuevo archivo llamado search.php y agregue la siguiente plantilla de búsqueda. Cambie el $search_refer= CUSTOM_POST_TYPE por los nombres de sus tipos de publicación. También deberá 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
Agregue esta query_post justo encima del bucle en las plantillas de búsqueda que cree. 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
Agregue este HTML a la plantilla donde desea mostrar el formulario de búsqueda. Deberá cambiar el nombre CUSTOM_POST_TYPE al tipo de publicación que desea buscar. Deberá crear un nuevo formulario para cada tipo de publicación personalizado o usar un menú desplegable 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 agregas fragmentos de código en WordPress, consulta nuestra guía sobre cómo agregar fragmentos de código correctamente en WordPress, para que no rompas accidentalmente tu sitio.
Si te gustó este fragmento de código, considera echar un vistazo a 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.
Hola, gracias por este tutorial.
Estoy intentando crear un formulario de búsqueda personalizado para colocar en la barra lateral de la sección de blog de mi sitio web. Quiero que el formulario de búsqueda solo busque DENTRO de las ENTRADAS (entradas de blog estándar, no un tipo de entrada personalizado) – y que ignore cualquier otro contenido, por ejemplo, páginas. ¿Es posible adaptar este método a lo que estoy intentando hacer?
Lo he intentado pero sin éxito.
Muchas gracias
Hola Sally,
Intenta este tutorial sobre cómo filtrar tipos de publicaciones de los resultados de búsqueda. Espero que te resulte útil 🙂
Ronroneo ronroneo ronroneo perfecto )
Perfecto. ¡Gracias!
Disculpa la pregunta de novato, pero ¿hay alguna forma de ir un paso más allá y buscar solo en un meta_field personalizado dentro del tipo de publicación personalizado? He estado buscando durante días y este es el script más cercano que pude encontrar. Actualmente busca en los títulos y el contenido de la publicación, pero tengo una tonelada de campos personalizados para el CPT y solo quiero que el usuario busque un campo específico. ¿Alguna idea?
¿Es posible adaptar estas instrucciones para buscar una taxonomía personalizada en lugar de una publicación personalizada? Estoy intentando devolver una búsqueda separada para cada taxonomía personalizada y no lo estoy entendiendo del todo. ¡Gracias!
Tenía algunos errores de sintaxis, elseif sin punto y coma al final, después de eso todo funcionó bien 🙂
si el valor de búsqueda está vacío, por ejemplo: ?s=&post_type=products, ¿siempre me devuelve resultados en la plantilla predeterminada, sin importar qué post_type tenga en la cadena de búsqueda? ¿alguna solución para eso?
Por ejemplo: ?s=+&post_type=products ESTO FUNCIONARÁ, abrir en search-products.php
esto: ?s=&post_type=products NO FUNCIONARÁ, abrir en search-post.php
Creo que tu mejor opción sería usar javascript para requerir algo en el campo antes de que puedan buscar.
Creo que tu mejor opción sería usar javascript para requerir algo en el campo antes de que puedan buscar.
Creo que tu mejor opción sería usar javascript para requerir algo en el campo antes de que puedan buscar.
si el valor de búsqueda está vacío, por ejemplo: ?s=&post_type=products, ¿siempre me devuelve resultados en la plantilla predeterminada, sin importar qué post_type tenga en la cadena de búsqueda? ¿alguna solución para eso?
Por ejemplo: ?s=+&post_type=products ESTO FUNCIONARÁ, abrir en search-products.php
esto: ?s=&post_type=products NO FUNCIONARÁ, abrir en search-post.php
si el valor de búsqueda está vacío, por ejemplo: ?s=&post_type=products, ¿siempre me devuelve resultados en la plantilla predeterminada, sin importar qué post_type tenga en la cadena de búsqueda? ¿alguna solución para eso?
Por ejemplo: ?s=+&post_type=products ESTO FUNCIONARÁ, abrir en search-products.php
esto: ?s=&post_type=products NO FUNCIONARÁ, abrir en search-post.php
Artículo que me salvó la vida, gracias, estaba luchando por encontrar una buena solución, esto ayudó mucho
¡De nada, me alegra que hayamos podido ayudar!
Brillante. Gracias. ¡Eres genial!
¡De nada, me alegra que te guste el fragmento!
Brillante. Gracias. ¡Eres genial!
Estaba usando un tema hijo. Tuve que usar { load_template(get_stylesheet_directory() . ‘/template_one-name.php’); }
¡Gracias por el consejo! Funciona perfecto…
Me encanta la idea detrás de esto, ¡qué ingenioso!
Sin embargo, tengo un problema con la paginación. Así que lo hace un poco inútil a menos que muestre todos los resultados con un 'showposts'=>999,
OH DIOS MÍO… estuve trabajando en esto durante una hora más o menos antes de rendirme y comentar… y luego lo descubrí…
Cambié el argumento de query_posts a esto
‘bio’,
‘posts_per_page’ => 10,
‘paged’ => $paged,
);
query_posts($args);
?>
Eso me devuelve una página en blanco… ¿Alguna ayuda?
Bien hecho, señor. Gran consejo.
¡Muchas gracias! Me alegraste la mañana.
¿Esto es solo para tipos de publicaciones personalizadas?
El código funciona bien en 3.4.2, pero tuve que cambiar "post_type" a "posttype".
¡Muchas gracias! 🙂
No funciona para mí en 3.3.1. Es posible que la variable $s no esté recibiendo ningún valor. ¿Alguna sugerencia?
Probaré las cosas en una versión reciente de WordPress solo para asegurarme, aunque no deberías tener ningún problema. También sugeriría actualizar a la 3.4. Publicaré aquí los resultados.
Probé las cosas y parece que funciona bien, ¿creaste los archivos de plantilla personalizados y tienes todo configurado correctamente?
Obtengo un error del servidor al intentar implementar esto 🙁
¿cuál es el error que estás obteniendo?
de acuerdo, esto es lo que hice como respaldo:
1. creé una carpeta dentro de mis archivos de plantilla llamada “search”. –> TEMPLATEPATH .’/search/’
2. Luego se crearon plantillas de publicaciones personalizadas utilizando el código search.php predeterminado de WordPress.
ej. : search-xxxxx.php donde xxxxx es el tipo de publicación personalizado.
3. coloqué todas las plantillas de publicaciones personalizadas search-xxxxx.php en la carpeta search recién creada.
4. renombré el search.php predeterminado de WordPress a –> default-search.php
5. creé un nuevo search.php y puse el siguiente código:
6. Básicamente estamos llamando a una función llamada custom_search_template().
7. Definamos esa función en el archivo functions.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, el formulario de búsqueda:
Seleccionar Tipo de Publicación
Negocios Noticias ETIQUETA
9. Básicamente, cuando usas este formulario para enviar una consulta de búsqueda,
Wordpress obtiene name=”post_type” –> es decir: $_GET[“post_type”];
La función luego verifica si $_GET["post_type"] ha sido establecido,
si es así, carga un archivo de plantilla basado en $search_refer = $_GET["post_type"]
desde la carpeta /search/ que creamos. Es decir. search-xxxxx.php —> search-$search_refer.php
si no existe una plantilla llamada “search-$search_refer.php”, la función usa default-search.php para mostrar los resultados de búsqueda.
10. Por favor, comenten si me equivoco.
function custom_search_template() {
$search_refer = $_GET["post_type"];
load_template(TEMPLATEPATH . ‘/search/search-‘ .$search_refer. ‘.php’);
}
Tengo un problema con la paginación, cuando el resultado de búsqueda del tipo de publicación personalizado es mayor a 5.
¿Algún consejo?
Intenté esto en el array arg
‘bio’,
‘posts_per_page’ => 10,
‘paged’ => $paged,
);
query_posts($args);
?>