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
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"
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
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));
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.
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;
}
Agora, você pode simplesmente usar a função get_the_excerpt( $postID )
.
Desde: WordPress 4.5.0 introduziu o parâmetro $post
.
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;
}
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;
}
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);
$trimexcerpt = get_the_content();
$shortexcerpt = wp_trim_words( $trimexcerpt, $num_words = 18, $more = '… ' );
echo $shortexcerpt;