问题描述
我正在建立一个主题,在主页上显示潜在的几十个帖子的摘录。我的所有帖子没有手册摘录,所以 $post->post_excerpt
对于许多帖子都是空的。如果没有手册摘录,我想使用 built-in get_the_excerpt() 功能,但在循环外不可用。
跟踪功能,它看起来像是使用 wp-includes /formatting.php 的 wp_trim_excerpt 即时创建摘录。我在 wp_trim_excerpt( $item->post_content )
的代码中调用它,但它只是返回完整的内容。我做错了吗?
我知道我可以创建自己的功能来创建一个摘录,但我喜欢在可能的情况下使用 built-in 函数,保持我的代码与其他潜在的插件/过滤器兼容。
http://adambrown.info/p/wp_hooks/hook/wp_trim_excerpt?version=3.0&file=wp-includes/formatting.php
最佳解决方案
由于 WP 3.3.0,wp_trim_words()
如果能够获取要生成摘录的内容,将会很有帮助。希望对某人有帮助,它可以保存创建自己的字计数功能。
http://codex.wordpress.org/Function_Reference/wp_trim_words
次佳解决方案
wp_trim_excerpt()
有一个好奇的机制 – 如果有任何东西传递给它,那么它什么都不做。
这是背后的基本逻辑:
-
get_the_excerpt()
检查手动摘录; -
wp_trim_excerpt()
如果没有手册摘录,并从内容或预告片中输入。
两者都与全局变量紧密相连,所以循环。
在 Loop 之外你最好从 wp_trim_excerpt()
中取代码,并编写自己的修剪功能。
第三种解决方案
更新:
这是我使用的 wp_trim_excerpt() 的衍生物。工作完美源自 Wordpress 版本 3.0.4
function my_excerpt($text, $excerpt)
{
if ($excerpt) return $excerpt;
$text = strip_shortcodes( $text );
$text = apply_filters('the_content', $text);
$text = str_replace(']]>', ']]>', $text);
$text = strip_tags($text);
$excerpt_length = apply_filters('excerpt_length', 55);
$excerpt_more = apply_filters('excerpt_more', ' ' . '[...]');
$words = preg_split("/[nrt ]+/", $text, $excerpt_length + 1, PREG_SPLIT_NO_EMPTY);
if ( count($words) > $excerpt_length ) {
array_pop($words);
$text = implode(' ', $words);
$text = $text . $excerpt_more;
} else {
$text = implode(' ', $words);
}
return apply_filters('wp_trim_excerpt', $text, $raw_excerpt);
}
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。