excerpt_length no funciona

2 abr 2014, 03:16:23
Vistas: 14.6K
Votos: 4

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?

2
Comentarios

¿Esos posts tienen un extracto personalizado ingresado en el campo de extracto?

Milo Milo
2 abr 2014 03:38:59

No. No hay extracto personalizado.

bodesam bodesam
2 abr 2014 18:58:33
Todas las respuestas a la pregunta 4
0

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() ) . '">' . '&nbsp;&hellip;' . __( 'Read more &nbsp;&raquo;', '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() ) . '">' . '&nbsp;&hellip;' . __( 'Leer más &nbsp;&raquo;', '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

2 abr 2014 06:32:48
1

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.

2 abr 2014 04:53:49
Comentarios

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..."

bodesam bodesam
2 abr 2014 19:03:07
1

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!

29 nov 2021 19:24:55
Comentarios

Estuve buscando una solución funcional durante media hora. Esta parece funcionar, ¡gracias!

Jameu Lukasli1 Jameu Lukasli1
29 abr 2022 17:58:52
0

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

14 sept 2023 16:01:57