WordPress 中控制 the_excerpt() 输出的字数

WordPress 中控制 the_excerpt() 输出的字数

方法一:使用内置的 Excerpt Length 钩子(推荐)

这是最标准、最常用的方法。通过 WordPress 提供的 excerpt_length 过滤器,您可以轻松地修改摘录的字数。

将以下代码添加到您当前主题的 functions.php 文件中:

php

/**
 * 自定义摘要字数长度
 *
 * @param int $length 默认的摘要字数(55个单词)。
 * @return int 修改后的摘要字数。
 */
function my_custom_excerpt_length( $length ) {
    // 将 20 修改为您希望显示的字数(英文是单词数,中文基本等价于字数)
    return 20;
}
// 将函数添加到 'excerpt_length' 过滤器
add_filter( 'excerpt_length', 'my_custom_excerpt_length' );

重要说明:

  • 这里的数字 20 代表单词数。对于英文,它会截取 20 个单词。
  • 对于中文,由于没有空格分隔单词,WordPress 会尝试将每个字符视为一个“单词”,所以在大多数情况下,20 就代表 20 个字。这是最接近控制“字数”的方法。

优点:

  • 一次性修改全站所有使用 the_excerpt() 的地方。
  • 代码简洁,符合 WordPress 开发规范。

方法二:同时修改长度和省略号样式

您可能还想自定义末尾的省略符号。这时可以同时使用 excerpt_length 和 excerpt_more 两个过滤器。

将以下代码添加到 functions.php

php

// 1. 自定义摘要长度
function my_custom_excerpt_length( $length ) {
    return 20; // 设置为需要的字数
}
add_filter( 'excerpt_length', 'my_custom_excerpt_length' );

// 2. 自定义摘要末尾的省略号样式
function my_custom_excerpt_more( $more ) {
    return '...'; // 将默认的 [...] 替换为 ...
}
add_filter( 'excerpt_more', 'my_custom_excerpt_more' );

方法三:直接使用 wp_trim_words() 函数(最灵活)

如果您只想在某个特定模板(如 home.phparchive.php)或某个地方控制输出,而不是全局修改,这个方法非常有用。你可以用它来创建一个自定义的摘录输出。

在您的模板文件(例如 .php)中,替换掉 the_excerpt(),使用以下代码:

php

<?php
    $excerpt = get_the_excerpt(); // 获取文章的摘录内容
    echo wp_trim_words( $excerpt, 20, '...' ); // 输出限制在20个单词,并以...结尾
?>

参数解释:

  • $excerpt: 要处理的文本。
  • 20: 要保留的字数(单词数)。
  • '...': 超过字数后末尾添加的符号。

优点:

  • 可以在不同页面模板使用不同的字数限制,灵活性极高。
  • 不需要修改 functions.php 文件。

方法四:手动创建摘要(处理无手动摘要的文章)

如果文章没有设置“手动摘要”,WordPress 会自动从内容中截取。但自动截取的内容可能不完美。以下是一个更强大的自定义函数,可以添加到 functions.php,它会优先使用手动摘要,如果没有则从内容中截取并清理格式。

php

/**
 * 获取自定义字数的摘要
 * @param int $length 要返回的字数(单词数)
 * @param string $more 结尾符号
 * @return string 处理后的摘要
 */
function my_get_custom_excerpt( $length = 20, $more = '...' ) {
    // 如果文章设置了手动摘要,直接返回
    if ( has_excerpt() ) {
        $excerpt = get_the_excerpt();
    } else {
        // 如果没有手动摘要,从内容中获取
        $excerpt = get_the_content();
        // 清除 HTML 标签,避免截取到一半的标签
        $excerpt = strip_tags( $excerpt );
        // 使用 wp_trim_words 进行截取
        $excerpt = wp_trim_words( $excerpt, $length, $more );
    }
    return $excerpt;
}

在模板中的使用方法:

php

<?php echo my_get_custom_excerpt( 25, ' »' ); // 输出25字,并以 » 结尾 ?>

总结与建议

方法适用场景优点
方法一全局修改所有摘录字数简单、标准、一键配置
方法二全局修改字数省略号样式在方法一基础上增加自定义样式
方法三特定模板文件中自定义灵活,不影响网站其他部分
方法四需要高度自定义摘录行为功能最强大,可处理无手动摘要的情况

对于大多数用户,我们推荐使用【方法一】或【方法二】。

操作步骤:

  1. 登录您的 WordPress 后台。
  2. 转到 外观 > 主题文件编辑器
  3. 在右侧选择 functions.php 文件。
  4. 将上面【方法一】或【方法二】的代码粘贴到文件末尾的 ?> 标签之前(如果该标签存在的话)。如果文件末尾没有 ?>,直接粘贴到最下面即可。
  5. 点击更新文件保存更改。
  6. 清除网站缓存(如果使用了缓存插件),然后刷新前台页面查看效果。

记得根据您的实际需求修改代码中的数字 20

Comments are closed.