新增函數(shù):wordpress獲取文章第一張圖片

在很多模板制作中,朋友們希望獲取文章的第一張圖作為文章列表中文章標題前的圖片展示,今天寫一個函數(shù),用來實現(xiàn)這一效果。通過本函數(shù),你可以在今后的模板設計中,不再考慮什么情況下使用圖片,應該如何調(diào)用文章圖片等問題,只需在恰當?shù)奈恢谜{(diào)用本函數(shù)即可。
代碼
你只需將下面的函數(shù)加入到functions.php中,然后在文章循環(huán)內(nèi)調(diào)用該函數(shù)即可:
function get_post_first_pic($post_id,$default=0,$link=0,$style=''){
$post=get_post($post_id);
$thumb=get_the_post_thumbnail($post_id,array('alt'=>trim(strip_tags($post->post_title)),'title'=>trim(strip_tags($post->post_title))));
if(!$thumb){
preg_match('/<img.+src=[\'"]([^\'"]+)[\'"].* \/>/i',$post->post_content, $index_piclink);
if($index_piclink[1]){
$thumb='<img src="'.$index_piclink[1].'" title="'.$post->post_title.'" alt="'.$post->post_title.'" '.$style.' />';
}else{
if($default!=0)$thumb='<img src="'.get_bloginfo('template_url').'/images/default.jpg" title="'.$post->post_title.'" alt="'.$post->post_title.'" '.$style.' />';
}
}
if($thumb&&$link!=0&&$link!='')$output='<a href="'.get_permalink().'" title="'.$post->post_title.'">'.$thumb.'</a>';
else $output=$thumb;
return $output;
}
function post_first_pic($post_id,$default=0,$link=0,$style=''){
echo get_post_first_pic($post_id,$default,$link,$style);
}

詳解
第一個函數(shù)是獲取函數(shù),第二個函數(shù)則將第一個函數(shù)中獲取的結(jié)果顯示出來。

get_post_first_pic($post_id,$default=0,$link=0,$style='')有四個參數(shù),其中$post_id指要獲取的文章ID,如果再LOOP循環(huán)中,可以直接用$post->ID代替,顯示該文章的第一張圖片;$default用于在該文章沒有圖片的情況下,是否顯示模板目錄下的/images/default.jpg作為替代圖片,非0則使用;$link則表示是否將該圖片鏈接指向文章,如果為0,則不帶鏈接;$style就是對圖片添加新的屬性,如你可以將$style='style="border:none;"';從而添加特定的附屬屬性。

當文章中沒有圖片,$default=0時,則不顯示任何內(nèi)容。
例子
下面是一個調(diào)用的例子:

<?php if(function_exists('post_first_pic'))post_first_pic($post->ID,1,1,'style="width:150px;height:150px;"');?>
<?php the_excerpt(); ?>

上面這段代碼放在while循環(huán)中,將以摘要的形式輸出文章內(nèi)容,并在摘要前面加入一張圖片。


關(guān)于圖片按比例自適應縮放

今天在看視覺規(guī)范的時候,大高走過來說幫他們那邊看一個問題。又是一個關(guān)于自適應的問題。不過,我喜歡。瞄了一下,需求是這樣的:用戶上傳照片,照片的尺寸未知;需要生成一個預覽,這個預覽圖要根據(jù)提供給用戶預覽的區(qū)域自應用,并且居中;如果圖片太大,需要按比例縮放。

居中可以用 text-align:center; 來實現(xiàn)。而按比例縮放,利用預設 <img /> 的 width 、height 屬性解決不了。因為用戶圖片可能是很長的,也可能是很寬的。在線上想了一下他們的關(guān)系,按條件來判斷是這樣的:

if(實際寬度 > 預覽最大寬度)
{
縮放寬度 = 預覽最大寬度
}
if(實際高度 > 預覽最大高度)
{
縮放高度 = 預覽最大高度
}
但是這樣會有問題,比如當寬度和高度都被縮放,如果縮放比較不同,圖片就不是按比例縮放,會變得非常丑。為了讓它按比例縮放,就需要做各種判斷了。那這樣就違背了我們希望程序自動化的原則了。

再想想,雖然不喜歡數(shù)學,但數(shù)學還是很好用的,應該有其他辦法。而既然是按比例縮放,何不用實際圖像和預覽區(qū)域?qū)挾茸鞯谋壤齺碛嬎闼麄冴P(guān)系?hmmmm… 果然 OK。實際上我們永遠都只需要縮放寬度或高度中的其中一個。因為比例只有大和小種情況。具體的,寫一個函數(shù)來實現(xiàn)它吧:

/**
* 圖片按比例自適應縮放
* @param img {Element} 用戶上傳的圖片
* @param maxWidth {Number} 預覽區(qū)域的最大寬度
* @param maxHeight {Number} 預覽區(qū)域的最大高度
*/
var resizeImg = function(img, maxWidth, maxHeight){
var w = img.width,
h = img.height;

// 當圖片比預覽區(qū)域小時不做任何改變
if(w < maxWidth && h < maxHeight) return;

// 當實際圖片比例大于預覽區(qū)域?qū)捀弑壤龝r
// 縮放圖片寬度,反之縮放圖片寬度
w/h > maxWidth/maxHeight ? img.width = maxWidth : img.height = maxHeight;
};

 
  • 本文由 米粒在線 發(fā)表于 2013年2月9日14:19:02
  • 轉(zhuǎn)載請務必保留本文鏈接:http://www.bjmhhq.com/3690.html
網(wǎng)站建設

網(wǎng)站速度很慢?使用 WordPress 短時緩存(Transients)來優(yōu)化數(shù)據(jù)庫查詢和 HTTP 響應!

每個人都想要一個速度很快的網(wǎng)站,網(wǎng)站速度越快,用戶停留和點擊頁面或購買產(chǎn)品的時間就越長,加快網(wǎng)站速度的方法之一是開啟緩存,而緩存背后的邏輯就是存儲信息,更具體一點說,就是找到一個比連接數(shù)據(jù)庫更快的存儲...
百科知道

WordPress文章過多導致網(wǎng)站慢卡頓優(yōu)化方法,禁用SQL_CALC_FOUND_ROWS

當我們使用WordPress作為程序時,如果WordPress網(wǎng)站的文章數(shù)量超過10萬,即使網(wǎng)站服務器的配置很強大,網(wǎng)站的打開速度基本上也會很慢。這時我們就需要對網(wǎng)站進行優(yōu)化。這是因為 Wor...
評論  6  訪客  6
    • ken 0

      請問這個能修改為隨機圖片嗎?

        • 米粒在線

          @ ken http://www.bjmhhq.com/43504.html 可以參考這個。

        • tenda 1

          你好
          想請問一下,可以獲取圖片
          那有辦法可以獲取文章內(nèi)第一條連結(jié)嗎

          例如http://www.google.com.hk
          獲取後 可以自由調(diào)用嗎??

            • 米粒在線 4

              @ tenda @tenda : http://www.bjmhhq.com/4430.html 這是我查到的,你參考下。

            • tenda 1

              版主你好
              這篇文章是GOOGLE搜尋裡唯一有用的調(diào)用圖
              感謝

                • 米粒在線 4

                  @ tenda 不客氣 歡迎到訪

              發(fā)表評論

              匿名網(wǎng)友
              :?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:
              確定

              拖動滑塊以完成驗證