wordpress 縮略圖功能函數 the_post_thumbnail


很多 WordPress 主題,特別是那些雜志型的主題,會給每篇日志加上一張縮略圖,這種展現方式一般用在首頁,可能單獨出現,或者和日志摘要一起。但是目前位置沒有一個標准的方法去實現日志縮略圖,很多主題是使用 WordPress 自定義字段來實現日志縮略圖功能,這樣的設置比較復雜,雖然我在制作的很多 WordPress 項目中都是用這個方法,並且設置了直接上傳縮略圖的方法,但是還是略顯麻煩。

從 WordPress 2.9 開始,WordPress 開始內置了日志縮略圖的功能,並且提供了詳細的接口讓主題的作者設置和調用日志的縮略圖。

第一步:讓主題支持縮略圖功能

首先確保你的wordpress版本在2.9之上,然后在你的當前主題文件夾中找到並編輯functions.php文件,加入下面這句代碼

1
2
3
4
<?php
if ( function_exists( 'add_theme_support' ) ) 
     add_theme_support( 'post-thumbnails' );
?>

(注:主題文件夾都保存在wp-content/themes/目錄下)

這樣當你在后台編輯文章的時候,右邊的分類目錄下面就會多出一個“文章縮略圖”模塊。

文章縮略圖模塊

點擊“設置縮略圖”就可以該文章添加縮略圖了。

點擊"用作縮略圖"

記得在添加圖片的時候要點擊下面的“用作縮略圖”。

第二步:使用縮略圖

在需要顯示縮略圖的地方調用the_post_thumbnail函數,比如你想在首頁為每篇文章顯示縮略圖,可以在index.php文件中加入下面這樣的代碼

1
2
3
4
<?
  php if ( function_exists( 'the_post_thumbnail' ) ) 
           the_post_thumbnail( 'thumbnail' );
?> 

這樣就能顯示縮略圖了,其中參數”thumbnail”表示縮略圖顯示的大小。wordpress預置了4種大小,你可以使用下面的4個參數來替換’thumbnail’,當然不同的台數顯示的圖片大小也不同

Ø Thumbnail (縮略圖尺寸)

Ø Medium (中等尺寸)

Ø Large (大尺寸)

Ø Full (原始尺寸)

具體尺寸大小可以在后台“設置”中的“媒體”選項中進行設置

媒體選項

你可以設置3種不同的大小,以方便在不同的情況下使用。

至此你的主題已經支持縮略圖功能並可以靈活使用了。

下面我將介紹一下更高級的應用技巧。

自定義縮略圖尺寸的三種方法

方法一:后台設置

就是上面提到的方法,不過這種方法只設置3種大小。

方法二:自定義

在調用the_post_thumbnail函數的時候,可以直接指定縮略圖的大小

1
the_post_thumbnail( array (200,200)); // 顯示200X200尺寸的縮略圖 

這種方法的優點的靈活,可以隨時通過代碼的調用顯示不同尺寸的圖片,缺點是修改有點麻煩,如果你有多處這樣的代碼,修改起來就要把每一處代碼都要修改掉。

方法三:增加預置尺寸

通過前面的介紹我們已經知道,wordpress為我們預置了三種可以設置的尺寸。可不可以再增加一些預置的尺寸呢?當然可以,我們要用到的函數是add_image_size。比如我們想在首頁和分類頁面使用不同的縮略圖大小,就可以先預置homepage-thumb和category-thumb這兩大小。方法是在functions.php文件中加入以下代碼

1
2
3
4
if ( function_exists( 'add_image_size' ) ){ 
     add_image_size( 'category-thumb' , 200, 200 ); // 預置一個名為’category-thumb’,200*200的縮略圖大小 
     add_image_size( 'homepage-thumb' , 220, 180); //預置一個名為’homepage-thumb’,220*180的縮略圖大小 

之后就可以在首頁調用

1
the_post_thumbnail(‘homepage-thumb’); 

顯示220*180的縮略圖

在分類頁面調用

1
the_post_thumbnail(‘category-thumb’); 

則顯示200*200的縮略圖。

定義縮略圖的樣式

首先我們先來看一下the_post_thumbnail函數輸出的html是什么樣的

1
2
class = "attachment-thumbnail wp-post-image" alt= "" title= "screenshot" /> 

由此可以看出,我們可以用css定義類attachment-thumbnail的樣式就可以了。

但是如果我想分別為首頁和分類頁面定義不同的樣式,該怎么做呢?

方法一是增加一個div,針對不同的div定義不同的樣式,在此不多做介紹。

我要介紹的是另一種方法:給縮略圖添加屬性

你可以測試一下,如果把the_post_thumbnail(“thumbnail”)修改為下面這樣的代碼,看看輸出的html結果是什么?

1
the_post_thumbnail(‘thumbnail’, array (‘ class ’ => ‘homepage-thumb’));

我這邊輸出的html為

1
2
class = "homepage-thumb wp-post-image" alt= "" title= "screenshot" /> 

可以和之前的html對比一下,不難發現class屬性變成了我們設置的’homepage-thumb’。可以通過這種方法,把首頁縮略圖和分類頁面的縮略圖設置為不同的class屬性。

改變the_post_thumbnail的html輸出

我們可以使用filter來改變縮略圖的html輸出結果,下面的這段代碼為縮略圖加了一個文章鏈接

1
2
3
4
5
add_filter( 'post_thumbnail_html' , 'my_post_image_html' , 10, 3 ); 
function my_post_image_html( $html , $post_id , $post_image_id ) { 
     $html = '<a href="' . get_permalink( $post_id ) . '" title="' . esc_attr( get_post_field( 'post_title' , $post_id ) ) . '">' . $html . '</a>'
     return $html

當你點擊縮略圖的時候就會跳轉到相應的文章內頁。

檢測文章是否有縮略圖

一個良好的習慣就是在調用the_post_thumbnail函數之前,先檢測一下該文章有沒有設置縮略圖,檢測的方法是調用has_post_thumbnail函數,代碼如下

1
2
<?php if ( has_post_thumbnail() ) 
     the_post_thumbnail( 'thumbnail' );?>

結合本站之前的提取文章內圖片做為縮略圖的方法,現在可以合二為一:首先判斷文章有沒有設置縮略圖,如果有就直接顯示,如果沒有再提取文章內的圖片為縮略圖。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/* 
  
* 縮略圖
  
*/ 
   
function dm_the_thumbnail() { 
   
     global $post
   
     // 判斷該文章是否設置的縮略圖,如果有則直接顯示 
   
     if ( has_post_thumbnail() ) { 
   
         echo '<a href="' .get_permalink(). '" title="閱讀全文">'
   
         the_post_thumbnail( 'thumbnail' ); 
   
         echo '</a>'
   
     } else { //如果文章沒有設置縮略圖,則查找文章內是否包含圖片 
   
         $content = $post ->post_content; 
   
         preg_match_all( '/<img.*?(?: |\\t|\\r|\\n)?src=[\'"]?(.+?)[\'"]?(?:(?: |\\t|\\r|\\n)+.*?)?>/sim' , $content , $strResult , PREG_PATTERN_ORDER); 
   
         $n = count ( $strResult [1]); 
   
         if ( $n > 0){ // 如果文章內包含有圖片,就用第一張圖片做為縮略圖 
   
             echo '<a href="' .get_permalink(). '" title="閱讀全文"><img src="' . $strResult [1][0]. '" alt="縮略圖" /></a>'
   
         } else { // 如果文章內沒有圖片,則用默認的圖片。 
   
             echo '<a href="' .get_permalink(). '" title="閱讀全文"><img src="' .get_bloginfo( 'template_url' ). '/imgs/default_thumbnail.jpg" alt="縮略圖" /></a>'
   
        
   
    
   

有興趣的朋友可以把以上代碼復制到functions.php文件中,然后調用dm_the_thumbnail()即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM