關(guān)于WordPress文章摘要截取的方案,,網(wǎng)上有很多教程,。從Wordpress內(nèi)置摘要,,然后便是既好用又方便的more標(biāo)簽截取,,再就是使用php自身的mb_strimwidth函數(shù)截取... 此三種方案,,都可以在一定程度上解決問題,。但是這些都不能完美的解決問題,,都不怎么好用,,下面就告訴大家一個(gè)相對(duì)比較完美的解決辦法:
第一步、加工 more標(biāo)簽,,代碼如下:
<?phpfunction my_more_link($link){//禁止more標(biāo)簽自動(dòng)跳轉(zhuǎn)$link=preg_replace('/#more-\d+/i','',$link);//我在more標(biāo)簽的外圍加了一層 p, 用以更方便地自定義more標(biāo)簽在頁面中的顯示(使用 p.read-more)$link=str_replace('<a','<p class="read-more"><a rel="nofollow" title="繼續(xù)閱讀: '.get_the_title($post->post_title).'"',$link);//閉合新包裹的 p$link=str_replace('</a>','</a></p>',$link);return $link;}add_filter('the_content_more_link','my_more_link');//把函數(shù)追加入主題?>
以上, 應(yīng)是添加入主題的 function.php, 略有注釋. 整個(gè) more標(biāo)簽, 我新增了 nofollow 與 title="文章標(biāo)題" 的屬性. 這些屬性當(dāng)可任君修改, your style~
第二步,、加工完整方案。
嗯, 這廂以下才是正題...
我的想法是, 首先判斷 內(nèi)置摘要, 如果有就直接顯示, 否則進(jìn)入下一判斷, 是否存在 more標(biāo)簽. 最后才是使用php自身的 mb_strimwidth 函數(shù)截?cái)唷?/p>
實(shí)現(xiàn)的全部代碼如下(基于第一步中的操作):
<?php //這是為了在單篇文章(或頁面)直接顯示全部內(nèi)容,而不使用以下的判斷if(is_singular()){the_content();}else{//定義兩個(gè)$$pc=$post->post_content;$st=strip_tags(apply_filters('the_content',$pc));//判斷是否存在 內(nèi)置摘要if(has_excerpt())the_excerpt();elseif(preg_match('/<!--more.*?-->/',$pc) || mb_strwidth($st)<300)the_content('Read more »');//否則...以下elseif(function_exists('mb_strimwidth'))//判斷是否支持mb_strimwidth函數(shù)echo'<p>'//mb_strimwidth截?cái)嗪蟮玫降氖羌兾谋? 所以我給它包了一層 p.mb_strimwidth($st,0,300,' ...')//對(duì)文本內(nèi)容截?cái)? 從位置0開始往后截取300長度, 超出部分以點(diǎn)點(diǎn)點(diǎn)替代.'</p><p class="read-more"><a title="'//給截?cái)嗟膬?nèi)容添加一個(gè)與 STEP 1 完全一模一樣的"more標(biāo)簽"....the_title("繼續(xù)閱讀: ","",false)//注意這里與第一步相比, 使用了另一個(gè)函數(shù)來獲取標(biāo)題.'" rel="nofollow" href="'.post_permalink().'" class="more-link">Read more »</a></p>';else the_content();//最后沒有選擇的選擇...}?>
以上便是整個(gè)過程了, 把 STEP 2 的全部代碼拷貝, 然后找到主題循環(huán)部分, 以之替換類似 <?php the_content(); ?>" 的存在即可,。
至此, 我使用的文章摘要與截?cái)喾桨?便算完成了, 若有不當(dāng)之處, 還請(qǐng)不吝留言指教~感恩啦~
注1: 使用 mb_strimwidth 倘若出現(xiàn)亂碼, 請(qǐng)自行 Google 之...
注2: 使用 mb_strimwidth 會(huì)強(qiáng)制截?cái)鄅tml代碼塊而導(dǎo)致格式亂套, 所以最好還是手動(dòng)設(shè)置 more標(biāo)簽, 或者只將其用于純文字的文章.
注3: 若php文件中寫入了中文字符, 請(qǐng)保存為 utf8-no-bom 格式.