Advertisement
  1. Code
  2. WordPress

Crear una Lista de Entradas con las Mismas Categorías que la Actual

Scroll to top
Read Time: 6 min

() translation by (you can also view the original English article)

Si está creando un blog extenso, necesitarás encontrar la manera de ayudar a que tus lectores encuentren el contenido que quieren leer, basándote en lo que están leyendo actualmente o lo que acaban de leer.

Una forma de conseguirlo es mediante el uso de uno de los múltiples plugins existentes para identificar entradas relacionadas. Éstos utilizan diferentes métodos para identificar otros artículos con contenido similar a la actual, pero a veces no te ofrecen exactamente los resultados que deseas.

Una manera lógica para identificar las entradas similares a la que tenemos actualmente en pantalla es a través de las categorías, las etiquetas o los términos de la taxonomía. Si fueses capaz de identificar las entradas pertenecientes a las mismas categorías que la actual, entonces podrías mostrar un listado con las entradas más recientes pertenecientes a las mismas categorías, para auxiliar a los lectores en la búsqueda de contenido relacionado.

En este tutorial te mostraré cómo crear un plugin para conseguir precisamente esto. El plugin te dará una función que posteriormente podrás agregar al archivo de la plantilla single.php para mostrar el listado dentro del contenido de la entrada actual.

Lo Que Vas a Necesitar

Para seguir este tutorial necesitarás:

  • una instalación de desarrollo para WordPress
  • un tema con un archivo de plantilla single.php
  • un editor de código

Configurar el Plugin

Comencemos configurando el plugin. Crea un nuevo archivo para tu plugin, yo estoy llamando al mío tutsplus-related-posts.php.

En el nuevo archivo, agrega lo siguiente:

1
<?php
2
/**

3
 * Plugin Name: Tuts+ Related Posts

4
 * Plugin URI: https://code.tutsplus.com/tutorials/creating-a-list-of-posts-with-the-same-categories-as-the-current-one--cms-22626

5
 * Description: This plugin identifies what categories the current post is in and outputs a list of the most recent posts in the same categories.

6
 * Version: 1.0.0

7
 * Author: Rachel McCollin

8
 * Author URI: http://rachelmccollin.com

9
 * License: GPL-3.0+

10
 * License URI: http://www.gnu.org/licenses/gpl-3.0.html

11
 * Domain Path: /lang

12
 * Text Domain: tutsplus

13
 */

Querrás cambiar los detalles relativos al autor con tus propios detalles, pero esto proporciona a WordPress lo necesario para reconocer el plugin y te permite activarlo desde el escritorio.

Identificar las Categorías de la Entrada Actual

Para identificar otras entradas con las mismas categorías, es necesario obtener la lista de categorías en las que está contenida la entrada actual y añadirlas a un array.

Empieza creando una función para contener tu código, junto con algunas inicializaciones:

1
function tutsplus_related_posts() {
2
3
    $post_id = get_the_ID();
4
    $cat_ids = array();
5
6
}

Ahora dentro de tu función, utiliza la función get_the_category() para obtener un array con los datos relativos a las categorías en las que está incluída la entrada actual:

1
$categories = get_the_category( $post_id );

La función tiene un sólo parámetro, el id del post, que especifica que quieres las categorías de la entrada actual.

A continuación, tendrás que crear un array que contendrá los IDs de todas las categorías:

1
if ( $categories && ! is_wp_error( $categories ) ) {
2
        
3
    foreach ( $categories as $category ) {
4
5
        array_push( $cat_ids, $category->term_id );
6
7
    }
8
    
9
}

Echemos un vistazo a lo que hace este código:

  • Primero comprueba que $categories no devuelva un valor null o un error.
  • Después para cada categoría, agrega el correspondiente ID al array.

Tu función tendrá ahora el siguiente aspecto:

1
function tutsplus_related_posts() {
2
3
    $post_id = get_the_ID();
4
    $cat_ids = array();
5
    $categories = get_the_category( $post_id );
6
7
    if ( $categories && !is_wp_error( $categories ) ) {
8
9
        foreach ( $categories as $category ) {
10
11
            array_push( $cat_ids, $category->term_id );
12
13
        }
14
15
    }
16
17
}

Escribir un Consulta Query para Extraer las Entradas de la Misma Categoría

Ahora que tienes un array que contiene los IDs de las categorías, puedes usarlo como argumento para realizar una consulta que identifique las entradas incluidas en esas categorías.

Todavía dentro de tu función, establece los argumentos para la consulta:

1
$current_post_type = get_post_type( $post_id );
2
    
3
$args = array(
4
    'category__in' => $cat_ids,
5
    'post_type' => $current_post_type,
6
    'posts_per_page' => '5',
7
    'post__not_in' => array( $post_id )
8
);

Estos argumentos encontrarán entradas con los mismos post types al actual, pertenecientes a las mismas categorías, y a su vez excluirán la entrada actual. Yo lo he establecido para que muestre cinco entradas, pero puedes cambiar este valor siempre que quieras, o cualquier otros argumento como el tipo de post en el caso de que hayas aplicado las categorías a más tipos de post distintos.

Ahora ejecuta la consulta:

1
$query = new WP_Query( $args );
2
3
if ( $query->have_posts() ) {
4
5
    ?>
6
    <aside class="related-posts">
7
        <h3>
8
            <?php _e( 'Related Posts', 'tutsplus' ); ?>
9
        </h3>
10
        <ul class="related-posts">
11
            <?php
12
13
                while ( $query->have_posts() ) {
14
15
                    $query->the_post();
16
17
                    ?>
18
                    <li>
19
                        <a href="<?php the_permalink(); ?>">
20
                            <?php the_title(); ?>
21
                        </a>
22
                    </li>
23
                    <?php
24
25
                }
26
27
            ?>
28
        </ul>
29
    </aside>
30
    <?php
31
32
}
33
34
wp_reset_postdata();

Esto nos muestra los títulos de la entrada en forma de enlaces, dentro de una lista.

Añadir la Función a Tu Tema

El último paso cosiste en añadir la función a un archivo de plantilla en tu tema. He creado un tema de hijo, o 'child theme', para el tema Twenty Fourteen al que he añadido mi nuevo archivo single.php, y  voy a agregar en él la función, bajo el contenido. La puedes añadir en cualquier lugar, siempre y cuando esté dentro del loop del post de WordPress.

En el archivo de plantilla, agrega lo siguiente:

1
tutsplus_related_posts();

Puedes ver el resultado a continuación:

End of a post with a list of five related posts shown at the bottomEnd of a post with a list of five related posts shown at the bottomEnd of a post with a list of five related posts shown at the bottom

Nota: El sitio de ejemplo es un poco confuso ya que las etiquetas y las categorías aparecen enumeradas al final de cada post. Nuestra lista no utiliza etiquetas, solo categorías, de las cuales cada entrada en esta web tiene una.

Alternativas: Etiquetas y Términos de Taxonomía

Puede modificar fácilmente esta función para trabajar con etiquetas o términos de taxonomía en lugar de hacerlo con categorías.

Para identificar etiquetas en lugar de categorías, tendrías que reemplazar la función get_the_category() con get_the_tags() y luego reemplazar el argumento 'category__in' para la consulta con 'tag__in'.

Para identificar los términos de la taxonomía, puedes usar get_the_terms() en lugar de get_the_category(), añadiendo el slug de la taxonomía como segundo parámetro. Luego tendrías que reemplazar el argumento 'category__in' con un argumento que use 'tax_query'.

Podrías incluso buscar entradas con los mismos términos en más de una taxonomía (incluyendo términos y categorías), creando dos arrays y utilizando dos argumentos en la consulta.

Resumen

En este tutorial has aprendido a identificar las categorías a las que pertenece la entrada actual, a añadir su ID en un array y a usar después ese mismo array para ejecutar una consulta que muestre las entradas contenidas en la misma categoría. Esto te da más control que el obtendrías en la mayoría de los plugins para entradas relacionadas, y esto significa que puedes definir los argumentos de la consulta de modo que las entradas se muestren exactamente como desees.

Puedes también adaptar esta técnica para trabajar con etiquetas, términos de taxonomía o una combinación de dos o más.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.