其實我個人并不是很喜歡這種摘要的顯示方式,但是這個方法用起來比較方便而已。
WordPress是有摘要功能的,寫文章的時候填寫一些摘要是一個很好的習慣,我主題設置摘要給搜索引擎看的。
不過并不是很多人在發表文章的時候填寫這個摘要,所以我也一直糾結是否在主題設計的時候首選使用摘要模式。
網上使用摘要的代碼大多是這樣的
<?php if(!is_single()) {
the_excerpt();
} else {
the_content(__('(more...)'));
} ?>
首選顯示摘要,如果沒有摘要則顯示全部文章,話說顯示全部文章肯定是不給力的,萬一一篇文章很長怎么辦,首頁能放幾篇文章?
今天看到一篇很好的文章,解決了這一問題,文章想到了我所想要的,非常不錯。較完美的WordPress文章摘要(截斷)方案
首先顯示摘要,如果沒有摘要的則顯示用more標簽截斷的,如果沒有more標簽則顯示文章截取多少字的,如果主機不支持mb_strimwidth函數截斷,則才顯示全文。
大家覺得這種顯示方法怎么樣,如果大家覺得OK,我新版的主題將使用這個作為首頁文章摘要了。
<?php //這是為了在單篇文章(或頁面)直接顯示全部內容,而不使用以下的判斷
if(is_singular()){the_content();}else{
//定義兩個$
$pc=$post->post_content;
$st=strip_tags(apply_filters('the_content',$pc));
//判斷是否存在 內置摘要
if(has_excerpt())
the_excerpt();
/*使用正則表達式嘗試匹配more標簽,
并判斷如果存在more標簽, 或者正文內容長度小于300, 則直接以more標簽方式顯示,
即是說, 有more便顯示more, 沒more且長度小于300則直接顯示全文.
我使用了mb_strwidth來判斷長度.
*/
elseif(preg_match('/<!--more.*?-->/',$pc) || mb_strwidth($st)<300)
the_content('Read more »');
//否則...以下
elseif(function_exists('mb_strimwidth'))//判斷是否支持mb_strimwidth函數
echo'<p>'//mb_strimwidth截斷后得到的是純文本, 所以我給它包了一層 p
.mb_strimwidth($st,0,300,' ...')//對文本內容截斷, 從位置0開始往后截取300長度, 超出部分以點點點替代
.'</p><p class="read-more"><a title="'//給截斷的內容添加一個與 STEP 1 完全一模一樣的"more標簽"...
.the_title("繼續閱讀: ","",false)//注意這里與 STEP 1 相比, 使用了另一個函數來獲取標題
.'" rel="nofollow" href="'
.post_permalink()
.'" class="more-link">Read more »</a></p>';
else the_content();//最后沒有選擇的選擇...
}?>