¿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.
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);
?>
¿Cómo configuras algo donde aparezcan mensajes de “nada encontrado” si no hay registros en la base de datos?
¡Oh, genial! ¿Qué hay de los campos de formulario basados en taxonomías o campos personalizados, como para un campo de búsqueda de bienes raíces? Solo leyendo el fragmento, parece una caja de búsqueda normal de formato libre que busca el tipo de publicación del que estás viendo actualmente. ¿Qué pasa si es una caja de búsqueda en la página de inicio o en otro CPT? No parece haber una opción de respaldo a una búsqueda normal de WordPress. Por favor, corrige si me equivoco.
No no mi amigo, parece que estás un poco confundido
Revisa esta línea:
Podrías cambiarlo a un selector de publicaciones personalizadas:
Negocios
Noticias ETIQUETA
y así sucesivamente..
Ten en cuenta:
name=”post_type” —-> $_GET[“post_type”]; —> = $search_refer.significa que la búsqueda no se basa en el tipo de publicación que estás viendo actualmente. Se basa en: name=”post_type” valor.
¡Funciona genial! ¡Muchas gracias!
Esto sí funciona (¡brillantemente! gracias Kevin) el único problema es que hay una } mal colocada en la
Sección de mostrar resultados de búsqueda. Este podría ser el origen del problema de Lin D.
@toomanyairmiles:disqus me alegra saber que te gusta el fragmento y gracias por el aviso de esa } extra. Actualicé el fragmento.
Esto no funcionó en el mío
Hola Lin D. Esto sí funciona, lo tengo funcionando con varios clientes. Si quisieras enviarme un correo electrónico con el siguiente formulario, puedo ayudarte más por correo electrónico para que las cosas funcionen e incluso echar un vistazo a tus plantillas si lo deseas.
http://wpsnipp.com/contact/