Cómo personalizar los posts relacionados de Jetpack en WordPress

El mega plugin de WordPress Jetpack tiene un módulo para mostrar posts o entradas relacionadas. En los ajustes de lectura tienes sólo 2 opciones de configuración:

  1. Mostrar o no el texto “Relacionado” para separar más claramente la sección de las entradas
  2. Usar o no un diseño grande y visualmente atractivo, con imágenes.

El resultado de aceptar ambas opciones es algo similar a esto al final de tus artículos:

posts-relacionados-jetpack-wordpress-configuracion

Pero hay muchas opciones más que puedes configurar:

  • cambiar el nº de posts,
  • situarlo al principio o con un shortcode,
  • cambiar el texto “Relacionado”,
  • excluir posts y/o categorías,
  • incluir páginas,
  • mostrar posts sólo de la misma categoría,
  • especificar un rango de fechas de posts a mostrar

Puedes crear un plugin o simplemente añadir estos snippets de código a tu archivo functions.php

Voy a comenzar con uno de cosecha propia

Cómo especificar un rango de fechas

Si quieres mostrar como posts relacionados sólo los publicados el último mes, la última semana o los últimos 2 años esta es la función que necesitas

function jetpackme_posts_relacionados_rango_fechas( $date_range ) {
    $date_range = array(
        'from' => strtotime( '-2 years' ),
        'to' => time(),
    );
    return $date_range;
}
add_filter( 'jetpack_relatedposts_filter_date_range', 'jetpackme_posts_relacionados_rango_fechas');

En el ejemplo se mostrarán los posts de los últimos 2 años (‘-2 years’), puedes especificar cualquier otro rango gracias a la función PHP strotime.

strtotime("10 September 2000")
strtotime("-1 day")
strtotime("-1 week")
strtotime("-1 week 2 days 4 hours 2 seconds")
strtotime("last Thursday")

Cómo mostrar posts relacionados sólo de la misma categoría

Digamos que tienes la categoría “WordPress” y sólo quieres que en sus posts se muestren entradas relacionadas de la misma categoría. Sólo necesitas obtener el ID de tu categoría y cambiarlo por el del ejemplo: 721

function jetpackme_filter_exclude_category( $filters ) {
if(in_category('721')) {
  $args = 'exclude=721';
    $categories = get_categories( $args );
    foreach($categories as $category) {
        $filters[] = array( 'not' => array( 'term' => array( 'category.slug' => $category->slug ) ) );
     }
}
    return $filters;
}
add_filter( 'jetpack_relatedposts_filter_filters', 'jetpackme_filter_exclude_category' );

Vía @Mercy Tapscott

El resto son traducidos del sitio oficial de Jetpack

Cambiar el nº de posts relacionados a mostrar

Como máximo se van a mostrar 3 pero puedes cambiar ese número por ejemplo a 5

function jetpackme_numero_posts_relacionados( $options ) {

$options['size'] = 5;

return $options;}

add_filter( 'jetpack_relatedposts_filter_options', 'jetpackme_numero_posts_relacionados);

Mostrar los posts relacionados en otra posición

Por defecto los posts relacionados van a aparecer al final de tu entrada, pero puedes hacer que aparezcan:

  1. al principio de tu entrada,
  2. en cualquier posición de tu artículo con un shortcode
  3. o en cualquier otra parte añadiéndolo a tu tema.

1.- Con esta función harás que aparezcan al principio

function jetpackme_posts_relacionados_principio( $options ) {

$options['show_above_content'] = true;

return $options;}

add_filter( 'jetpack_relatedposts_filter_options', 'jetpackme_posts_relacionados_principio');

2.- También puedes usar este shortcode para añadirlos manualmente [jetpack-related-posts], si lo usas no se mostrarán al final de tu artículo. Aquí un ejemplo

[jetpack-related-posts]

3.- Para que aparezcan donde tú quieras primero tienes que desactivarlos con esta función

function jetpackme_remove_rp() {

$jprp = Jetpack_RelatedPosts::init();

$callback = array( $jprp, 'filter_add_target_to_dom' );

remove_filter( 'the_content', $callback, 40 );}

add_filter( 'wp', 'jetpackme_remove_rp', 20 );

Y luego insertas en tu tema de WordPress esta llamada

<?php echo do_shortcode( '[jetpack-related-posts]'); ?>

Cambiar el título por defecto: “Relacionado”

En este ejemplo en vez de “Relacionado” aparecerá “Entradas similares”

function jetpackme_posts_relacionados_titulo( $headline ) {

$headline = sprintf(

'<h3 class="jp-relatedposts-headline"><em>%s</em></h3>',

esc_html( 'Entradas similares' ));

return $headline;}

add_filter( 'jetpack_relatedposts_filter_headline', 'jetpackme_posts_relacionados_titulo');

Mostrar siempre un post como post relacionado

Simplemente tienes que añadir el ID de ese post que quieres mostrar siempre, en este caso es el 155

function jetpackme_anexar_post_relacionado( $hits, $post_id ) {

array_unshift( $hits, array( 'id' => 155 ) );

return $hits;}

add_filter( 'jetpack_relatedposts_filter_hits', 'jetpackme_anexar_post_relacionado');

Excluir posts y/o categorías

Para excluir uno o varios posts para que no aparezcan nunca como posts relacionados utiliza esta función, en este caso los posts con ID 1037 y 1038 nunca se mostrarán

function jetpackme_excluir_posts_relacionados( $exclude_post_ids, $post_id ) {

$exclude_post_ids[] = 1037; // Excluye post_id 1037

$exclude_post_ids[] = 1038; // Excluye también post_id 1038

return $exclude_post_ids;}

add_filter( 'jetpack_relatedposts_filter_exclude_post_ids', 'jetpackme_excluir_posts_relacionados');

Para excluir una categoría, por ejemplo “concursos”

function jetpackme_filter_excluir_categoria( $filters ) {

$filters[] = array( 'not' => array( 'term' => array( 'category.slug' => 'concursos' ) ) );

return $filters;}

add_filter( 'jetpack_relatedposts_filter_filters', 'jetpackme_filter_excluir_categoria' );

No mostrar posts relacionados en ciertos posts

Usamos el tag condicional “is_single” para indicar los ID de los posts donde no queremos que aparezcan posts relacionados, en este caso, 17,18 y 125

function jetpackme_no_posts_relacionados( $options ) {

if ( is_single( array( 17, 18, 125 ) ) ) {

$options['enabled'] = false;}

return $options;}

add_filter( 'jetpack_relatedposts_filter_options', 'jetpackme_no_posts_relacionados' );

Añadir páginas a posts relacionados

Para que se muestren páginas además de posts relacionados añade esta función a tu archivo functions.php

function jetpackme_paginas_como_posts_relacionados( $post_type, $post_id ) {

if ( is_array( $post_type ) ) {

$search_types = $post_type;

} else {

$search_types = array( $post_type );}

$search_types[] = 'page'

return $search_types;}

add_filter( 'jetpack_relatedposts_filter_post_type', 'jetpackme_paginas_como_posts_relacionados');


Si necesitas cualquier otra personalización tienes a tu disposición el código fuente de este módulo de Jetpack, entradas relacionadas

Escribí esto el 28/07/2014

1 comentario

  1. Andrés dice:

    Muy buen artículo, gracias por ayudarme a colocar el maldito “relacionados” donde a mí me de la gana :)

Tu comentario