web-dev-qa-db-fra.com

Limite de mot dans post_content après plusieurs balises

J'utilise le code suivant pour masquer le teaser et afficher le contenu uniquement après plusieurs balises en boucle:

<?php
$after_more = explode(
    '<!--more-->', 
    $post->post_content
); 
if( $after_more[1] ) { 
    echo $after_more[1]; 
} else {
    echo $after_more[0]; 
}
?>

Est-il possible d'afficher uniquement les 50 premiers mots au lieu du contenu intégral du message? Je veux cacher le teaser et montrer 50 mots après tag.

3
Skotlive

Utilisez la fonction wp_trim_words pour limiter le contenu à un certain nombre de mots et renvoie le texte coupé. Exemple d'utilisation de la fonction wp_trim_words.

<?php

    $content = get_the_content();
    $trimmed_content = wp_trim_words( $content, 50, NULL );
    echo $trimmed_content;

?>

J'ai donc ajouté la fonction wp_trim_words dans votre code pour obtenir 50 mots après le <!-- 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;
?>

Modifié pour afficher 50 mots du contenu s'il n'y a pas de <!--more--> dans le contenu du message.

2
Robert hue

A) Le commentaire <!--more-->:

Voici un one-liner:

echo wp_trim_words( strip_shortcodes( strip_tags( get_the_content( '', true ) ) ), 50 );

où nous utilisons le deuxième argument de get_the_content() pour masquer le teaser au-dessus de la partie <!--more--> dans le contenu du message.

B) Le commentaire <!--noteaser-->:

Notez qu'il existe le commentaire <!--noteaser-->, que nous pourrions utiliser à la place pour contrôler l'affichage du teaser à partir du contenu du message:

....
<!--more--><!--noteaser-->
...

Dans ce cas, nous utiliserions:

echo wp_trim_words( strip_shortcodes( strip_tags( get_the_content( '', false ) ) ), 50 );

Nous pourrions également appliquer des filtres supplémentaires à la sortie ci-dessus si nécessaire.

Dans ce cas, nous pourrions également utiliser:

echo wp_trim_excerpt();

puis contrôlez la sortie avec les filtres excerpt_length, excerpt_more, the_content et wp_trim_excerpt.

Un exemple avec Star Trek Lorem Ipsum:

Pour le cas A ci-dessus:

Avant:

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. 

Aprè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...
3
birgire