WordPress自动生成摘要的5种姿势,我踩过的坑都在这了
大家好,我是33blog的技术编辑。今天想和大家聊聊WordPress文章摘要这个”看似简单实则坑多”的功能。作为一个每天要和WordPress打交道的博主,我试过各种自动生成摘要的方案,有些效果惊艳,有些则让我想砸键盘…
1. 默认的”更多”标签截断法
这是WordPress自带的经典方法,在文章编辑器中插入<span id="more-2776"></span>
标签。优点是简单直接,但缺点也很明显:
- 需要手动操作,完全谈不上”自动”
- 如果忘记添加,首页就会显示全文(别问我怎么知道的)
记得我刚建站时,有次更新了主题却忘记设置摘要,结果首页直接展示了3篇万字长文的完整内容,页面加载慢得像蜗牛…
2. 按字数截取(the_excerpt)
这是最常见的自动摘要方案,在主题的index.php
中使用the_excerpt()
代替the_content()
:
<?php
// 默认会截取55个单词
the_excerpt();
?>
可以通过excerpt_length
过滤器调整字数:
function custom_excerpt_length($length) {
return 30; // 改为30个单词
}
add_filter('excerpt_length', 'custom_excerpt_length');
但这个方法有个致命伤:会粗暴地截断句子,经常出现半句话的情况。而且会过滤所有HTML标签,如果你的摘要需要保留格式就尴尬了。
3. 智能截取插件(Advanced Excerpt)
后来我发现了Advanced Excerpt这个神器插件,它解决了原生方法的几个痛点:
- 可以保留HTML标签(比如加粗、链接)
- 支持按字符数而非单词数截取
- 能确保在完整的句子结束处截断
安装后只需要在主题中替换原来的the_excerpt()
为:
<?php the_advanced_excerpt(); ?>
不过要注意,这个插件最后一次更新是2019年,在最新的WordPress 6.x上可能会出现兼容性问题(我就遇到过摘要不显示的情况)。
4. 使用AI摘要(OpenAI API)
作为一个技术宅,我还尝试过用OpenAI API自动生成摘要。方法是在functions.php
中添加:
function generate_ai_excerpt($post_id) {
$content = get_the_content(null, false, $post_id);
// 调用OpenAI API生成摘要(伪代码)
$response = openai_api_request("用30字总结: ".$content);
update_post_meta($post_id, '_ai_excerpt', $response);
}
实际效果确实惊艳,生成的摘要流畅自然。但问题也很明显:
- API调用有延迟(特别是文章多的时候)
- 需要处理费用问题(GPT-4可不便宜)
- 国内访问稳定性问题
5. 我的终极方案:混合模式
经过多次迭代,现在我采用的是混合方案:
- 优先使用手动填写的摘要(如果有)
- 其次使用
<!--more-->
标签位置 - 最后才回退到自动截取前120个字符
对应的代码实现:
function smart_excerpt($length = 120) {
global $post;
if (has_excerpt()) {
return get_the_excerpt();
}
if (strpos($post->post_content, '<!--more-->')) {
return get_the_content('', true);
}
$text = strip_shortcodes($post->post_content);
$text = wp_strip_all_tags($text);
return mb_substr($text, 0, $length).'...';
}
写在最后
其实没有完美的自动摘要方案,关键是要根据你的内容类型选择合适的方法。技术类文章可能适合精确截取,而散文随笔或许需要AI润色。
如果你也在这个问题上踩过坑,欢迎在评论区分享你的解决方案~下次我会聊聊如何给摘要自动添加”阅读更多”的智能链接,感兴趣的话记得关注!
手动添加摘要真的太容易忘记了,我之前也因为首页加载太慢被读者吐槽过😅
Advanced Excerpt确实好用,不过在WP6上我已经改用Custom Post Excerpt插件了,推荐试试
AI摘要效果是不错,但那个API费用真的扛不住啊,小站长表示伤不起