Personalización de get_the_excerpt() para una longitud específica y salida "Leer Más".

5 dic 2012, 20:40:08
Vistas: 24.4K
Votos: 6

Estoy personalizando una plantilla. Hay una lista que toma la introducción de los primeros 1-2 párrafos (todos los artículos de una categoría). Si establezco el extracto en 295 palabras, a veces la lista toma palabras adicionales del siguiente párrafo. Me gustaría añadir una etiqueta Leer Más para detenerlo. ¿Alguien puede ayudarme con esa parte?

<div id="all-div-cabrand-content-stories">
    <div class="kids-families-con-cabrand-stories">
        <?php echo get_the_post_thumbnail($page->ID, 'thubmnailstorysmall'); ?>
    </div>
    <div class="kids-con-cabrand-new-stories">
        <span>
            <?php print substr(get_the_excerpt(),wp_trim_excerpt(),295); ?>
            <i><a style="color:#1975D1;float:Right;" class="title" href="<?php the_permalink() ?>" rel="bookmark">Clic para Ver Historia y Video</a></i>
            <br/>
        </span>
    </div>
</div>
0
Todas las respuestas a la pregunta 5
1

Para obtener una longitud específica puedes usar la función: wp_trim_words. Tiene 3 parámetros.

  1. Texto a recortar. Ejemplo: get_the_content()
  2. Número de palabras. Ejemplo: 295
  3. Qué añadir al final del texto. Ejemplo: '' Esto significa nulo.

Usa esto:

<span>
    <?php echo wp_trim_words( get_the_content(), 295, '' ); ?>
    <i><a style="color:#1975D1;float:Right;" class="title" href="<?php
        the_permalink() ?>" rel="bookmark">Haz clic para ver la historia & video</a></i>
    <br/>
</span>
6 ago 2016 22:21:59
Comentarios

Explicar lo que hace tu código y cómo responde a la pregunta mejoraría tu respuesta.

Gabriel Gabriel
6 ago 2016 22:58:19
0

Puedes obtener el primer párrafo o los dos primeros con una expresión regular (regexp)

function custom_excerpt( $content = '' ){

    if( empty( $content ) )
        return $content;

    $result = '';
    $matches = array();

    // obtener todos los párrafos de $content
    preg_match_all( '#<\s*p[^>]*>(.*?)<\s*/\s*p>#ui', $content, $matches );

    if( ! empty( $matches ) ){

        // agregar el primer párrafo
        $result = $matches[0][0];

        // agregar el segundo párrafo si está disponible
        if( isset( $matches[0][1] ) )
            $result .= $matches[0][1];

        // establecer la longitud del extracto
        add_filter( 'excerpt_length', 'custom_excerpt_length' );

        // crear el extracto personalizado
        $result = custom_trim_excerpt( $result );

    }

    return $result;

}

function custom_excerpt_length(){

    return 295;

 }

function custom_trim_excerpt( $text = '' ){

    $text = strip_shortcodes( $text );

    $text = apply_filters('the_content', $text);
    $text = str_replace(']]>', ']]&gt;', $text);
    $excerpt_length = apply_filters('excerpt_length', 55);
    $excerpt_more = apply_filters('excerpt_more', ' ' . '[...]');
    $text = wp_trim_words( $text, $excerpt_length, $excerpt_more );

    return $text;
}

Llama a la función con

<?php print custom_excerpt( get_the_content( 'Leer más' ) ); ?>

Esto es un poco complicado porque no puedes pasarle un texto a wp_trim_excerpt(). wp_trim_excerpt() simplemente devolverá el texto si se le proporciona uno. Tienes que copiar y personalizar un poco la función.

6 dic 2012 00:53:44
1

Puedes usar esta función:

function get_excerpt_trim($num_words='20', $more='...'){
    $excerpt = get_the_excerpt();
    $excerpt = wp_trim_words( $excerpt, $num_words , $more );
    return $excerpt;
}

https://codex.wordpress.org/Function_Reference/wp_trim_words

22 mar 2018 17:34:17
Comentarios

Muy bien, funciona perfecto

Nuno Sarmento Nuno Sarmento
18 feb 2021 17:51:18
1

Puedes usar la función incorporada

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

http://codex.wordpress.org/Function_Reference/the_excerpt

16 mar 2015 13:58:37
Comentarios

Bienvenido a WPSE Vee. Si vuelves a leer la pregunta, quizás notes que esto no es realmente una respuesta a lo que se preguntó. Pero de todos modos, gracias por intentarlo y una vez más, ¡bienvenido a WPSE!

kraftner kraftner
16 mar 2015 14:41:09
0

Para obtener lo que deseas necesitas hacer dos cosas.

1) Establecer una longitud personalizada para el extracto (en palabras, no en caracteres), lo que se logra mejor siguiendo esta respuesta.

2) Simplemente llama a wp_trim_excerpt(), no lo envuelvas dentro de substr

Tu línea de código anterior no está haciendo lo que esperas que haga. Creo que está devolviendo los primeros 295 caracteres del extracto, pero no estoy completamente seguro de lo que la función php subtr() hará cuando le pases una cadena como segundo argumento cuando espera un número entero.

5 dic 2012 21:57:45