¿Cómo se limitaría la longitud del extracto manual en WP?

3 minutos de lectura

avatar de usuario
gorro

Uno puede controlar el valor predeterminado de WP (Automático) extracto de la longitud de una publicación de WP usando el siguiente fragmento dentro functions.php;

Desde el Códice WP

// . Post excerpt adjustment (Auto)
// . ==============================
function wpdocs_custom_excerpt_length( $length ) {
    return 20;
}
add_filter( 'excerpt_length', 'wpdocs_custom_excerpt_length', 999 );

Mi pregunta es ¿cómo se limita el manual?

Ya sabes, ¿el extracto agregado específicamente por el propio usuario?

hay una pregunta de hace 8 añosaquí

eso proporciona algo de contexto, pero dado el año en curso y el progreso que ha logrado WP, quiero publicar la pregunta nuevamente y recibir algo de claridad sobre el tema.

Contexto agregado: (Editado: 12 de marzo de 2019) exerpt_length No es que la respuesta original a la pregunta publicada anteriormente no funcione, todo parece muy torpe. Estoy buscando una respuesta más simple y robusta usandofiltrar. En lugar de usar algo como lo siguiente para recortar el texto; (Si es posible

function excerpt($limit) {
    return wp_trim_words(get_the_excerpt(), $limit);
}

  • )

    ¿Puedes compartir más contexto? Incluso si la pregunta vinculada tiene algunos años, ¿ha probado las respuestas dadas? ¿Qué es exactamente lo que no funciona al usarlos?

    –Nico Haase

  • 12 de marzo de 2019 a las 11:10

    Ciertamente, por favor vea la pregunta actualizada. 🙂

    – Gorro

  • 12 de marzo de 2019 a las 11:22 get_the_excerpt() Cualquier razón para no usar simplemente el

    filtro (que no debe confundirse con la función del mismo nombre)?

    – Loren Rosen

  • 12 de marzo de 2019 a las 14:47 exerpt_length @LorenRosen, No hay una razón real per se’. Como alguien que no está muy versado en WP y que aprende todos los días, me parece extraño que no pueda obtener el resultado que busca con un simple cambio en

    sin usar lo que se siente como un “Método Hacky”.

    – Gorro

  • 13 de marzo de 2019 a las 10:37 get_the_excerpt @Beaniie, incluso WordPress usa el

    filter para generar el extracto automático, por lo que está totalmente bien hacer lo mismo.

    – Sally C.J.

13 de marzo de 2019 a las 20:53

add_filter( 'get_the_excerpt', 'wp_trim_excerpt' );

Tenemos por defecto en core, el siguiente filtrado: wp_trim_excerpt() pero dentro

el recorte solo se aplica al contenido de la publicación, cuando no hay un extracto manual establecido.

add_filter( 'get_the_excerpt', function( $excerpt, $post ) {
    if ( has_excerpt( $post ) ) {
        $excerpt_length = apply_filters( 'excerpt_length', 55 );
        $excerpt_more   = apply_filters( 'excerpt_more', ' ' . '[…]' );
        $excerpt        = wp_trim_words( $excerpt, $excerpt_length, $excerpt_more );
    }
    return $excerpt;
}, 10, 2 );

Aquí hay una sugerencia no probada para un filtrado personalizado:

para aplicar el recorte similar en extractos manuales.

Espero que puedas ajustar esto más a tus necesidades. Prueba esto, obtuve este código de aquí:

add_filter( 'excerpt_length', function($length) {
    return 20;
} );

How to Change The Default Excerpt Length In WordPress

function get_excerpt_by_id($post_id, $length = NULL) {
  $length = isset($length) ? $length : apply_filters('excerpt_length', 32);
  $p = get_post($post_id);
  return $p->post_excerpt ? build_excerpt_by_length($p->post_excerpt, $length) : build_excerpt_by_length($p->post_content, $length);
}

function build_excerpt_by_length($content, $length = 32) {
  $excerpt = strip_tags(strip_shortcodes($content));
  $words = explode(' ', $excerpt, $length + 1);
  $words = array_slice($words, 0, $length);
  $result = trim(implode(' ', $words));
  $result = preg_replace('/\W*$/', '', $result);
  $more = apply_filters('excerpt_more', '…');
  if ($result !== '') $result = $content === $result ? $result : $result . $more;
  return $result;
}

Este par de funciones le dará control sobre la longitud del extracto, incluido el extracto manual que se devuelve si está disponible; de ​​lo contrario, se devuelve el post_content “extraído”. Estos van en el archivo de funciones de su tema:

get_excerpt_by_id($your_post_id, $preferred_excerpt_length);

Luego, en sus plantillas, puede usarlas llamando a:

$excerpt = get_the_excerpt(); 
$excerpt = substr( $excerpt, 0, 180 ); 
$excerpt_description = substr( $excerpt, 0, strrpos( $excerpt, ' ' ) );
echo $excerpt_description;

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad