Hook del mes: personaliza las entradas relacionadas

El módulo de Jetpack de entradas relacionadas es una forma sencilla de añadir entradas contextuales que podrían interesar a quienes visitan tu sitio cuando llegan al final de una entrada. Para usar esta función, ve a los ajustes de Jetpack de tu sitio y activa el módulo. Toda la magia sucede entre bastidores, en la nube de WordPress.com: el motor de búsqueda en lenguaje natural de Jetpack escanea todas tus entradas, analiza todo su contenido en función de diversos factores y devuelve una lista de entradas relacionadas para cada una de ellas. Ahora que Jetpack ha hecho su magia1, descubramos cómo personalizar esas entradas relacionadas o cómo personalizar su apariencia en tu sitio. Gatos relacionados

Sustituye una de las entradas relacionadas por un resultado personalizado

A veces puede resultar útil insertar una entrada específica entre las entradas relacionadas que se muestran para una o varias entradas de tu sitio web. Podrías usarlo para promocionar una de tus entradas mostrándola como la primera entrada relacionada al final de otra entrada popular. Para usar el filtro jetpack_relatedposts_filter_hits, necesitaremos dos cosas:
  • El ID de la entrada que queremos insertar en las entradas relacionadas.
  • Si quieres insertar esa entrada relacionada solo para una entrada específica, necesitarás el ID de la entrada en la que quieres cambiar la lista predeterminada de entradas relacionadas.
/**
 * Replace one of the Related Posts by a custom result
 *
 * @param array $hits Array of Post IDs returned by Jetpack.
 * @param string $post_id Post ID of the post for which we are retrieving Related Posts.
 *
 * @return array $hits Array of Post IDs used to build our list of Related Posts.
 */
function jeherve_inject_custom_related_post( $hits, $post_id ) {
    // '2194' is the post we are currently getting related posts for
    if ( 2194 == $post_id ) {
        // Add post ID '1036' to the front of our default list of related posts.
        array_unshift( $hits, array( 'id' => 1036 ) );
        // Remove the last element of the list, so we keep the same amount of related posts in total.
        array_pop( $hits );
    }
    return $hits;
}
add_filter( 'jetpack_relatedposts_filter_hits', 'jeherve_inject_custom_related_post', 20, 2 );

Añade entradas relacionadas a tu feed RSS

Jetpack muestra las entradas relacionadas al final de las entradas individuales de forma predeterminada. También puedes usar la clase sin procesar de entradas relacionadas de Jetpack para crear tu propia lista de entradas relacionadas. Esta clase puede resultar muy útil, ya que tendrás pleno control sobre el resultado y podrás mostrarlo en cualquier lugar. En el ejemplo siguiente, añadiremos esa lista al final del contenido de la entrada en los feeds RSS.
/**
 * Add Jetpack Related Posts to RSS feed.
 *
 * @param string $content Post content.
 *
 * @return string $content Post content.
 */
function jeherve_related_posts_feed( $content ) {
    // Return early if we're not in the RSS feed.
    if ( ! is_feed() ) {
        return $content;
    }

    // If Jetpack and Related Posts are active, let's get started.
    if ( class_exists( 'Jetpack_RelatedPosts' ) && method_exists( 'Jetpack_RelatedPosts', 'init_raw' ) ) {
        // Use the raw class to get 3 related posts.
        $related = Jetpack_RelatedPosts::init_raw()
            ->set_query_name( 'jetpackme-shortcode' ) // Optional, name can be anything
            ->get_for_post_id(
                get_the_ID(),
                array( 'size' => 3 )
            );

        if ( $related ) {
            $related_list = '';

            foreach ( $related as $result ) {
                // Get the related post IDs
                $related_post_id = get_post( $result[ 'id' ] );

                /**
                 * From there you can do just about anything, using the post IDs.
                 *
                 * In this example, we'll build an unordered list.
                 */
                $related_list .= sprintf(
                    '
	<li><a title="%1$s" href="%2$s">%3$s</a></li>
',
                    esc_attr( get_the_title( $related_post_id ) ),
                    get_permalink( $related_post_id ),
                    get_the_title( $related_post_id )
                );
            }

            /**
             * Let's wrap all those related posts in ul tags, and add that list to the end of our post content.
             *
             * We will also add a headline, but only if it was set to be displayed in your Jetpack Related Posts settings.
             */
            $related_options = Jetpack_Options::get_option( 'relatedposts' );
            if ( $related_options['show_headline'] ) {
                $headline = sprintf(
                    '
<h3 class="jp-relatedposts-headline"><em>%s</em></h3>
',
                    esc_html__( 'Related', 'jetpack' )
                );
            } else {
                $headline = '';
            }

            return sprintf(
                '%1$s%2$s
<ul class="jp-relatedposts">%3$s</ul>
',
                $content,
                apply_filters( 'jetpack_relatedposts_filter_headline', $headline ),
                $related_list
            );
        }

        return $content;
    }

    // Last fallback, just in case Jetpack and Related Posts aren't there anymore.
    return $content;
}
add_filter( 'the_content', 'jeherve_related_posts_feed' );

Muestra el nombre del autor de la entrada debajo de cada entrada relacionada

De forma predeterminada, Jetpack muestra información adicional sobre cada entrada relacionada debajo del título de la entrada: la categoría a la que pertenece y las etiquetas que utiliza. Es útil mostrar esta información a tus lectores, ya que les ayuda a decidir si la entrada relacionada podría interesarles o no. Muestra el autor de la entrada después del contexto existente de las entradas relacionadas. Puede que no sepas que también puedes añadir contexto adicional ahí. Si varios autores publican en tu sitio, puede resultar útil mostrar el nombre del autor debajo de cada entrada, para que los lectores puedan elegir entradas de su autor favorito. Para hacerlo, usaremos el filtro jetpack_relatedposts_filter_post_context, así:
/**
 * Display the post author after the existing Related Posts context.
 *
 * @param string $context Context displayed below each related post.
 * @param string $post_id Post ID of the post for which we are retrieving Related Posts.
 *
 * @return string $context Context, including information about the post author.
 */
function jeherve_related_authors( $context, $post_id ) {
    // Get the author ID.
    $post_author = get_post_field( 'post_author', $post_id );

    // Get the author's display name.
    $author_display_name = get_the_author_meta( 'display_name', $post_author );

    // Add the author name after the existing context.
    if ( isset( $author_display_name ) && ! empty( $author_display_name ) ) {
        return sprintf(
            __( '%1$s<span class="jp-relatedposts-post-author">By %2$s</span>', 'my-plugin-slug' ),
            $context,
            esc_html( $author_display_name )
        );
    }

    // Final fallback.
    return $context;
}
add_filter( 'jetpack_relatedposts_filter_post_context', 'jeherve_related_authors', 10, 2 );
También podrías usar ese filtro para no mostrar ninguna información debajo de las entradas relacionadas, así:
add_filter( 'jetpack_relatedposts_filter_post_context', '__return_empty_string' );
¡Eso es todo por este mes! Si te interesan las entradas relacionadas de Jetpack, te recomiendo consultar nuestra documentación de soporte para descubrir algunos filtros más que podrías usar. También puedes consultar nuestra referencia del código para descubrir todos los demás hooks de Jetpack.
1. ¿Quieres saber más sobre las herramientas que se utilizan para calcular las entradas relacionadas de tu sitio? Lee sobre Elasticsearch y cómo funciona en la nube de WordPress.com aquí.

Explora las ventajas de Jetpack

Descubre cómo Jetpack puede ayudarte a proteger, acelerar y hacer crecer tu sitio de WordPress.

Explorar planes

¿Tienes alguna pregunta?

La sección de comentarios está cerrada para este artículo, pero seguimos aquí para ayudarte. ¡Visita el foro de soporte y estaremos encantados de responder a tus preguntas!

Ver foro de soporte