文章摘要是一个比较重要的信息。在我们日常发布文章时,如果每一篇文章都手动填写摘要,那无疑会耽误很多时间,所以WordPress默认的文章摘要功能有时难以满足我们的需求。
本文介绍了一种自动截取文章部分内容作为文章摘要的方法,并且能够自定义显示截取字数,以解决手动填写摘要的繁琐问题。
核心代码
以下PHP代码片段可以根据文章是否有手动填写的摘要,来决定是显示摘要还是自动从正文截取内容。
<?php
if (has_excerpt()) {
// 如果文章有手动填写的摘要,则直接输出
echo get_the_excerpt();
} else {
// 如果文章没有摘要,则从正文中自动截取
$raw_content = apply_filters('the_content', $post->post_content); // 获取并应用内容过滤器
$stripped_content = strip_tags($raw_content); // 去除HTML标签
$excerpt = mb_strimwidth($stripped_content, 0, 170, "……"); // 截取170个字符(以中文字符计)
echo $excerpt;
}
?>
代码说明
has_excerpt(): 检查当前文章是否有手动填写的摘要。get_the_excerpt(): 获取文章的手动摘要。apply_filters('the_content', $post->post_content): 获取文章原始内容并应用所有与“the_content”关联的过滤器,确保处理的是与前端显示一致的内容。strip_tags(): 去除内容中的所有HTML标签,避免摘要中出现代码。mb_strimwidth($string, $start, $width, $trimmarker): 一个多字节安全的字符串截取函数。参数说明:$string: 要截取的字符串。$start: 开始位置,通常为0。$width: 截取的最大宽度(字符数)。示例中为170,可根据需要调整。$trimmarker: 截断后添加的字符串,示例中为中文省略号“……”。
重要提示:使用mb_strimwidth函数需要确保服务器的PHP环境已启用mbstring扩展,以正确处理中文字符(避免乱码或截取不准)。
使用方法
将上述代码复制到你正在使用的WordPress主题的functions.php文件中。通常,你需要在主题的循环(Loop)模板文件(如index.php、archive.php或content.php)中调用此摘要输出逻辑,而不是直接放在functions.php中输出。
一个更标准的做法是将代码封装成一个函数,然后在模板中调用:
// 在 functions.php 中定义函数
function my_custom_excerpt($length = 170) {
if (has_excerpt()) {
return get_the_excerpt();
} else {
$content = apply_filters('the_content', get_the_content());
$stripped = strip_tags($content);
return mb_strimwidth($stripped, 0, $length, '……');
}
}
// 在模板文件(如 content.php)中调用
<div class="entry-summary">
<?php echo my_custom_excerpt(200); // 此处可传递自定义字数 ?>
</div>
这种方式更加灵活和符合WordPress开发规范。