在循环外使用Get_the_Excerpt获取摘录

时间:2011-08-23 作者:ariel

我有一个密码get_the_title() 这是可行的,但是get_the_excerpt() 返回空。我怎样才能让它工作?

此代码位于名为“WP Facebook Open Graph protocol”的插件中。以下是我想更改的部分:

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";
}
在这里,has_excerpt 总是失败,并且get_the_excerpt($post->ID) 不再工作(已弃用)。

那么,如何在那里显示摘录?

附言:我也在使用“高级摘录”插件

9 个回复
最合适的回答,由SO网友:ariel 整理而成

得到它使用my_excerpt($post->post_content, get_the_excerpt()) 并使用my_excerpt() 功能来自Using wp_trim_excerpt to get the_excerpt() outside the loop

SO网友:random_user_name

在查看如何在没有post对象的情况下执行此操作时,我发现了这个问题。

我的进一步研究发现了这种巧妙的技术:

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

SO网友:EAMann

既然您似乎已经拥有了需要摘录的post对象,您可以强制工作:

setup_postdata( $post );
$excerpt = get_the_excerpt();
Thesetup_postdata() 函数将全球化$post 对象,并使其可用于常规的旧循环函数。当你在循环中时,你会呼叫the_post() 它为你做了准备。。。在循环之外,您需要手动强制它。

SO网友:Withers Davis

试试这个:

在函数中创建新函数。然后从任何地方调用它。

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

Here\'s a post describing the code.

SO网友:docker

现在,您只需使用get_the_excerpt( $postID ) 作用自:WordPress 4.5.0推出$post 参数

SO网友:OKParrothead

如果您没有post对象,这里有一个类似于威瑟斯函数的简短函数。

function get_excerpt_by_id($post_id){
    $the_post = get_post($post_id);
    $the_excerpt = $the_post->post_excerpt; 
    return $the_excerpt;
}

SO网友:Gixty

这是当你想使用get_the_excerpt() 环路外:

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

SO网友:Picard

如果您想从一行中的内容自动生成摘录,可以使用wp_trim_words 功能如下:

// 30 is the number of words ehere
$excerpt = wp_trim_words(get_post_field(\'post_content\', $post_id), 30);

SO网友:Rinzler
$trimexcerpt = get_the_content();
$shortexcerpt = wp_trim_words( $trimexcerpt, $num_words = 18, $more = \'… \' ); 
echo $shortexcerpt;
结束

相关推荐

如何让Excerpt_More过滤器应用于实际的帖子摘录?

在下面的get\\u blog\\u execrpt()函数中,当文章摘录不存在时,extecrpt\\u more过滤器可以完美工作,但是,当文章有摘录时,我不会获得“阅读更多”链接。我知道\\u摘录首先检查是否存在帖子摘录,这很好,但我也希望对其应用“阅读更多”链接。为了使摘录\\u更适用于所有情况,我需要做哪些更改?function get_blog_excerpt(){ add_filter(\'excerpt_length\', \'ce4_excerpt_length\');&