¿Se puede mostrar las subcategorías en los post relacionados en nuestro WordPress? es la respuesta que quiero responder y mostrar cómo lo hice.
Como sabemos, normalmente los temas de WordPress vienen configurados para mostrar además del post o entrada principal, los post relacionados a nivel de la categoría con el objeto de propiciar a los lectores para que sigan explorando el contenido del sitio web.
Con esta configuración noté que al mostrar el post principal, no había una coincidencia adecuada entre este y los post relacionados, puesto que estos están asociados a la categoría principal y no a la subcategoría específica.
Por ejemplo, si muestro un post de vídeo música del género salsa, los post relacionados me mostraban música de diferentes géneros, pero no aquellos asociados la salsa.
Por tal razón me puse a investigar cómo hacer para que se muestren según sea el caso, los post relacionados en función a la subcategoría si esta existiera.
Normalmente el código que muestra los post relacionados tiene dos partes. Por un lado la consulta MYSQL y por otro el script para mostrar los datos generados.
En mi caso, el código de la consulta MYSQL original que muestra los post relacionados es el siguiente:
<?php $orig_post = $post; global $post; $categories = get_the_category($post->ID); if ($categories) { $category_ids = array(); foreach($categories as $individual_category) $category_ids[] = $individual_category->term_id; $args=array( 'category__in' => $category_ids, 'post__not_in' => array($post->ID), 'posts_per_page' => get_theme_mod('happenstance_related_posts_number', '6'), 'ignore_sticky_posts' => true ); $my_query = new wp_query( $args ); if( $my_query->have_posts() ) { ?>
Entonces, lo que correspondía hacer era la otra parte del código de la consulta MYSQL que permitiera realizar la consulta a la subcategoría y agregarlo a la consulta original a través de la condicional if else para que en el caso existiera post asociados a una subcategoría los mostrara o, de lo contrario mostrara los post asociados a la categoría general. El código entonces queda así:
<?php $orig_post = $post; global $post; $categories = get_the_category($post->ID); foreach( $categories as $category ){ if( 0 != $category->parent ) $child_cat = $category; } if( isset( $child_cat ) ){ $args = array( 'category__in' => $child_cat->term_id, 'post__not_in' => array($post->ID), 'posts_per_page' => get_theme_mod('happenstance_related_posts_number', '6'), 'ignore_sticky_posts' => true ); $my_query = new WP_Query( $args ); if( $my_query->have_posts()); //if( 0 == $my_query->current_post ); } else {
Aquí va el código original, mostrado más arriba. En el caso del script para mostrar los datos generados este no sufre cambios, puesto se respeta cada uno de los parámetros existentes para la muestra de los datos de la consulta MYSQL.
Con esta implementación, ya tendrá su WordPress mostrando los post relacionados en función a la subcategoría o la categoría del post principal.