WordPress 中文自动截断

分享 · 2011-02-02

今天启用了新的主题,这款主题自带自动截断功能,但是由于这款主题是由老外制作的,所以并没有考虑到中文的特殊性,自动截断经常不理想,相信很多朋友们都遇到过类似情况。那么就让我们一起学习一下以下几种方法来自动截断中文吧。

利用插件来实现自动截断

Advanced Excerpt
这款插件需要用这个标签来调用。在后台选项中可以设置截断内容的大小,也就是字数(中文博客选用)和单词数。一般情况下,wordpress在输出摘要内容的时候是不会显示HTML代码的,这款插件可以在后台选择显示哪些代码。

WP Limit Posts Automatically
同样是一款非常强大的自动截断插件,不仅能设置以字数和单词数来截断,同样还支持只输出第一段。在后台中能控制自动截断哪些页面(首页、存档页、分类页、搜索结果页)。这款插件也可以支持禁用图片、视频等可能会造成冲突的代码。

非插件实现自动截断

将以下代码

post_content)), 0, 300,"..."); ?>

替换至你的wordpress主题模板文件中适当的位置。其中300是数字,可以自己控制。

文章标题自动截断

当某些文章的标题过长,使博客看起来不美观,我们就需要用到文章标题自动截断,这里提供一个比较理想的方法。

首先将下面的代码添加到wordpress主题functions.php模板文件中

//文字截断
function cut_str($src_str,$cut_length)
{
$return_str='';
$i=0;
$n=0;
$str_length=strlen($src_str);
while (($n<$cut_length) && ($i<=$str_length))
{
$tmp_str=substr($src_str,$i,1);
$ascnum=ord($tmp_str);
if ($ascnum>=224)
{
$return_str=$return_str.substr($src_str,$i,3);
$i=$i+3;
$n=$n+2;
}
elseif ($ascnum>=192)
{
$return_str=$return_str.substr($src_str,$i,2);
$i=$i+2;
$n=$n+2;
}
elseif ($ascnum>=65 && $ascnum<=90)
{
$return_str=$return_str.substr($src_str,$i,1);
$i=$i+1;
$n=$n+2;
}
else
{
$return_str=$return_str.substr($src_str,$i,1);
$i=$i+1;
$n=$n+1;
}
}
if ($i<$str_length)
{
$return_str = $return_str . '';
}
if (get_post_status() == 'private')
{
$return_str = $return_str . '(private)';
}
return $return_str;
}

再用下面的代码

post_title,32); ?>

替换主题模板文件中类似以下代码的部分

其中32就是标题的长度了,请自行调整。

WordPress
  1. leges 2012-04-19

    文章截断那段代码碉堡了,又省了一个插件,感谢感谢

    1. 雷格 (作者)  2012-04-25
      @leges

      不客气,我也是本着鲁大爷的拿来主义而已。

  2. Hello Beautiful 2012-03-07

    嗯,全文显示。

  3. Hello Beautiful 2012-02-21

    英文主题,默认自动截断,但对中文文章无效,添加手动截断也无效,是什么原因呢?

    1. 雷格 (作者)  2012-03-07
      @Hello Beautiful

      主页不是以摘要形式输出的?

      1. 孤风 2012-04-27
        @雷格

        你好,我用了一个主题,英文截断正常,中文无效,按博主文中的方法后,可以实现截断,但是样式就乱了,找出了主题中可能是截断文章的一段代码,可是我看不懂,博主能否帮忙看一下,怎么让它支持中文?
        function limit_content($content_length = 250, $allowtags = true, $allowedtags = '') { global $post; $content = $post->post_content; //since version 2.6.5 development 7, remove shortcodes from content. $content = strip_shortcodes($content); $content = apply_filters('the_content', $content); if (!$allowtags){ $allowedtags .= ''; $content = strip_tags($content, $allowedtags); } $wordarray = explode(' ', $content, $content_length + 1); if(count($wordarray) > $content_length) : array_pop($wordarray); array_push($wordarray, '...'); $content = implode(' ', $wordarray); $content = force_balance_tags($content); endif; echo $content; }

        1. 雷格 (作者)  2012-04-28
          @孤风

          你这个截断不支持中文的,只能用我的,我的这个截断不会输出格式和文章内的样式,如果你需要样式的话,我觉得还是用手动截断吧

Theme Jasmine by Kent Liao