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:
- Mostrar o no el texto «Relacionado» para separar más claramente la sección de las entradas
- 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:
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:
- al principio de tu entrada,
- en cualquier posición de tu artículo con un shortcode
- 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
Muy buen artículo, gracias por ayudarme a colocar el maldito «relacionados» donde a mí me de la gana :)
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?
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
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