处理truncate_post函数文章摘要只显示…的问题

处理truncate_post函数文章摘要只显示…的问题

主题中部分文章摘要只显示“…”,主题设置中没有相关设置,折腾了一阵一点一点查代码,发现是一个自定义函数“truncate_post”的问题。
首先在entry.php定位到输出文章摘要的代码为:

这里的“400”是指读取文章内容前面400个字符作为文章摘要,一个中国字相当于2个字符,字符数最好设置为偶数,否则最后一个就是乱码。
再查找“truncate_post”函数,在custom_functions.php文件中,代码为:

function truncate_post($amount,$echo=true) {
global $post, $shortname;

$postExcerpt = '';
$postExcerpt = $post->post_excerpt;

if (get_option($shortname.'_use_excerpt') == 'on' && $postExcerpt <> '') {
if ($echo) echo $postExcerpt;
else return $postExcerpt;
} else {
$truncate = $post->post_content;

$truncate = preg_replace('@\]*?\].*?\[\/caption]@si', '', $truncate);

if ( strlen($truncate) <= $amount ) $echo_out = ''; else $echo_out = '...'; $truncate = apply_filters('the_content', $truncate); $truncate = preg_replace('@]*?>.*?@si', '', $truncate);
$truncate = preg_replace('@]*?>.*?

@si', '', $truncate);

$truncate = strip_tags($truncate);

if ($echo_out == '...') $truncate = substr($truncate, 0, strrpos(substr($truncate, 0, $amount), ','));
else $truncate = substr($truncate, 0, $amount);

if ($echo) echo $truncate,$echo_out;
else return ($truncate . $echo_out);
};
}

问题就出在:
if ($echo_out == '...') $truncate = substr($truncate, 0, strrpos(substr($truncate, 0, $amount), ' '));
这句代码的意思是文章字数如果大于$amount($amount就是前面设置的“400”)。则截取从开头到$amount(第400字符)之间的最后一个空格之间的文字作为文章摘要。
截取的是空格,西欧语言里不可能没有空格,而中文字里不一定会有空格,所以就只能输出“…”。
中文中一般都会有“,”,变态文章除外……
将代码修改为:
if ($echo_out == '...') $truncate = substr($truncate, 0, strrpos(substr($truncate, 0, $amount), ','));
问题解决。
为了阅读时好看也可以改成用“。”截取,保证文章摘要是完整的句子,但是$amount就要足够大,防止设置的字符数“400”还不够一句话。但是这样也有一点不方便就是因为一句话会比较长导致文章摘要有的长有的短差距比较大,对主题整体美观不利。总之自己选择吧。

Leave a Comment

You must be logged in to post a comment.