Obter excerto usando get_the_excerpt fora de um loop

30

Eu tenho um código que chama get_the_title() e funciona, mas get_the_excerpt() retorna vazio. Como posso fazer isso funcionar?

Este código está dentro de um plugin chamado "protocolo WP Facebook Open Graph". Aqui está a parte que eu quero mudar:

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";
}

Aqui, has_excerpt sempre falha e get_the_excerpt($post->ID) não funciona mais (com descontinuidade).

Então, como posso exibir o trecho aqui?

ps: Também estou usando o plugin "Advanced Excerpt"

    
por ariel 24.08.2011 / 01:55

9 respostas

5

usei my_excerpt($post->post_content, get_the_excerpt()) e use a função my_excerpt() de Usando o wp_trim_excerpt para obter o the_excerpt () fora do loop

    
por ariel 13.09.2011 / 07:44
26

Eu encontrei esta pergunta ao procurar como fazer isso sem o objeto post.

Minha pesquisa adicional revelou essa técnica interessante:

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

    
por cale_b 18.06.2014 / 17:33
21

Já que parece que você já tem o objeto post para o qual você precisa do trecho, você pode simplesmente forçar as coisas a funcionarem:

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

A função setup_postdata() globalizará o objeto $post e o disponibilizará para a função regular de loop antigo. Quando você está dentro do loop, você chama the_post() e configura as coisas para você ... fora do loop, você precisa forçá-lo manualmente.

    
por EAMann 09.06.2012 / 01:06
18

Tente isto:

Crie uma nova função em functions.php e chame-a de qualquer lugar.

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;
}

Aqui está uma post descrevendo o código.

    
por Withers Davis 09.06.2012 / 01:02
9

Agora, você pode simplesmente usar a função get_the_excerpt( $postID ) . Desde: WordPress 4.5.0 introduziu o parâmetro $post .

    
por docker 20.05.2016 / 13:07
1

Caso você não tenha o objeto post, aqui está uma pequena função como a do Withers.

function get_excerpt_by_id($post_id){
    $the_post = get_post($post_id);
    $the_excerpt = $the_post->post_excerpt; 
    return $the_excerpt;
}
    
por OKParrothead 25.11.2012 / 20:28
1

Isto é para quando você quiser usar get_the_excerpt() fora do loop:

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;
}
    
por Gixty 01.10.2014 / 01:17
0

Se você deseja gerar o trecho automaticamente do conteúdo em uma linha, use wp_trim_words função como esta:

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

Tags