WordPress系统有一个叫“Time to Read”(阅读时间) 的区块,从 6.9 版本开始正式加入。它能显示当前文章的预计阅读时间,甚至还能切换显示字数。
但这个功能有几个关键限制,导致你很难像调用普通函数那样“调用”它:
仅限区块编辑器:它主要作为一个区块(Block)使用,你需要在文章或模板里手动插入。
没有PHP函数:核心代码里并没有提供一个类似get_reading_time()的函数供开发者在模板里直接调用。
计算逻辑固定:它的默认阅读速度是189词/分钟,且没有提供设置选项来修改。对于中文内容,这个计算方式可能不太准确。
如果你想在前台实现类似效果
既然核心没有提供直接的调用方式,最可靠的方法还是通过代码来复现它的逻辑。你可以把下面这段代码加到主题的functions.php文件里,它模拟了系统的估算思路,同时针对中文做了优化:
function get_estimated_reading_time() {
$post = get_post();
if ( ! $post ) {
return '';
}
// 获取纯文本内容,去除短代码和 HTML 标签
$content = strip_shortcodes( $post->post_content );
$content = wp_strip_all_tags( $content );
// 计算字符数(中文按字符算更准确,英文单词也会被计入)
$char_count = mb_strlen( $content, 'UTF-8' );
// 设定阅读速度,这里设为 300 字符/分钟(可根据需要调整)
$reading_speed = 300;
// 计算分钟数,向上取整
$minutes = ceil( $char_count / $reading_speed );
return '阅读时间 ' . $minutes . ' 分';
}
在模板中调用:把下面这行代码加到你的single.php或内容模板里想显示的位置:
<?php echo get_estimated_reading_time(); ?>
如果你想让它自动显示在正文开头,可以改用过滤器:
add_filter( 'the_content', function( $content ) {
if ( is_single() && in_the_loop() && is_main_query() ) {
return '<p class="reading-time">' . get_estimated_reading_time() . '</p>' . $content;
}
return $content;
} );
这样你就能在前台看到和后台逻辑相似、但更适合中文的阅读时间提示了。如果希望精确调整阅读速度,修改代码里的$reading_speed数值即可。