问题描述

我正在建立一个主题,在主页上显示潜在的几十个帖子的摘录。我的所有帖子没有手册摘录,所以 $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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。