Cómo crear y personalizar extractos de WordPress

Publicado: 2020-04-16

El extracto es un texto opcional asociado a una publicación. La mayoría de las veces, se utiliza como resumen de la publicación. Si está utilizando el nuevo editor, verá que hay una opción en la barra lateral llamada Extracto :

Extractos en Gutenberg
Extractos en Gutenberg.

Si no aparece, es posible que deba habilitar la opción desde la configuración de Gutenberg. Haga clic en el ícono de puntos suspensivos en la esquina superior derecha del editor y luego en Opciones :

Configuración de Gutenberg
Configuraciones de Gutenberg.

Luego busque Extracto y actívelo:

Cómo activar el panel para editar el extracto de una publicación.
Cómo activar el panel para editar el extracto de una publicación.

Dependiendo de cómo esté configurado su tema, el extracto se mostrará al mirar sus publicaciones en el blog, los resultados de una búsqueda, etc. Por ejemplo, en nuestro blog puede ver cómo se presentan todas nuestras publicaciones con sus extractos relacionados:

Entradas en el blog de Nelio con sus extractos.
Entradas en el blog de Nelio con sus extractos.

Ahora bien, ¿es siempre obligatorio escribir este extracto? Si no lo hacemos, ¿qué hace WordPress? ¿Muestra algo o nada en absoluto? Bueno, vamos a responder estas preguntas y veremos más de cerca las opciones que WordPress nos brinda para personalizar extractos.

Cómo funcionan los extractos de WordPress

WordPress tiene dos funciones para obtener el extracto de una publicación: get_the_excerpt y the_excerpt . Ambos están definidos en wp-includes/post-template.php y si echa un vistazo a su código fuente, descubrirá que todo lo que hace the_excerpt es echo el resultado de get_the_excerpt (después de filtrarlo con the_excerpt ). Entonces, esencialmente, podemos decir aproximadamente que lo único que necesita comprender para saber cómo funcionan los extractos en WordPress es la función get_the_excerpt .

Como puede ver, get_the_excerpt es extremadamente simple:

 function get_the_excerpt( $post = null ) { // ... $post = get_post( $post ); if ( empty( $post ) ) { return ''; } // ... return apply_filters( 'get_the_excerpt', $post->post_excerpt, $post ); }

Básicamente, carga una publicación (si no configura una, usa la publicación disponible en el bucle de WordPress) y devuelve su atributo post_excerpt . Entonces parece que ningún extracto significa que WordPress no mostrará nada al final, ¿verdad?

No tan rápido, amigo.

Tenga en cuenta que esta función en realidad no devuelve el valor de post_excerpt directamente. En su lugar, lo filtra usando un nuevo filtro: get_the_excerpt. Entonces, si hay alguna acción asociada con ese filtro, el resultado final puede cambiar y dejar de ser la cadena vacía...

Y de hecho, ¡eso es lo que está pasando aquí! Si no escribimos un extracto para una publicación determinada, esto es lo que veremos en el front-end:

Extracto automático.
Extracto automático generado por WordPress.

las primeras palabras de nuestra publicación serán el extracto que genera WordPress.

La función wp_trim_excerpt

Si realizamos una búsqueda rápida en el código fuente de WordPress veremos que, por defecto, solo hay una única acción asociada al filtro get_the_excerpt . Específicamente, en wp-includes/default-filters.php vemos que una función llamada wp_trim_excerpt está enganchada.

De acuerdo con los documentos de WordPress, wp_trim_excerpt es responsable de generar un extracto con un máximo de 55 palabras y puntos suspensivos adjuntos si es necesario. Y aquí está la clave: la función considera que generar un extracto “es necesario” si aún no lo hay (lo que, en general, equivale a decir que el usuario no ha escrito el extracto en el editor). Puedes ver esto en el código fuente de la función:

 function wp_trim_excerpt( $text = '', $post = null ) { $raw_excerpt = $text; if ( '' == $text ) { $post = get_post( $post ); $text = get_the_content( '', false, $post ); // [...] » Generates the excerpt using the post content } return apply_filters( 'wp_trim_excerpt', $text, $raw_excerpt ); }

¿Ver? Si no hay un extracto ( $text es la cadena vacía), recupere el contenido de la publicación actual ( get_the_content from $post ) y utilícelo para generar un extracto.

A partir de este momento, puede seguir investigando y descubrir cómo WordPress realmente genera el código fuente. Sin embargo, creo que ya entendiste la idea, así que echemos un vistazo a la documentación nuevamente, ya que arroja algo de luz sobre este tema:

Devuelve un máximo de 55 palabras con puntos suspensivos si es necesario. El límite de 55 palabras se puede modificar mediante complementos/temas utilizando el filtro excerpt_length . La cadena ' […]' se puede modificar mediante complementos/temas utilizando el filtro excerpt_more .

wp_trim_excerpt Documentación

Así que ahora sabes todo lo que hay que saber para personalizar completamente los extractos automáticos que WordPress genera para tus publicaciones.

Cómo personalizar extractos automáticos

Echemos un vistazo a algunos ejemplos de cómo podemos usar los filtros que hemos visto a lo largo de la publicación de hoy para personalizar extractos automáticos. Por cierto, recuerda que para poder añadir cualquiera de estas modificaciones a tu web probablemente necesites crear un plugin.

a) Cómo cambiar el número de palabras que quiero en mis extractos

Este es uno de los más simples. Ya hemos visto que tenemos a nuestra disposición el filtro excerpt_length para elegir cuántas palabras queremos en nuestros extractos, así que usémoslo:

 function nelio_100_word_excerpts( $length ) { if ( is_admin() ) { return $length; } return 100; } add_filter( 'excerpt_length', 'nelio_100_word_excerpts', 99 );

Tenga en cuenta que lo primero que hacemos en nuestra función es asegurarnos de que estamos en el front-end. Si estamos en el Dashboard ( is_admin ), mejor no hagamos nada con nuestros extractos. Una vez que estemos seguros de que estamos en un "entorno seguro", solo tenemos que devolver nuestro número mágico. En mi caso: 100 palabras.

b) Cómo cambiar el texto que aparece después de un extracto automático

Este también es extremadamente fácil porque ya hemos visto que hay un filtro para ello:

 function nelio_clickable_read_more( $more ) { if ( is_admin() ) { return $more; } return sprintf( '<a href="%s">Tell me more!</a>', esc_url( get_the_permalink() ) ); } add_filter( 'excerpt_more', 'nelio_clickable_read_more', 99 );

En este caso, todo lo que hacemos es devolver el texto "¡Cuéntame más!" después del resumen y conviértalo en un enlace para que los usuarios puedan hacer clic en él.

c) Cómo limitar la longitud de un extracto a un cierto número de caracteres

La función wp_trim_words tiene un filtro con el mismo nombre que podemos usar para modificar el extracto final que usa WordPress. Así que vamos a usarlo:

 function nelio_140_char_excerpts( $excerpt, $raw_excerpt ) { if ( is_admin() ) { return $excerpt; } if ( '' !== $raw_excerpt ) { return $excerpt; } return mb_substr( $excerpt, 0, 140 ); } add_filter( 'wp_trim_excerpt', 'nelio_140_char_excerpts', 99, 2 );

El filtro wp_trim_words se aplica tanto a extractos automáticos como definidos por el usuario. En mi ejemplo, solo estoy interesado en modificar extractos que se han generado automáticamente, por lo que necesito agregar una nueva condición. Si recuerda, wp_trim_words solo genera un extracto automático si el extracto original estaba vacío, por lo que todo lo que tiene que hacer es verificar esto para obtener el resultado deseado.

Por otro lado, observe que usé mb_substr en lugar de la función substr clásica. Si se pregunta por qué, la razón es simple: si escribe en su blog en un idioma que no sea inglés, es probable que esté usando caracteres de varios bytes, y acortar cadenas de varios bytes con substr puede salir mal. Lea la documentación de PHP para obtener más información sobre esto.

d) Cómo crear extractos con el primer párrafo del contenido

Y finalmente, un ejemplo de cómo crear un extracto usando exactamente el primer párrafo de tu publicación. No hay explicación esta vez, así que presta atención a lo que estoy haciendo:

 function nelio_first_paragraph_excerpts( $excerpt, $raw_excerpt ) { if ( is_admin() ) { return $excerpt; } if ( '' !== $raw_excerpt ) { return $excerpt; } $content = apply_filters( 'the_content', get_the_content() ); return substr( $content, 0, strpos( $content, '</p>' ) + 4 ); } add_filter( 'wp_trim_excerpt', 'nelio_first_paragraph_excerpts', 99, 2 );

En breve…

El gran poder de WordPress radica en su extensibilidad. Hoy hemos visto en detalle cómo WordPress genera extractos de publicaciones y todos los filtros y funciones que ofrece para personalizar el resultado final a tus necesidades.

Espero que les haya gustado el post de hoy. ¡Compártelo con tus amigos para que más personas conozcan las ventajas de WordPress!

Imagen destacada de Aaron Burden en Unsplash.