问题描述
我有一个代码调用 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 loop 的 my_excerpt()
功能
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。