WordPress在不使用任何的插件的情况下是能在首页实现摘要显示的,但它实现起来不是那么方便,或要自己做文章的中间加;或要修改主题中的标签。总之是不太方便吧。要怎样才能让WordPress自动实现在首页等位置(除了单篇文章的其他页面)只显示指定字节数的摘要,而不用操作其他不关文章的事呢?网上有很多方法,但阿柯试了很多都没有效果。这并不是说别人分享代码有误,只是对个别主题并不适合,但“冰古”这个代码,阿柯试用了几个主题,都适合,兼容性很好!
/** * author 冰古 * link https://wanwp.com */ $size = 500; // 500是显示的字节数,可按照自己的要求修改 $more_link_text = 'more...'; // 显示在摘要后面的提示 add_action('the_content', 'control_content_size'); function control_content_size($content) { global $size, $more_link_text; if (is_singular()) return $content; $content = strip_tags($content); $content = cut_str($content, $size); $content = '<p>' . $content . '</p><p><a href="' . get_permalink() . "\" class=\"more-link\">$more_link_text</a></p>"; return $content; } /** * cut_str用于截断包含中文(或其他多字节?)的utf8编码的字符串 * @param string $str utf8编码的字符串 * @param int $len 需要截取的长度(单位是字节) */ function cut_str($str, $len) { if (!isset($str[$len])) { // 判断字符串长度是否已经达到需要截取的长度 // 未达到时,直接输出原字符串 } else { if (seems_utf8($str[$len-1])) // 判断截断字符串的最后一个字符是否是utf8编码的 $str = substr($str, 0, $len); // 如果是utf8编码的,直接截断输出 else { // 如果不是utf8编码的,因为utf8编码的中文是三个字节进行保存的,则判断该字符和周围字符组成的字符串是否符合utf8编码 if(seems_utf8($str[$len-3].$str[$len-2].$str[$len-1])) $str = substr($str, 0, $len-3) . $str[$len-3] . $str[$len-2] . $str[$len-1]; elseif(seems_utf8($str[$len-2].$str[$len-1].$str[$len])) $str = substr($str, 0, $len-2) . $str[$len-2].$str[$len-1].$str[$len]; elseif(seems_utf8($str[$len-1].$str[$len].$str[$len+1])) $str = substr($str, 0, $len-1) . $str[$len-1].$str[$len].$str[$len+1]; else // 这个else应该不用也是可以的 $str = substr($str, 0, $len); } } return $str; }
使用方法:
按照自己的要求修改代码中的$size和$more_link_text
将修改后的代码加入到主题的functions.php中
提示:
如果你之前使用了!–more–标签,在显示中可能有点不好看。
没有评论