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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

  1. Buen post, gracias por los códigos, al fin pude personalizar un poco los posts relacionados del jetpack. Tendrás un post para personalizar los correos de wordpress que se envía a los suscriptores cada vez que se publican las entradas nuevas?

  2. Buenos días.

    Tengo el related post de Jetpack instalado. Mi web está dividida en categorías diferentes (Bastantes) y el related post me muestra resultados aleatorios aunque puedan tener algo de relación, pero a post de diferentes categorías. ¿Se puede hacer algo para que solo muestre los post de la categoría en la que se encuentra?

    Muchas gracias

    1. Buenas Juan,

      En el post tienes el snippet «Cómo mostrar posts relacionados sólo de la misma categoría»

      Recuerda cambiar dinámicamente el ID de la categoría del ejemplo (721) por la categoría de cada post.

      Saludos