Límite de palabras en post_content después de la etiqueta more
Estoy usando el siguiente código para ocultar el teaser y mostrar solo el contenido después de la etiqueta more en el loop:
<?php
$after_more = explode(
'<!--more-->',
$post->post_content
);
if( $after_more[1] ) {
echo $after_more[1];
} else {
echo $after_more[0];
}
?>
¿Hay alguna manera de mostrar solo las primeras 50 palabras en lugar de todo el contenido de la entrada? Quiero ocultar el teaser y mostrar 50 palabras después de la etiqueta more.

Utiliza la función wp_trim_words
para limitar el contenido a un cierto número de palabras y devuelve el texto recortado. Ejemplo de uso de la función wp_trim_words
.
<?php
$content = get_the_content();
$trimmed_content = wp_trim_words( $content, 50, NULL );
echo $trimmed_content;
?>
Así que agregué la función wp_trim_words
en tu código para obtener 50 palabras después de <!-- more -->
.
<?php
$after_more = explode( '<!--more-->', $post->post_content );
if( $after_more[1] ) {
$content = $after_more[1];
} else {
$content = get_the_content();
}
$trimmed_content = wp_trim_words( $content, 50, NULL );
echo $trimmed_content;
?>
Editado para mostrar 50 palabras del contenido si no hay <!--more-->
en el contenido del post.

También podríamos usar la función principal get_extended()
para manejar el caso más general: <!--more(.*?)?-->
. Por ejemplo: <!--more Pero espera, ¡hay más! -->
.

@birgire nunca había visto esta función antes. Voy a investigarla. :) Gracias

Hola Robert, quería saber qué pasa si la publicación no tiene la etiqueta <!--more-->. Veo que oculta todo el contenido.

Quiero decir, ¿hay alguna forma de usar ambos códigos que escribiste en la taxonomía dentro de una etiqueta condicional if else: Si la publicación tiene la etiqueta <!--more-->, usar la segunda opción, y si la publicación no tiene <!--more--> usar la primera opción.

@SureshSoni Hice cambios en el código. Usa el código actualizado y dime si funciona como deseas.

A) El comentario <!--more-->
:
Aquí hay una línea de código:
echo wp_trim_words( strip_shortcodes( strip_tags( get_the_content( '', true ) ) ), 50 );
donde usamos el segundo argumento de get_the_content()
para ocultar el avance que está arriba de la parte <!--more-->
en el contenido del post.
B) El comentario <!--noteaser-->
:
Ten en cuenta que existe el comentario <!--noteaser-->
, que podríamos usar para controlar la visualización del avance desde el contenido del post:
....
<!--more--><!--noteaser-->
...
En ese caso usaríamos:
echo wp_trim_words( strip_shortcodes( strip_tags( get_the_content( '', false ) ) ), 50 );
También podríamos aplicar filtros adicionales a la salida anterior si fuera necesario.
Para este caso también podríamos usar:
echo wp_trim_excerpt();
y luego controlar la salida con los filtros excerpt_length
, excerpt_more
, the_content
, y wp_trim_excerpt
.
Un ejemplo con Star Trek Lorem Ipsum:
Para el caso A anterior:
Antes:
Exceeding reaction chamber thermal limit.
We have begun power-supply calibration.
<!--more-->
Force fields have been established on all turbo lifts and crawlways.
Computer, run a level-two diagnostic on warp-drive systems.
Antimatter containment positive.
Warp drive within normal parameters.
I read an ion trail characteristic of a freighter escape pod.
The bomb had a molecular-decay detonator.
Detecting some unusual fluctuations in subspace frequencies.
Sensors indicate no shuttle or other ships in this sector.
According to coordinates, we have travelled 7,000 light years
and are located near the system J-25.
Tractor beam released, sir.
Force field maintaining our hull integrity.
Después:
Force fields have been established on all turbo lifts and crawlways.
Computer, run a level-two diagnostic on warp-drive systems.
Antimatter containment positive.
Warp drive within normal parameters.
I read an ion trail characteristic of a freighter escape pod.
The bomb had a molecular-decay detonator.
Detecting some unusual fluctuations in subspace...
