Extracto personalizado está devolviendo 52 caracteres y no 52 palabras

2

Tengo esta función personalizada que obtiene el extracto introducido manualmente y lo recorta, pero el problema que tengo es que está recortando los caracteres a 52 y en su lugar quiero que devuelva las primeras 52 palabras como el extracto normal .

Esta es la costumbre que me permite recortar el extracto ingresado manualmente

function themeTemplate_trim_excerpt( $content ) {
    return substr( strip_tags( $content ), 0, 52 );
}
remove_filter('get_the_excerpt', 'wp_trim_excerpt');
add_filter('get_the_excerpt', 'template_trim_excerpt');

Esta es la única forma en que he podido cortar el extracto introducido manualmente.

¿Cómo hago que se recorte para que solo muestre las primeras 52 palabras?

Gracias por cualquier comentario :)

    
pregunta Stephen 26.02.2016 - 01:32

2 respuestas

4

La función que desea es wp_trim_words() , ejemplo:

function themeTemplate_trim_excerpt( $content ) {
    $more = '...'; //where $more is optional
    return wp_trim_words($content, 52, $more);
}

remove_filter('get_the_excerpt', 'wp_trim_excerpt');
add_filter('get_the_excerpt', 'template_trim_excerpt');
    
respondido por el userabuser 26.02.2016 - 02:14
0

explode , array_filter , array_slice , y implode puede tirar del mundo buscando operar en el espacio en blanco.

function themeTemplate_trim_excerpt( $content ) {

    // split the content by spaces, 
    // remove excess whitespace
    // pull the first 52 items, 
    // glue back together...

    return implode( ' ', array_slice( array_filter( explode( ' ', $content ) ), 0, 52 ) );
}

remove_filter( 'get_the_excerpt', 'wp_trim_excerpt' );
add_filter( 'get_the_excerpt', 'template_trim_excerpt' );

Desglose

// Convert the string to an array
$words = explode( ' ', $content );

// Remove any empty values
$words = array_filter($words);

// Grab the first 10 elements from the array
$first_x_words = array_slice($words, 0, 10);

// Convert the array to a string
$output = implode ( ' ', $first_x_words );

// Final value
echo $output;

Contras

  • Dado que estas operaciones actúan en espacios, si hay HTML en su contenido, cada atributo puede verse como una palabra.
  • Es mucho más fácil de usar wp_trim_words() - [L2951 ]
respondido por el jgraup 26.02.2016 - 02:12

Lea otras preguntas en las etiquetas