WordPress 的自定義欄位就是文章的 meta 資訊 (元資訊),利用這個功能,可以擴充套件文章的功能,是學習 WordPress 外掛開發和主題深度開發的必備知識,方便給文章儲存一些額外的自定義內容。
自定義欄位不光給外掛開發者使用,WordPress 的特色影像、自定義頁面模板等功能的資訊都儲存在自定義欄位的表單裡邊。
在文章編輯器介面的 「自定義欄目」 板塊可以管理除了名字開頭是 「_」 的欄位 (沒有 「自定義欄目」 板塊請在右上角的 「顯示選項」 開啟),具體原因可以參考 《WordPress 不可見的自定義欄位 》,所以很多 WordPress 自己使用的自定義欄位無法在此管理。
儲存原理
自定義欄位非常靈活,首先來說一下它的儲存原理和為什麼這麼靈活。資料庫中,儲存文章的 wp_posts 表單,只有預設的 20 個專案,用於儲存必須的文章資訊。

而儲存自定義欄位的 wp_postmeta 表,卻只有四個專案,分別是 meta_id(自定義欄位的 ID) 、 post_id(自定義欄位屬於的文章的 ID) 、 meta_key(自定義欄位的名字) 和 meta_value(自定義欄位的值),一般我們只需要注意 meta_key 和 meta_value 兩個專案即可。
正是因為這樣,每篇文章都可以有相同名字但不同值的自定義欄位,而且可以有無限個自定義欄位,任何的外掛和主題都可以利用自定義欄位對文章資訊進行擴充套件。
一篇文章的自定義欄位的名字是可以重複的。
新增欄位
自定義欄位可以在文章編輯頁面操作,但本文主要寫關於開發的事情。

新增自定義欄位,可以使用 add_post_meta() 函式:
|
1 |
add_post_meta($post_id,$meta_key,$meta_value,$unique); |
引數:
$post_id
(整數)(必須) 新增自定義欄位的文章的 ID.
預設值:None
$meta_key
(字串)(必須) 自定義欄位的名稱。
預設值:None
$meta_value
(混合)(必須) 自定義欄位的值。
預設值:None
$unique
(布林)(可選) 如果已經有相同名字的欄位,是否重複新增。 True 允許;False 不允許。
預設值:False
更新欄位
要更新一個欄位的值,可以使用 update_post_meta() 函式:
|
1 |
update_post_meta($post_id,$meta_key,$meta_value,$prev_value); |
引數:
$post_id
(整數)(必須) 更新自定義欄位的文章的 ID.
預設值:None
$meta_key
(字串)(必須) 更新的自定義欄位的名稱。
預設值:None
$meta_value
(混合)(必須) 更新的自定義欄位的值。
預設值:None
$prev_value
(混合)(可選) 此引數只有在一篇文章有多個相同名稱的自定義欄位時才有用。如果留空,則更新所有同名的欄位,否則則更新和此引數值相同的值的欄位。
預設值:空字串
獲取欄位
獲取欄位可以使用 get_post_meta() 函式:
|
1 |
get_post_meta($post_id,$key,$single); |
引數:
$post_id
(整數)(必須) 要獲取欄位的文章 ID,如果在迴圈中,可以使用 get_the_ID() 來設定。
預設值:None
$key
(字串)(可選) 要獲取的欄位的名稱。
預設值:None
$single
(布林)(可選) 如果為 True 則返回一個字串;如果為 False 則返回陣列,且相同鍵值的自定義欄位的值會按照新增順序組合成一個序列陣列。
預設值:False
例子
下邊是一個瀏覽統計的簡單例子:
|
functionBing_statistics_visitors($cache=false){ if(!is_singular())return; global$post; $id=$post->ID; if(get_post($id)->post_status!='publish')return; $post_views=(int)get_post_meta($id,'views',true); update_post_meta($id,'views',($post_views+1))||add_post_meta($id,'views',1,true); } add_action('wp_head','Bing_statistics_visitors'); |
獲取計數:
|
functionBing_get_views(){ global$post; $views=number_format((int)get_post_meta($post->ID,'views',true)); return$views; } |
更多的函式和用法請訪問官方檔案:http://codex.WordPress.org/Custom_Fields