excerpt_length no funciona
Estoy intentando construir un tema, quiero controlar la longitud de los extractos de las publicaciones haciendo algo como esto en functions.php:
function theme_excerpt_length( $length ) {
return 45; // Cambia la longitud del extracto a 45 palabras
}
add_filter( 'excerpt_length', 'theme_excerpt_length', 999 );
Pero parece que no tiene el efecto deseado de reducir la longitud del extracto a 45 palabras. Incluso, sin la función, algunos extractos son más largos que el valor predeterminado de 55 palabras. ¿Qué podría estar mal?

Existen dos formas rápidas de mostrar extractos personalizados en tu tema usando wp_trim_words
. Recuerda, si usas the_excerpt()
, la longitud de tu extracto siempre será un máximo de 55 palabras, nunca más. Por otro lado, si usas the_content()
, puedes especificar una longitud de extracto mayor a 55 palabras.
Utiliza lo siguiente para mostrar tu extracto. Recuerda reemplazar get_the_excerpt
con get_the_content
si necesitas un extracto de más de 55 palabras, y reemplaza <a href="'. esc_url( get_permalink() ) . '">' . ' …' . __( 'Read more »', 'pietergoosen' ) . '</a>
con cualquier terminación de extracto que necesites. Mi terminación muestra un texto "leer más" con el nombre de la entrada.
function pietergoosen_custom_excerpts($limit) {
return wp_trim_words(get_the_excerpt(), $limit, '<a href="'. esc_url( get_permalink() ) . '">' . ' …' . __( 'Leer más »', 'pietergoosen' ) . '</a>');
}
Ahora solo usa echo pietergoosen_custom_excerpts($limit);
en cualquier parte de tus plantillas donde necesites mostrar extractos. Solo cambia $limit
por la cantidad real de palabras, por ejemplo echo pietergoosen_custom_excerpts(45);
para mostrar 45 palabras.
EDITADO
Echa un vistazo también a mi respuesta sobre un extracto personalizado

Esta es la función que utilizo para controlar la longitud de los extractos/contenidos, especialmente en situaciones donde es poco probable que el usuario final recuerde añadir la etiqueta <!--more-->
, pero el diseño del tema lo requiere.
function excerpt($limit) {
$excerpt = explode(' ', get_the_excerpt(), $limit);
if (count($excerpt)>=$limit) {
array_pop($excerpt);
$excerpt = implode(" ",$excerpt).'...';
} else {
$excerpt = implode(" ",$excerpt);
}
$excerpt = preg_replace('`\[[^\]]*\]`','',$excerpt);
return $excerpt;
}
A partir de ahí, puedes cambiar el código del extracto en tus archivos de plantilla de:
<?php the_excerpt();?>
...a:
<?php echo excerpt(25);?>
donde 25 es el número de caracteres que deseas mostrar. Al diseñar temas, suelo trabajar con caracteres en lugar de palabras porque el espaciado resulta más consistente.

Intenté esto. Hay una reducción en la longitud pero no exactamente la longitud de extracto especificada. Por ejemplo, especifiqué 45, pero aún obtuve un extracto como: "Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem..."

Si tienes un extracto personalizado, el filtro "excerpt_length" no funcionará para él. Puedes usar este filtro para recortar el extracto personalizado.
function custom_excerpt_length($excerpt) {
if (has_excerpt()) {
$excerpt = wp_trim_words(get_the_excerpt(), apply_filters("excerpt_length", 30));
}
return $excerpt;
}
add_filter("the_excerpt", "custom_excerpt_length", 999);
¡Buena suerte!

Si llegaste a esta pregunta porque estás usando el bloque "Extracto" en el editor Gutenberg, y estás intentando establecer una longitud predeterminada para él (o cualquier valor diferente al permitido originalmente de 10-100 palabras), puede que descubras que el filtro excerpt_length
no tiene efecto en el bloque, e incluso no puedes usar el filtro the_excerpt
para sobrescribir el contenido del extracto. Esto se debe a las últimas actualizaciones en el bloque de Extracto en WordPress.
Sin embargo, puedes usar el siguiente código para editar la configuración predeterminada del bloque de Extracto en Gutenberg:
function filter_metadata_registration( $metadata ) {
if ($metadata['name'] === 'core/post-excerpt') {
$metadata['attributes']['excerptLength'] = [
'type' => 'number',
'default' => 9999,
];
}
return $metadata;
};
add_filter( 'block_type_metadata', 'filter_metadata_registration' );
Más sobre esto: https://core.trac.wordpress.org/ticket/59348
