问题描述

我有一个代码调用 get_the_title()它可以工作,但 get_the_excerpt()返回空。我该如何让它工作?

此代码位于称为 「WP Facebook Open Graph 协议」 的插件中。这是我想改变的部分:

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)不再工作了 (已弃用) 。

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

ps:我也在使用”Advanced Excerpt” 插件

最佳解决方案

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

我的另外一项研究发现了这种光滑的技术:

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

次佳解决方案

尝试这个:

在 functions.php 中创建一个新的函数,然后从中调用它。

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.

第三种解决方案

既然看起来你已经有了 post 对象,你需要摘录,你可以强制要做的事情:

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

setup_postdata()功能将全局化 $post 对象,使其可用于常规旧循环功能。当你在循环里面时,你调用 the_post(),它会为你设置的东西在你需要手动强制的循环之外。

第四种方案

现在您可以简单地使用 get_the_excerpt( $postID )功能。既然:WordPress 4.5.0 引入了 $post 参数。

第五种方案

使用 my_excerpt($post->post_content, get_the_excerpt())并使用 Using wp_trim_excerpt to get the_excerpt() outside the loopmy_excerpt()功能

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。