WordPress incorpora un buscador de serie preparado para buscar post. Y cuando digo “post“, me refiero a entradas del tipo post, es decir, entradas del blog.
Aquellos que halláis trasteado código de algún plugin o tema especializado, ya habréis visto que en realidad, el [codigo]post_type[/codigo] es flexible y configurable.
Por ejemplo:
- WooCommerce crea post_type personalizados, a los que llama Productos. Y sirven para crear productos de e-commerce.
De la misma forma, un tema de cocina, creará sus propios post_type a los que llamará recetas. Uno de inmobiliarias, post_type llamados inmuebles, etc
Esto quiere decir, que [subraya_rosa]el buscador que trae WordPress, no nos servirá para buscar en esos tipos especiales de contenidos[/subraya_rosa], y por ello casi todos los temas/plugins que los usan, o bien traen su propio buscador independiente (Ej: WooCommerce trae un buscador de productos), o bien editan el código del propio CMS.
Y eso es precisamente lo que vamos a aprender en esta entrada:
1º- Cómo editar el buscador de WordPress para buscar post_type personalizados.
2º- Cómo hacer que cuando busquemos un post_type personalizado, nos lo muestre en una plantilla diferente a la tradicional, pudiendo así mostrar ese contenido con el formato y forma que deseemos. A fin de cuentas, no se debe mostrar al usuario de la misma manera una entrada de blog que una receta de cocina, ¿no?
[titulo]El buscador de WordPress[/titulo]
El código HTML del buscador que trae por defecto es el siguiente:
<div> <h3>Search Products</h3> <form role="search" action="<?php echo site_url('/'); ?>" method="get" id="searchform"> <input type="text" name="s" placeholder="Search Products"/> <input type="hidden" name="post_type" value="post" /> <input type="submit" alt="Search" value="Search" /> </form> </div>
Donde, en el campo oculto, se especifica el tipo de contenido (por defecto, post):
<input type="hidden" name="post_type" value="post" />
Lo único que debemos hacer es crear, en caso de no tenerlo ya, un tipo nuevo de contenido y ponerlo en este formulario:
1º – Vamos vía FTP al [codigo]functions.php[/codigo] y añadimos el siguiente código para definir un nuevo tipo de contenido:
function create_posttype() { register_post_type( 'recetas', array( 'labels' => array( 'name' => __( 'Recetas' ), 'singular_name' => __( 'Receta' ) ), 'public' => true, 'has_archive' => true, 'rewrite' => array('slug' => 'recetas'), ) ); } add_action( 'init', 'create_posttype' );
Esto creará un nuevo post_type llamado “recetas”.
2º- Ponemos el código del buscador donde deseemos que se muestre, o editamos el archivo principal que lo contiene, cuya ubicación variará dependiendo del tema (muy usualmente en [codigo]header.php[/codigo]). Y sustituímos el name del campo hidden por el tipo de contenido que acabamos de crear:
<div> <h3>Search Products</h3> <form role="search" action="<?php echo site_url('/'); ?>" method="get" id="searchform"> <input type="text" name="s" placeholder="Search Products"/> <input type="hidden" name="post_type" value="recetas" /> <input type="submit" alt="Search" value="Search" /> </form> </div>
[titulo]Indicar a nuestro tema qué debe hacer cuando alguien utilice el buscador[/titulo]
La siguiente función, que debe añadirse también al [codigo]functions.php[/codigo], detectará cuando se esté buscando un post_type concreto, y redireccionará al usuario a una plantilla totalmente personalizada:
function template_chooser($template) { global $wp_query; $post_type = get_query_var('post_type'); if( $wp_query->is_search && $post_type == 'recetas' ) { return locate_template('archive-search.php'); // redirect to archive-search.php } return $template; } add_filter('template_include', 'template_chooser');
Exactamente dice, cuando estés realizando una búsqueda de “recetas”, no vayas a la página de resultados por defecto, redirecciónalo a una página nueva llamada “archive-search.php”
[titulo]Creando una plantilla para los resultados de búsqueda personalizados[/titulo]
Y aquí tendríamos el mínimo código posible para crear la plantilla y representar los resultados de búsqueda, con la estética del resto de la página:
<?php /* Template Name: Custom Search */ get_header(); ?> <div class="contentarea"> <div id="content" class="content_right"> <h3>Search Result for : <?php echo "$s"; ?> </h3> <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <div id="post-<?php the_ID(); ?>" class="posts"> <article> <h4><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></h4> <p><?php the_exerpt(); ?></p> <p align="right"><a href="<?php the_permalink(); ?>">Read More</a></p> <span class="post-meta"> Post By <?php the_author(); ?> | Date : <?php echo date('j F Y'); ?></span> </article><!-- #post --> </div> <?php endwhile; ?> <?php endif; ?> </div><!-- content --> </div><!-- contentarea --> <?php get_sidebar(); ?> <?php get_footer(); ?>
Escribir comentario