web-dev-qa-db-fra.com

Comment obtenir l'extrait non filtré, sans [...] ou auto-extrait

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
6
supertrue

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.

5
Tomas Buteler

Retracer:

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().

Filtres par défaut & 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);
}

Quelles sont nos options?

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.

4
kaiser