Mostrar solo el contenido antes de la etiqueta more
Estoy usando la plantilla Siren. En homepage.php se usa este código para mostrar el contenido del portafolio
print_excerpt(200);
Pero necesito mostrar solo el contenido antes de <!--more-->
He usado esto:
the_content( $more_link_text, FALSE);
pero no funciona. Muestra todo el contenido

Puedes usar la función de WordPress get_extended
para obtener las diferentes partes de una cadena (la parte antes y después de la etiqueta <!--more-->
). get_extended
devuelve un array con tres claves, de las cuales las claves main
y extended
son importantes: $arr['main']
contiene la parte antes de la etiqueta more, y $arr['extended']
la parte después de la etiqueta more.
Esto daría como resultado algo como:
// Obtener el contenido del post
$content = get_post_field( 'post_content', get_the_ID() );
// Obtener las partes del contenido
$content_parts = get_extended( $content );
// Mostrar la parte antes de la etiqueta <!--more-->
echo $content_parts['main'];

Pequeña mejora para ser consistente con la función the_content()
: echo apply_filters('the_content', $content_parts['main']);

Tuve problemas con los filtros de bloques que no se ejecutaban correctamente en $content_parts['extended']
, incluso al usar apply_filters('the_content', $content_parts['extended'])
. La solución fue ejecutar primero $filtered_content = apply_filters('the_content', $content)
y luego ejecutar $content_parts = get_extended( $filtered_content )
.

Desafortunadamente, parece que todas las funciones en WordPress que deberían renderizar el extracto (get_extended
, get_extended
) no aplican las etiquetas HTML ni convierten los retornos de carro en párrafos como se esperaría.
Si necesitas renderizar el extracto con formato, te sugiero que utilices este código:
global $more;
$more_backup = $more;
$more = 0;
the_content('');
$more = $more_backup;
Con esta solución alternativa le estás indicando a la función the_content() que está dentro de un bucle, obteniendo el contenido antes de la etiqueta more.
