Hello, World!
红猫警长的地窝子

WordPress 中文自动截断

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

利用插件来实现自动截断

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就是标题的长度了,请自行调整。

未经允许不得转载:Mr.Red » WordPress 中文自动截断

分享到:更多 ()

评论 7

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

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

    Hello Beautiful7年前 (2012-02-21)回复
    • 主页不是以摘要形式输出的?

      雷格7年前 (2012-03-07)回复
      • 你好,我用了一个主题,英文截断正常,中文无效,按博主文中的方法后,可以实现截断,但是样式就乱了,找出了主题中可能是截断文章的一段代码,可是我看不懂,博主能否帮忙看一下,怎么让它支持中文?
        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;
        }

        孤风7年前 (2012-04-26)回复
        • 你这个截断不支持中文的,只能用我的,我的这个截断不会输出格式和文章内的样式,如果你需要样式的话,我觉得还是用手动截断吧

          雷格7年前 (2012-04-27)回复
  2. #2

    嗯,全文显示。

    Hello Beautiful7年前 (2012-03-07)回复
  3. #3

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

    leges7年前 (2012-04-18)回复
    • 不客气,我也是本着鲁大爷的拿来主义而已。

      雷格7年前 (2012-04-25)回复