[PHP] [原创]  WordPress OneSocial主题下的估计阅读时间在中文站下显示不准确

Onesocial主题下,博客分类页面,无论篇幅有多长,估计的阅读时间始终为0。如下图:


原因是主题函数 boss_estimated_reading_time 中使用了 str_word_count 作为字数的统计。

PHP代码

function boss_estimated_reading_time( $post_content ) {

	$words	 = str_word_count( strip_tags( $post_content ) );
	$minutes = floor( $words / 120 );
	$seconds = floor( $words % 120 / ( 120 / 60 ) );

	if ( 1 <= $minutes ) {
		$estimated_time = $minutes . __( ' min read', 'onesocial' );
	} else {
		$estimated_time = $seconds . __( ' sec read', 'onesocial' );
	}

	return $estimated_time;
}


str_word_count是以空格作为分词依据,在中文下无效。

找到/buddyboss-inc/theme-functions.php,在大概2706行左右,将函数修改为:

PHP代码

function boss_estimated_reading_time( $post_content ) {

	$words	 = mb_strlen( strip_tags( $post_content ), 'UTF-8' );
	$minutes = floor( $words / 240 );
	$seconds = floor( $words % 240 / ( 240 / 60 ) );

	if ( 1 <= $minutes ) {
		$estimated_time = $minutes . __( ' min read', 'onesocial' );
	} else {
		$estimated_time = $seconds . __( ' sec read', 'onesocial' );
	}

	return $estimated_time;
}


其中240为预计每秒阅读4个字,可根据实际情况修改。

另外在博客分类页中正常显示还需要修改/template-parts/content-blog.php

在最前面添加:

PHP代码

global $post;
$post_content = $post->post_content;


即可正常显示:


发表您的留言