Limită de cuvinte în post_content după eticheta more
Folosesc următorul cod pentru a ascunde teaser-ul și a afișa conținutul doar după eticheta more în buclă:
<?php
$after_more = explode(
'<!--more-->',
$post->post_content
);
if( $after_more[1] ) {
echo $after_more[1];
} else {
echo $after_more[0];
}
?>
Există vreo modalitate de a afișa doar primele 50 de cuvinte în loc de întregul conținut al articolului? Vreau să ascund teaser-ul și să afișez 50 de cuvinte după eticheta more.

Folosește funcția wp_trim_words
pentru a limita conținutul la un anumit număr de cuvinte și returnează textul redus. Exemplu de utilizare a funcției wp_trim_words
.
<?php
$content = get_the_content();
$trimmed_content = wp_trim_words( $content, 50, NULL );
echo $trimmed_content;
?>
Am adăugat funcția wp_trim_words
în codul tău pentru a obține 50 de cuvinte după <!-- 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;
?>
Editat pentru a afișa 50 de cuvinte din conținut dacă nu există <!--more-->
în conținutul postării.

Am putea folosi și funcția de bază get_extended()
pentru a gestiona cazul mai general: <!--more(.*?)?-->
. De exemplu: <!--more Dar stai, mai este! -->
.

@birgire nu am văzut niciodată această funcție înainte. O să mă uit la ea. :) Mulțumesc

Salut Robert, voiam să știu ce se întâmplă dacă postarea nu are tag-ul <!--more-->. Am observat că ascunde tot conținutul.

Vreau să spun, există vreo modalitate de a folosi ambele coduri pe care le-ai scris în taxonomie într-un tag condițional if else: Dacă postarea are tag-ul <!--more-->, să folosească a doua opțiune, iar dacă postarea nu are <!--more-->, să folosească prima opțiune.

@SureshSoni Am făcut modificări în cod. Folosește codul actualizat și spune-mi dacă funcționează așa cum dorești.

A) Comentariul <!--more-->
:
Iată o soluție într-o singură linie:
echo wp_trim_words( strip_shortcodes( strip_tags( get_the_content( '', true ) ) ), 50 );
unde folosim al doilea argument al funcției get_the_content()
pentru a ascunde fragmentul de deasupra părții <!--more-->
din conținutul articolului.
B) Comentariul <!--noteaser-->
:
De remarcat că există și comentariul <!--noteaser-->
, pe care îl putem folosi pentru a controla afișarea fragmentului direct din conținutul articolului:
....
<!--more--><!--noteaser-->
...
În acest caz am folosi:
echo wp_trim_words( strip_shortcodes( strip_tags( get_the_content( '', false ) ) ), 50 );
Putem aplica și filtre suplimentare acestui rezultat dacă este necesar.
Pentru acest caz am putea folosi și:
echo wp_trim_excerpt();
și apoi controla rezultatul cu filtrele excerpt_length
, excerpt_more
, the_content
și wp_trim_excerpt
.
Un exemplu cu Star Trek Lorem Ipsum:
Pentru cazul A de mai sus:
Înainte:
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.
După:
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...
