Obtenir un extrait en utilisant get_the_excerpt en dehors d'une boucle

30

J'ai un code qui appelle get_the_title() et cela fonctionne, mais get_the_excerpt() renvoie vide. Comment puis-je le faire fonctionner?

Ce code est contenu dans un plugin appelé "Protocole WP Facebook Open Graph". Voici la partie que je veux changer:

if (is_singular('post')) {
  if (has_excerpt($post->ID)) {
    echo "\t<meta property='og:description' content='".esc_attr(strip_tags(get_the_excerpt($post->ID)))."' />\n";
  }else{
    echo "\t<meta property='og:description' content='". [?] ."' />\n";
  }
}else{
  echo "\t<meta property='og:description' content='".get_bloginfo('description')."' />\n";
}

Ici, has_excerpt échoue toujours et get_the_excerpt($post->ID) ne fonctionne plus (obsolète).

Alors, comment puis-je afficher l'extrait ici?

ps: j'utilise aussi le plugin "Advanced Excerpt"

    
posée ariel 24.08.2011 - 01:55

9 réponses

5

l'a obtenu en utilisant my_excerpt($post->post_content, get_the_excerpt()) et en utilisant la fonction my_excerpt() de Utilisation de wp_trim_excerpt pour obtenir the_excerpt () en dehors de la boucle

    
réponse donnée ariel 13.09.2011 - 07:44
26

J'ai trouvé cette question en cherchant comment le faire sans l'objet post.

Mes recherches supplémentaires ont abouti à cette technique complexe:

$text = apply_filters('the_excerpt', get_post_field('post_excerpt', $post_id));

    
réponse donnée cale_b 18.06.2014 - 17:33
21

Puisqu'il semble que vous avez déjà l'objet de publication pour lequel vous avez besoin de l'extrait, vous pouvez simplement forcer les choses à fonctionner:

setup_postdata( $post );
$excerpt = get_the_excerpt();

La fonction setup_postdata() globalisera l'objet $post et le rendra disponible pour l'ancienne fonction de boucle normale. Lorsque vous êtes dans la boucle, vous appelez the_post() et tout est configuré pour vous. En dehors de la boucle, vous devez le forcer manuellement.

    
réponse donnée EAMann 09.06.2012 - 01:06
18

Essayez ceci:

Créez une nouvelle fonction dans functions.php, puis appelez-la de n'importe où.

function get_excerpt_by_id($post_id){
    $the_post = get_post($post_id); //Gets post ID
    $the_excerpt = $the_post->post_content; //Gets post_content to be used as a basis for the excerpt
    $excerpt_length = 35; //Sets excerpt length by word count
    $the_excerpt = strip_tags(strip_shortcodes($the_excerpt)); //Strips tags and images
    $words = explode(' ', $the_excerpt, $excerpt_length + 1);

    if(count($words) > $excerpt_length) :
        array_pop($words);
        array_push($words, '…');
        $the_excerpt = implode(' ', $words);
    endif;

    $the_excerpt = '<p>' . $the_excerpt . '</p>';

    return $the_excerpt;
}

Voici une poste décrivant le code.

    
réponse donnée Withers Davis 09.06.2012 - 01:02
9

Maintenant, vous pouvez simplement utiliser la fonction get_the_excerpt( $postID ) . Depuis: WordPress 4.5.0 a introduit le paramètre $post .

    
réponse donnée docker 20.05.2016 - 13:07
1

Si vous n'avez pas l'objet post, voici une courte fonction comme celle de Withers.

function get_excerpt_by_id($post_id){
    $the_post = get_post($post_id);
    $the_excerpt = $the_post->post_excerpt; 
    return $the_excerpt;
}
    
réponse donnée OKParrothead 25.11.2012 - 20:28
1

Ceci est pour quand vous voulez utiliser get_the_excerpt() en dehors de la boucle:

function custom_get_excerpt($post_id) {
    $temp = $post;
    $post = get_post($post_id);
    setup_postdata($post);

    $excerpt = get_the_excerpt();

    wp_reset_postdata();
    $post = $temp;

    return $excerpt;
}
    
réponse donnée Gixty 01.10.2014 - 01:17
0

Si vous souhaitez générer l'extrait automatiquement à partir du contenu en une seule ligne, vous pouvez utiliser wp_trim_words . fonctionner comme ceci:

// 30 is the number of words ehere
$excerpt = wp_trim_words(get_post_field('post_content', $post_id), 30);
    
réponse donnée Picard 15.05.2017 - 20:25
-1
$trimexcerpt = get_the_content();
$shortexcerpt = wp_trim_words( $trimexcerpt, $num_words = 18, $more = '… ' ); 
echo $shortexcerpt;
    
réponse donnée Rinzler 14.03.2018 - 17:53

Lire d'autres questions sur les étiquettes