WordPress使用MySQL數據庫。數據表結構與常規有些差異,數據內容有常規的以數據表方式記錄,也有以數據元方式記錄,數據元方式在直接查看時不太直觀。
想成爲一個開發者,我們必須掌握WordPress數據庫的基本結構,並在自己的插件或主題中使用他們,寫入或讀出數據。
一、數據表
截至WordPress4.52版本,WordPress一共有以下12個表。這裏加上了默認的表前綴 wp_
- ◉ wp_commentmeta:存儲評論的元數據
- ◉ wp_comments:存儲評論
- ◉ wp_links:存儲友情鏈接
- ◉ wp_options:存儲WordPress系統選項和插件、主題配置
- ◉ wp_postmeta:存儲文章(包括頁面、上傳文件、修訂)的元數據
- ◉ wp_posts:存儲文章(包括頁面、上傳文件、修訂)
- ◉ wp_terms:存儲每個目錄、標籤
- ◉ wp_termmeta:存儲每個目錄、標籤的ID,key,value
- ◉ wp_term_relationships:存儲每個文章、鏈接和對應分類的關係
- ◉ wp_term_taxonomy:存儲每個目錄、標籤所對應的分類
- ◉ wp_usermeta:存儲用戶的元數據
- ◉ wp_users:存儲用戶
二、數據表結構
下面我們再詳細瞭解各個表中的子項
wp_categories:
用於保存分類相關信息的表。包括了5個字段,分別是:
◈ cat_ID – 每個分類唯一的ID號,爲一個bigint(20)值,且帶有附加屬性auto_increment。
◈ cat_name – 某個分類的名稱,爲一個varchar(55)值。
◈ category_nicename – 指定給分類的一個便於記住的名字,也就是所謂的slug,這是一個varchar(200)值。
◈ category_description – 某個分類的詳細說明,longtext型值。
◈ category_parent – 分類的上級分類,爲一個int(4)值,對應是的當前表中的cat_ID,即wp_categories.cat_ID。無上級分類時,這個值爲0。
wp_comments:
用於保存評論信息的表。包括了15個字段,分別爲:
◊ comment_ID – 每個評論的唯一ID號,是一個bigint(20)值。帶有附加屬性auto_increment。
◊ comment_post_ID – 每個評論對應的文章的ID號,int(11)值,等同於wp_posts.ID。
◊ comment_author – 每個評論的評論者名稱,tinytext值。
◊ comment_author_email – 每個評論的評論者電郵地址,varchar(100)值。
◊ comment_author_url – 每個評論的評論者網址,varchar(200)值。
◊ comment_author_IP – 每個評論的評論者的IP地址,varchar(100)值。
◊ comment_date – 每個評論發表的時間,datetime值(是加上時區偏移量後的值)。
◊ comment_date_gmt – 每個評論發表的時間,datetime值(是標準的格林尼治時間)。
◊ comment_content – 每個評論的具體內容,text值。
◊ comment_karma – 不詳,int(11)值,默認爲0。
◊ comment_approved – 每個評論的當前狀態,爲一個枚舉值enum(’0′,’1′,’spam’),0爲等待審覈,1爲允許發佈,spam爲垃圾評論。默認值爲1。
◊ comment_agent – 每個評論的評論者的客戶端信息,varchar(255)值,主要包括其瀏覽器和操作系統的類型、版本等資料。
◊ comment_type – 不詳,varchar(20)值。
◊ comment_parent – 某一評論的上級評論,int(11)值,對應wp_comment.ID,默認爲0,即無上級評論。
◊ user_id – 某一評論對應的用戶ID,只有當用戶註冊後纔會生成,int(11)值,對應wp_users.ID。未註冊的用戶,即外部評論者,這個ID的值爲0。
wp_linkcategories:
用於保存在WP後臺中添加的鏈接的相關信息的表。包括13個字段:
◈ cat_id – 每個鏈接分類的唯一ID,bigint(20)值,爲一個自增量auto_increment。
◈ cat_name – 每個鏈接分類的名字,tinytext值。
◈ auto_toggle -這個字段所包含的是一個比較特別的屬性。如果爲Y,則當該分類中加入了新鏈接時,其它的鏈接會變爲不可見。它是一個枚舉型的值enum(’Y’,’N’),默認爲N。
◈ show_images – 該字段也是枚舉值enum(’Y’,’N’),默認爲Y。用戶指定是否允許在該鏈接分類顯示圖片鏈接。
◈ show_description – 該字段指定相應的鏈接分類下的鏈接,是否再專門[換行]顯示它們的說明,這是一個枚舉型值enum(’Y’,’N’),默認爲N,即不顯示說明(但會通過title屬性中顯示說明)。
◈ show_rating – 顯示該分類下鏈接的等級。它也是一個枚舉值enum(’Y’,’N’),默認爲Y。此時,你可以用鏈接等級的方式來對該鏈接分類下的鏈接進行排序。
◈ show_updated – 指定該鏈接分類有更新是,是否進行顯示,枚舉值enum(’Y’,’N’),默認爲Y。
◈ sort_order – 指定該鏈接分類中鏈接的排序依據,varchar(64)值。一般用鏈接的名字(name,即wp_links.link_name)或ID(id,即wp_links.link_id)。
◈ sort_desc – 指定鏈接分類的排序方式,枚舉值enum(’Y’,’N’),默認爲N,即用降序。
◈ text_before_link – 該鏈接分類下每個鏈接的前置html文本,varchar(128)值,默認是’列表開始標籤’。
◈ text_after_link – 該鏈接分類下每個鏈接的中,鏈接與說明文字(wp_links.link_description)之間的html文本,varchar(128)值,默認是’換行標籤’。
◈ text_after_all – 該鏈接分類下每個鏈接的後置html文本,varchar(128)值,默認是’列表結束標籤’。
◈ list_limit – 用於規定某一鏈接分類中顯示的(可設定的?)鏈接的個數,int(11)值,默認爲-1,即對鏈接分類下鏈接的個數無限制。
wp_links :
用於保存用戶輸入到Wordpress中的鏈接(通過Link Manager)的表。共14個字段:
◊ link_id – 每個鏈接的唯一ID號,bigint(20)值,附加屬性爲auto_increment。
◊ link_url – 每個鏈接的URL地址,varchar(255)值,形式爲http://開頭的地址。
◊ link_name – 單個鏈接的名字,varchar(255)值。
◊ link_image – 鏈接可以被定義爲使用圖片鏈接,這個字段用於保存該圖片的地址,爲varchar(255)值。
◊ link_target – 鏈接打開的方式,有三種,_blank爲以新窗口打開,_top爲就在本窗口中打開並在最上一級,none爲不選擇,會在本窗口中打開。這個字段是varchar(25)值。
◊ link_category – 某個鏈接對應的鏈接分類,爲int(11)值。相當於wp_linkcategories.cat_id。
◊ link_description – 鏈接的說明文字。用戶可以選擇顯示在鏈接下方還是顯示在title屬性中。varchar(255)值。
◊ link_visible – 該鏈接是否可以,枚舉enum(’Y’,’N’)值,默認爲Y,即可見。
◊ link_owner – 某個鏈接的創建人,爲一int(11)值,默認是1。(應該對應的就是wp_users.ID)
◊ link_rating – 鏈接的等級,int(11)值。默認爲0。
◊ link_updated – 鏈接被定義、修改的時間,datetime值。
◊ link_rel – 鏈接與定義者的關係,由XFN Creator設置,varchar(255)值。
◊ vlink_notes – 鏈接的詳細說明,mediumtext值。
◊ link_rss – 該鏈接的RSS地址,varchar(255)值。
wp_options:
用於保存Wordpress相關設置、參數的表,共11個字段。最重要是的option_value字段,裏面包括了大量的重要信息。
◈ option_id – 選項的ID,bigint(20)值,附加auto_increment屬性。
◈ blog_id – 不詳。或許用在單在用戶的WP版本上並不重要吧,或許是針對不同用戶的Blog來設置的一個值。int(11)值,默認爲0,即當前blog。
◈ option_name – 選項名稱,varchar(64)值。
◈ option_can_override – 該選項是否可被重寫、更新,枚舉enum(’Y’,’N’)值,默認爲Y,即可被重寫、更新。
◈ option_type – 選項的類型,作用不詳,int(11)值,默認爲1。
◈ option_value – 選項的值,longtext值,這個字段的內容比較重要。Wordpress初始化時就會設定好約70個默認的值,這裏暫不介紹。
◈ option_width – 選項的寬(?),作用不詳。int(11)值,默認爲20。
◈ option_height – 選項的高(?),作用不詳。int(11)值,默認爲8。
◈ option_description – 針對某個選項的說明,tinytext值。
◈ option_admin_level – 設定某個選項可被操縱的用戶等級(詳情見我的相關文章),int(11)值,默認爲1。
◈ autoload – 選項是否每次都被自動加載,枚舉enum(’yes’,’no’)值,默認爲yes。
wp_postmeta:
用於保存文章的元信息(meta)的表,四個字段:
◊ meta_id – 元信息ID,bigint(20)值,附加屬性爲auto_increment。
◊ post_id – 文章ID,bigint(20)值,相當於wp_posts.ID。
◊ meta_key – 元信息的關鍵字,varchar(255)值。
◊ meta_value – 元信息的值,text值。這些內容主要是在文章及頁面編輯頁(Write Post, Write Page)的”Add a new custom field to this post(page):”下進行設定的。meta_key就對應名爲”key”的下拉列表中的項,而值由用戶自己填上(某些時候,wp也會自動加入,如文章中有的音頻媒體)。
wp_posts:
用於保存你所有的文章(posts)的相關信息的表,非常的重要。一般來講,它存儲的數據是最多的。一共包括了21個字段。
◈ ID – 每篇文章的唯一ID,bigint(20)值,附加屬性auto_increment。
◈ post_author – 每篇文章的作者的編號,int(4)值,應該對應的是wp_users.ID。
◈ post_date – 每篇文章發表的時間,datetime值。它是GMT時間加上時區偏移量的結果。
◈ post_date_gmt – 每篇文章發表時的GMT(格林威治)時間,datetime值。
◈ post_content – 每篇文章的具體內容,longtext值。你在後臺文章編輯頁面中寫入的所有內容都放在這裏。
◈ post_title – 文章的標題,text值。
◈ post_category – 文章所屬分類,int(4)值。
◈ post_excerpt – 文章摘要,text值。
◈ post_status – 文章當前的狀態,枚舉enum(’publish’,’draft’,’private’,’static’,’object’)值,publish爲已發表,draft爲草稿,private爲私人內容(不會被公開) ,static(不詳),object(不詳)。默認爲publish。
◈ comment_status – 評論設置的狀態,也是枚舉enum(’open’,’closed’,’registered_only’)值,open爲允許評論,closed爲不允許評論,registered_only爲只有註冊用戶方可評論。默認爲open,即人人都可以評論。
◈ ping_status – ping狀態,枚舉enum(’open’,’closed’)值,open指打開pingback功能,closed爲關閉。默認值是open。
◈ post_password – 文章密碼,varchar(20)值。文章編輯纔可爲文章設定一個密碼,憑這個密碼才能對文章進行重新強加或修改。
◈ post_name – 文章名,varchar(200)值。這通常是用在生成permalink時,標識某篇文章的一段文本或數字,也即post slug。
◈ to_ping – 強制該文章去ping某個URI。text值。
◈ pinged – 該文章被pingback的歷史記錄,text值,爲一個個的URI。
◈ post_modified – 文章最後修改的時間,datetime值,它是GMT時間加上時區偏移量的結果。
◈ post_modified_gmt – 文章最後修改的GMT時間,datetime值。
◈ post_content_filtered – 不詳,text值。
◈ post_parent – 文章的上級文章的ID,int(11)值,對應的是wp_posts.ID。默認爲0,即沒有上級文章。
◈ guid – 這是每篇文章的一個地址,varchar(255)值。默認是這樣的形式:http://your.blog.site/?p=1,如果你形成permalink功能,則通常會是你的Wordpress站點地址+文章名。
◈ menu_order – 不詳,int(11)值,默認爲0。
◈ post_type – 文章類型,具體不詳,varchar(100)值。默認爲0。
◈ post_mime_type – 不詳。varchar(100)值。
◈ comment_count – 評論計數,具體用途不詳,bigint(20)值。
wp_usermeta :
用於保存用戶元信息(meta)的表,共4個字段:
◊ umeta_id – 元信息ID,bigint(20)值,附加屬性auto_increment。
◊ user_id – 元信息對應的用戶ID,bigint(20)值,相當於wp_users.ID。
◊ meta_key – 元信息關鍵字,varchar(255)值。
◊ meta_value – 元信息的詳細值,longtext值。
wp_users:
用於保存Wordpress使用者的相關信息的表。
◈ ID – 用戶唯一ID,bigint(20)值,帶附加屬性auto_increment。
◈ user_login – 用戶的註冊名稱,varchar(60)值。
◈ user_pass – 用戶密碼,varchar(64)值,這是經過加密的結果。好象用的是不可逆的MD5算法。
◈ user_nicename – 用戶暱稱,varchar(50)值。
◈ user_email – 用戶電郵地址,varchar(100)值。
◈ user_url – 用戶網址,varchar(100)值。
◈ user_registered – 用戶註冊時間,datetime值。
◈ user_level – 用於等級,int(2)值,可以是0-10之間的數字,不同等級有不同的對WP的操作權限。
◈ user_activation_key – 用戶激活碼,不詳。varchar(60)值。
◈ user_status – 用戶狀態,int(11)值,默認爲0。
◈ display_name – 來前臺顯示出來的用戶名字,varchar(250)值。
後記
在WordPress的數據庫結構中,存儲系統選項和插件配置的wp_options表是比較獨立的結構,在後文中會提到,它採用了key-value模式存儲,這樣做的好處是易於拓展,各個插件都可以輕鬆地在這裏存儲自己的配置。
post,comment,user 則是三個基本表加上拓展表的組合。以wp_users爲例,wp_users已經存儲了每個用戶會用到的基本信息,比如 login_name、display_name、 password、email等常用信息,但如果我們還要存儲一些不常用的數據,最好的做法不是去在表後加上一列,去破壞默認的表結構,而是將數據存在wp_usermeta中。wp_usermeta這個拓展表和wp_options表有類似的結構,我們可以在這裏存儲每個用戶的QQ號碼、手機號碼、登錄WordPress後臺的主題選項等等。
比較難以理解的是term,即wp_terms、wp_term_relationships、wp_term_taxonomy。在WordPress的系統裏,我們常見的分類有文章的分類、鏈接的分類,實際上還有TAG,它也是一種特殊的分類方式,我們甚至還可以創建自己的分類方法。WordPress將所有的分類及分類方法、對應結構都記錄在這三個表中。wp_terms記錄了每個分類的名字以及基本信息,如本站分爲“WordPress開發”、“WPCEO插件”等,這裏的分類指廣義上的分類,所以每個TAG也是一個“分類”。wp_term_taxonomy記錄了每個分類所歸屬的分類方法,如“WordPress開發”、“WPCEO插件”是文章分類(category),放置友情鏈接的“我的朋友”、“我的同事”分類屬於友情鏈接分類(link_category)。wp_term_relationships記錄了每個文章(或鏈接)所對應的分類方法。