Limite di parole nel post_content dopo il tag more
Sto utilizzando il seguente codice per nascondere l'anteprima e mostrare solo il contenuto dopo il tag more nel loop:
<?php
$after_more = explode(
'<!--more-->',
$post->post_content
);
if( $after_more[1] ) {
echo $after_more[1];
} else {
echo $after_more[0];
}
?>
C'è un modo per mostrare solo le prime 50 parole invece dell'intero contenuto del post? Vorrei nascondere l'anteprima e mostrare 50 parole dopo il tag more.

Usa la funzione wp_trim_words
per limitare il contenuto a un certo numero di parole e restituisce il testo ridotto. Esempio di utilizzo della funzione wp_trim_words
.
<?php
$content = get_the_content();
$trimmed_content = wp_trim_words( $content, 50, NULL );
echo $trimmed_content;
?>
Quindi ho aggiunto la funzione wp_trim_words
nel tuo codice per ottenere 50 parole dopo <!-- 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;
?>
Modificato per mostrare 50 parole dal contenuto se non c'è <!--more-->
nel contenuto del post.

Potremmo anche usare la funzione core get_extended()
per gestire il caso più generale: <!--more(.*?)?-->
. Ad esempio: <!--more Ma aspetta, c'è di più! -->
.

@birgire non avevo mai visto questa funzione prima. Darò un'occhiata. :) Grazie

Ciao Robert, volevo sapere cosa succede se il post non ha il tag <!--more-->. Vedo che nasconde tutto il contenuto.

Volevo dire, c'è un modo per usare entrambi i codici che hai scritto nella tassonomia con un tag condizionale if else: Se il post ha il tag <!--more-->, usa la seconda opzione, e se il post non ha il tag <!--more--> usa la prima opzione

@SureshSoni Ho apportato modifiche al codice. Usa il codice aggiornato e fammi sapere se funziona come desideri.

A) Il commento <!--more-->
:
Ecco una soluzione su una riga:
echo wp_trim_words( strip_shortcodes( strip_tags( get_the_content( '', true ) ) ), 50 );
dove usiamo il secondo argomento di get_the_content()
per nascondere l'anteprima sopra la parte <!--more-->
nel contenuto del post.
B) Il commento <!--noteaser-->
:
Nota che esiste il commento <!--noteaser-->
, che potremmo usare invece per controllare la visualizzazione dell'anteprima dal contenuto del post:
....
<!--more--><!--noteaser-->
...
In quel caso useremmo:
echo wp_trim_words( strip_shortcodes( strip_tags( get_the_content( '', false ) ) ), 50 );
Potremmo anche applicare filtri aggiuntivi all'output sopra se necessario.
Per questo caso potremmo anche usare:
echo wp_trim_excerpt();
e poi controllare l'output con i filtri excerpt_length
, excerpt_more
, the_content
e wp_trim_excerpt
.
Un esempio con Star Trek Lorem Ipsum:
Per il caso A sopra:
Prima:
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.
Dopo:
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...
