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