¿Cómo incluir saltos de línea en the_excerpt?

4

¿Cómo puedo incluir un salto de línea dentro de the_excerpt? He modificado la longitud y el botón más a través de mi functions.php. Estoy usando el teaser para cada entrada de blog y, a veces, parece un poco feo, que no hay saltos de línea incluidos.

    
pregunta Nitzki 08.10.2012 - 16:01

4 respuestas

4

No hay ningún filtro que le permita configurar las etiquetas permitidas para que no sean eliminadas por the_excerpt() . Podría decirse que un defecto del núcleo.

De todos modos, la generación del extracto real no ocurre en esa etiqueta de plantilla, sino en cualquier otra parte:

Los extractos son generados por la función wp_trim_excerpt() , dentro de la cual se aplican los filtros de extractos que ya está utilizando ( excerpt_length y excerpt_more ) y que llama a wp_trim_words() , que a su vez llama a wp_strip_all_tags() . Las tres funciones se encuentran en wp-includes/formatting.php

Por lo tanto, en ausencia de un filtro para el caso y la inevitabilidad de que su extracto se ejecute a través de wp_strip_all_tags() , la única posibilidad de conservar algunas etiquetas es agregar una función de reemplazo personalizada para wp_trim_excerpt() :

function wpse67498_wp_trim_excerpt( $text = '' ) {
    $raw_excerpt = $text;

    if ( '' == $text ) {
        $text = get_the_content( '' );
        $text = strip_shortcodes( $text );
        $text = apply_filters( 'the_content', $text );
        $text = str_replace( ']]>', ']]>', $text );
        $excerpt_length = apply_filters( 'excerpt_length', 55 );
        $excerpt_more = apply_filters( 'excerpt_more', ' ' . '[...]' );

        $allowable = '<br>';
        $text = preg_replace( '@<(script|style)[^>]*?>.*?</\1>@si', '', $text );
        $text = trim( strip_tags( $text, $allowable ) );

        if ( 'characters' == _x( 'words', 'word count: words or characters?' )
            && preg_match( '/^utf\-?8$/i', get_option( 'blog_charset' ) ) )
        {
            $text = trim( preg_replace( "/[\n\r\t ]+/", ' ', $text ), ' ' );
            preg_match_all( '/./u', $text, $words_array );
            $words_array = array_slice( $words_array[0], 0, $num_words + 1 );
            $sep = '';
        } else {
            $words_array = preg_split( "/[\n\r\t ]+/", $text, $num_words + 1, PREG_SPLIT_NO_EMPTY );
            $sep = ' ';
        }

        if ( count( $words_array ) > $excerpt_length ) {
            array_pop( $words_array );
            $text = implode( $sep, $words_array );
            $text = $text . $excerpt_more;
        } else {
            $text = implode( $sep, $words_array );
        }
    }

    return apply_filters( 'wp_trim_excerpt', $text, $raw_excerpt );
}

remove_filter( 'get_the_excerpt', 'wp_trim_excerpt');
add_filter( 'get_the_excerpt', 'wpse67498_wp_trim_excerpt' );
    
respondido por el Johannes Pille 08.10.2012 - 17:07
1

Igual que la solución de Johannes Pille, la solución siguiente debe ser más adaptable.

En detalle:

  • función de anulación wp_trim_excerpt
  • eliminar el filtro antiguo y agregar un nuevo filtro personalizado

Aquí está el código completo:

// append to themes/{your_theme}/functions.php

define('EXCERPT_RARELY', '{[}]');
define('EXCERPT_BR', nl2br(PHP_EOL));

function wp_trim_excerpt_custom($text = '')
{
    add_filter('the_content', 'wp_trim_excerpt_custom_mark', 6);

    // get through origin filter
    $text = wp_trim_excerpt($text);

    remove_filter('the_content', 'wp_trim_excerpt_custom_mark');

    return wp_trim_excerpt_custom_restore($text);
}

function wp_trim_excerpt_custom_mark($text)
{
    $text = nl2br($text);
    return str_replace(EXCERPT_BR, EXCERPT_RARELY, $text);
}

function wp_trim_excerpt_custom_restore($text)
{
    return str_replace(EXCERPT_RARELY, EXCERPT_BR, $text);
}

// remove default filter
remove_filter('get_the_excerpt', 'wp_trim_excerpt');

// add custom filter
add_filter('get_the_excerpt', 'wp_trim_excerpt_custom');
    
respondido por el Nguyen Van Vinh 21.06.2018 - 09:02
0

En este momento, es posible utilizar la función the_excerpt() para mostrar el extracto con saltos de línea. Pero si desea devolver el resultado, puede utilizar para ese propósito una función como esta:

function get_the_excerpt_theme() {
    $excerpt = get_the_excerpt();
    $excerpt = apply_filters( 'the_excerpt', $excerpt );
    return $excerpt;
}

Aplica un filtro al extracto usando apply_filters('the_excerpt', $excerpt ) como en la función wp the_excerpt() pero devuelve la cadena sin mostrarla.

Además, si desea permitir solo saltos de línea en el extracto, puede agregar $excerpt = strip_tags($excerpt,'<br>') debajo de la línea apply_filters .

Espero que ayude!

    
respondido por el user38561 22.09.2016 - 13:30
0

también podría usar la función nl2br () de PHP:

echo nl2br(get_the_excerpt());

- o -

nl2br(the_excerpt());
    
respondido por el mroncetwice 16.10.2017 - 10:13

Lea otras preguntas en las etiquetas