WordPress 摘要有两种显示方式:
一种是通过写文章的时候在其中加入标签,然后在模板中使用the_conten(“阅读更多…”),这个函数将会读出你的post直到<!—more–>处断掉输出。缺点:需要在每篇文章中加入<!—more–>标签;
另外一种方法就是在模板中直接利用the_excerpt()函数,这个函数将会自动取出你文章的部分内容,并且以本文的格式输出。缺点:文字都堆积在一起,阅读性差。
下面教大家如何自定义文章摘要显示和长度,解决以上问题。
function the_blog_excerpt($content, $size = 500, $echo = true) { $out = ''; $_size = mb_strlen($content, 'utf-8'); if ($_size <= $size) { $out = $content; } else if (strpos($content, '<') === false) { $out = mb_substr($content, 0, $size); } else if ($e = strpos($content, '')) { $out = mb_substr($content, 0, $e); } else { $strlen_var = strlen($content); $html_tag = 0; $summary_string = ''; $html_array = array('left' => array(), 'right' => array()); for ($i = 0; $i < $strlen_var; ++$i) { if (!$size) { break; } $current_var = substr($content, $i, 1); if ($current_var == '<') { $html_tag = 1; $html_array_str = ''; } else if ($html_tag == 1) { if ($current_var == '>') { $html_array_str = trim($html_array_str); if (substr($html_array_str, -1) != '/') { $f = substr($html_array_str, 0, 1); if ($f == '/') { $html_array['right'][] = str_replace('/', '', $html_array_str); } else if ($f != '?') { if (strpos($html_array_str, ' ') !== false) { $html_array['left'][] = strtolower(current(explode(' ', $html_array_str, 2))); } else { $html_array['left'][] = strtolower($html_array_str); } } } $html_array_str = ''; $html_tag = 0; } else { $html_array_str .= $current_var; } } else { --$size; } $ord_var_c = ord($content {$i}); switch (true) { case(($ord_var_c & 0xE0) == 0xC0) : $summary_string .= substr($content, $i, 2); $i += 1; break; case (($ord_var_c & 0xF0) == 0xE0) : $summary_string .= substr($content, $i, 3); $i += 2; break; case (($ord_var_c & 0xF8) == 0xF0) : $summary_string .= substr($content, $i, 4); $i += 3; break; case (($ord_var_c & 0xFC) == 0xF8) : $summary_string .= substr($content, $i, 5); $i += 4; break; case (($ord_var_c & 0xFE) == 0xFC) : $summary_string .= substr($content, $i, 6); $i += 5; break; default: $summary_string .= $current_var; } } if ($html_array['left']) { $html_array['left'] = array_reverse($html_array['left']); foreach($html_array['left'] as $index => $tag) { $key = array_search($tag, $html_array['right']); if ($key !== false) { unset($html_array['right'][$key]); } else { if (strpos(substr($content, $i), ''.$tag.'>') === false) { $summary_string .= ''.$tag.'>'; } else { while ($html_array_str != $tag) { $current_var = substr($content, $i, 1); $i++; if ($current_var == '<') { $html_tag = 1; $html_array_str = ''; } else if ($html_tag == 1) { if ($current_var == '>') { $html_array_str = ''; $html_tag = 0; } else { $html_array_str .= $current_var; $f = substr($html_array_str, 0, 1); if ($f == '/') { $html_array_str = str_replace('/', '', $html_array_str); } } } $summary_string .= $current_var; if ($html_array_str == $tag) { $summary_string .= '>'; $i = $i + 1; break; } } } } } } $out = $summary_string; } if ($echo) echo $out; return $out; }
该函数自动提前文章内容前500字符作为摘要,保留html格式并修复被切断的HTML标签。具体可以在我的博客查看效果。
$size:自定义显示长度
复制该函数到主题的functions.php文件中。
在需要显示摘要的地方调用以上代码即可。
按照你的方法试了,为什么显示的是全文?
好文章 分享了…… 😆
哈楼,顶群主