文本是《理解和利用 WordPress 中的數(shù)據(jù)(共9篇)》專題的第 8 篇。閱讀本文前,建議先閱讀前面的文章:
在本系列前面的文章中,我們了解了 WordPress 在數(shù)據(jù)庫(kù)以及各表之間的關(guān)系。
在本部分,我將介紹不同于其他的一個(gè)表—— wp_options 表。如你在下圖中看到的,這是唯一一個(gè)單獨(dú)的表:
選項(xiàng)表存儲(chǔ)與其他表不同的數(shù)據(jù):它不同存儲(chǔ)關(guān)于你的網(wǎng)站內(nèi)容的數(shù)據(jù),而是存儲(chǔ)關(guān)于站點(diǎn)本身的數(shù)據(jù)。數(shù)據(jù)通過(guò) Options API 或 Settings API,寫(xiě)入到選項(xiàng)表中,兩個(gè)API都有一系列的函數(shù)用來(lái)添加,更新,刪除這個(gè)表中的數(shù)據(jù)。
你可以添加值到已存在的選項(xiàng)中,當(dāng)你想要?jiǎng)?chuàng)建新的選項(xiàng)時(shí),你也可以向它插入新的記錄。
在本教程中,我會(huì)從多個(gè)角度來(lái)查看這個(gè)選項(xiàng)表以及如何與它交互:
- 訪問(wèn)
wp_options表 wp_options表的結(jié)構(gòu)- 填充(Populating)
wp_options表 - Options API
- Settings API
這里我只是給出這些API以及他們?nèi)绾闻c選型表交互的概述-如果你想學(xué)習(xí)更多,閱讀McFarlin的 關(guān)于Setting API的系列教程。
訪問(wèn)wp_options表
因?yàn)閌wp_options`表存儲(chǔ)關(guān)于整個(gè)站點(diǎn)啟動(dòng)和管理的數(shù)據(jù),所以訪問(wèn)它是受限的。為能夠修改這些設(shè)置和選項(xiàng),用戶需要擁有 manage_options 的權(quán)限,唯一默認(rèn)擁有這種權(quán)限的用戶角色是管理員賬號(hào)(和多站點(diǎn)中的網(wǎng)絡(luò)管理員賬號(hào))。
這意味著如果你需要添加其他的用戶角色可以訪問(wèn)的選項(xiàng),你需要賦予他們`manage_options`的權(quán)限,這會(huì)導(dǎo)致風(fēng)險(xiǎn),所以只有你確保安全時(shí)再這樣做。
wp_options表的結(jié)構(gòu)
選項(xiàng)表有與其他3個(gè)元數(shù)據(jù)表相似的結(jié)構(gòu),它有以下4個(gè)字段:
option_IDoption_nameoption_valueautoload– 表明在頁(yè)面加載時(shí)這些選項(xiàng)是否自動(dòng)加載-單站點(diǎn)默認(rèn)是`yes`,多站點(diǎn)默認(rèn)為`no`
每一條記錄的`option_name`字段是唯一的值:如果你對(duì)一個(gè)選項(xiàng)添加超過(guò)一個(gè)的值,WordPress將會(huì)以一個(gè)數(shù)組存儲(chǔ)在`option_value`字段中。一個(gè)好的例子是,有一個(gè)`active_plugins`選項(xiàng),存儲(chǔ)一個(gè)站點(diǎn)中所有激活的插件數(shù)組。
當(dāng)添加,編輯,或者刪除`wp_options`表中的數(shù)據(jù)時(shí),你必須明確`option_name`字段,我會(huì)在本教程的下面部分展示。
填充wp_options表
wp_options 表從以下3個(gè)來(lái)源填充:
- 默認(rèn)的設(shè)置界面
- 主題選項(xiàng)界面
- 你通過(guò)插件添加時(shí)的設(shè)置和選項(xiàng)界面
WordPress有很多內(nèi)置的選項(xiàng)-你可以在Option Reference 頁(yè)面看到它們。但是你也可以創(chuàng)建你自己的。
為在主題和插件中創(chuàng)建新的選項(xiàng),你需要使用Options API或者Setting API。我會(huì)在下面介紹更多細(xì)節(jié)。
使用Options API
Options API包含8個(gè)函數(shù)供你添加,獲得,更新或者刪除選項(xiàng):
| 函數(shù) | 參數(shù) | 說(shuō)明 |
|---|---|---|
add_option() |
$option, $value, $deprecated, $autoload |
只有`$option`是必需的,如果有一個(gè)已經(jīng)存在的記錄的`$option_name`字段的值與你的`option`參數(shù)值相同,WordPress將會(huì)添加你的`$value`值到一個(gè)數(shù)組存儲(chǔ)到`option_value`字段,否者它會(huì)創(chuàng)建一個(gè)新的字段 |
delete_option() |
$option |
刪除選項(xiàng)的所有字段 |
get_option() |
$option, $default |
`$default`(可選的)是缺省的返回值如果數(shù)據(jù)庫(kù)中沒(méi)有與該選項(xiàng)沖突的值 |
update_option() |
$option, $new_value |
`$new_value`是填入`option_value`字段的值 |
add_site_option() |
$option, $value |
與`add_option()`相似,但是把該選項(xiàng)添加到多站點(diǎn)的網(wǎng)絡(luò)范圍內(nèi)(意味著選項(xiàng)被存儲(chǔ)在`wp_options`表中而不是`wp_xx_options`表中,這是的`xx`表示站點(diǎn)的ID)。`$autoload`不被包括在內(nèi)因?yàn)樵诙嗾军c(diǎn)中站點(diǎn)選項(xiàng)不會(huì)自動(dòng)加載而且不能重載。 |
delete_site_option() |
$option |
與`delete_option()`相似但是工作在多站點(diǎn)的網(wǎng)絡(luò)范圍內(nèi) |
get_site_option() |
$option, $default , $use_cache |
與 get_option() 相似但是得到多站點(diǎn)網(wǎng)絡(luò)范圍的選項(xiàng) |
update_site_option() |
$option, $value |
與`update_option()`相同但是工作在多站點(diǎn)的網(wǎng)絡(luò)范圍內(nèi) |
注意當(dāng)你通過(guò)Options API或者Settings API創(chuàng)建選項(xiàng)時(shí),你可以創(chuàng)建`option_value`字段沒(méi)有值的記錄。這樣允許站點(diǎn)管理員在以后的時(shí)間填寫(xiě)這個(gè)字段。
使用Settings API
與Options API一樣,你也可以使用 Settings API 與`wp_options`表中的數(shù)據(jù)交互。Settings API使你創(chuàng)建設(shè)置,站點(diǎn)管理員使用這些設(shè)置可以用來(lái)添加,更新選項(xiàng)表中數(shù)據(jù)。-這創(chuàng)建了一個(gè)通向選項(xiàng)的用戶接口。
Settings API有比Options API更多的內(nèi)容,所以這里我不會(huì)涉及細(xì)節(jié)的內(nèi)容,但是本質(zhì)上它包含3個(gè)元素:
- 設(shè)置(the setting)(`wp_options`表中的數(shù)據(jù))
- 字段(用來(lái)添加和編輯數(shù)據(jù))
- 設(shè)置段(the settings section),一組相關(guān)的字段。
以下是Settings API中兩個(gè)直接與`wp_options`表交互的兩個(gè)函數(shù):
| 函數(shù) | 參數(shù) | 說(shuō)明 |
|---|---|---|
register_setting() |
$option_group, $option_name, $sanitize_callback |
`option_name`參數(shù)指的是`wp_options`的`option_name`字段;其他的參數(shù)與Settings API中的其他函數(shù)交互。 |
unregister_setting() |
$option_group, $option_name, $sanitize_callback |
取消(deregisters)`wp_options`表中的設(shè)置-通常用來(lái)失活插件和主題。 |
這些函數(shù)不會(huì)向`wp_options`表的選項(xiàng)添加值,但是它們可以創(chuàng)建設(shè)置,然后可以通過(guò)Settings API中其他的函數(shù)向設(shè)置添加值。
總結(jié)
在WordPress數(shù)據(jù)庫(kù)中`wp_options`是唯一一個(gè)與其他任何表都沒(méi)有關(guān)聯(lián)的表。這是因?yàn)樗淮鎯?chǔ)關(guān)于站點(diǎn)和網(wǎng)絡(luò)的數(shù)據(jù)而不存儲(chǔ)站點(diǎn)內(nèi)容。為與這個(gè)表交互,你可以使用Options API或者Settings API中的函數(shù)。你還可以使用函數(shù)向多站點(diǎn)安裝中添加網(wǎng)絡(luò)范圍的數(shù)據(jù)。
在本系列的最后部分,我將會(huì)介紹多站點(diǎn),因?yàn)樗鼤?huì)設(shè)計(jì)到其他的本系列教程尚未設(shè)計(jì)到的數(shù)據(jù)庫(kù)表,并且可以為每一個(gè)核心表創(chuàng)建多個(gè)實(shí)例,每個(gè)實(shí)例對(duì)應(yīng)一個(gè)站點(diǎn)。
由 騎著蝸牛去拉薩@wordpress大學(xué) 原創(chuàng)翻譯,未經(jīng)允許,禁止轉(zhuǎn)載和采用本譯文。
您已閱讀完《理解和利用 WordPress 中的數(shù)據(jù)(共9篇)》專題的第 8 篇。請(qǐng)繼續(xù)閱讀該專題下面的文章:




