Pour obtenir un extrait, la méthode standard consiste à utiliser les balises de modèle the_excerpt()
ou get_the_excerpt()
. J'essaie d'obtenir uniquement le contenu réel du champ Extrait.
S'il y a un extrait, je souhaite l'afficher en entier (sans être abrégé ni ajouté [...]). S'il n'y a pas d'extrait, je ne veux rien afficher.
Y at-il un moyen simple de faire cela dans Wordpress?
Quelque chose comme ça:
$real_excerpt = ???
if ( $real_excerpt ) {
echo $real_excerpt;
} // shouldn't show anything if there isn't a custom excerpt
Pourquoi n'utilisez-vous pas la variable globale $post
? Il contient un objet avec le contenu tel qu’il se trouve sur la ligne de base de données correspondant à cette publication. Voici comment l'utiliser:
global $post; // If for some reason it's readily accessible, invoke it
if($post->post_excerpt != '') {
echo($post->post_excerpt);
}
Ou:
$my_post = get_post($post_id);
if($my_post->post_excerpt != '') {
echo($my_post->post_excerpt);
}
Très simple, mais laissez-nous savoir si vous avez du mal à le faire fonctionner.
the_excerpt()
Lorsque vous regardez la source de the_excerpt()
, vous trouverez la définition de fonction suivante:
function the_excerpt() {
echo apply_filters('the_excerpt', get_the_excerpt());
}
Cela signifie que get_the_excerpt()
contient le contenu brut et non filtré.
get_the_excerpt()
Lorsque vous examinez ensuite la source de get_the_excerpt()
, vous trouverez les éléments suivants:
function get_the_excerpt( $deprecated = '' ) {
if ( !empty( $deprecated ) )
_deprecated_argument( __FUNCTION__, '2.3' );
global $post;
$output = $post->post_excerpt;
if ( post_password_required($post) ) {
$output = __('There is no excerpt because this is a protected post.');
return $output;
}
return apply_filters('get_the_excerpt', $output);
}
Donc, il y a de nouveau des filtres ajoutés à get_the_excerpt()
.
wp_trim_excerpt()
Tous les filtres de base, qui sont attachés à quelque chose , peuvent être trouvés dans ~/wp-includes/default-filters.php
.
Vous y trouverez (avec WP version 3.4), le filtre suivant: wp_trim_excerpt()
sur la ligne n ° 147 .
La fonction wp_trim_excerpt()
se présente de la manière suivante:
function wp_trim_excerpt($text = '') {
$raw_excerpt = $text;
if ( '' == $text ) {
$text = get_the_content('');
$text = strip_shortcodes( $text );
$text = apply_filters('the_content', $text);
$text = str_replace(']]>', ']]>', $text);
$excerpt_length = apply_filters('excerpt_length', 55);
$excerpt_more = apply_filters('excerpt_more', ' ' . '[...]');
$text = wp_trim_words( $text, $excerpt_length, $excerpt_more );
}
return apply_filters('wp_trim_excerpt', $text, $raw_excerpt);
}
Vous pouvez utiliser chacune de ces fonctions avec tous leurs filtres indésirables, en supprimant simplement les filtres. Mais cela signifie également que vous les retireriez de tout le reste.
En appelant le ->excerpt
simple, vous obtenez un extrait dans tous les cas - sauf s’il n’en existe pas. Ce qui signifie que vous pouvez insérer les balises scripts
et CDATA
comme expliqué dans cette réponse , mais que vous deviez également procéder à la vérification post-mot de passe et revenir dans tous les filtres dont vous avez besoin.