这是我参与更文挑战的第18天,活动详情查看: 更文挑战
本篇翻译参考自Understanding and Working With the WordPress Options Table 它是理解和使用WordPress中的数据系列的第八篇。
理解和使用WordPress的Options表
在本系列的较早部分中,我们研究了WordPress数据库中的表以及它们之间的关系。
在这一部分中,将介绍一个与其他表不同的表——wp_options
表。从表的关系图中可以了解到,这是唯一一张独立的表:
options
表与其他表存储的数据类型不同:不是存储站点内容的数据,而是存储有关站点本身的数据。使用Options API或Settings API写入数据到options表,这两个API由一组用于在options表中添加、更新和删除数据的函数组成。
可以将值添加到现有options,还可以在想要创建新options时将新记录添加到表中。
在本教程中,我将研究options表的不同方面以及如何与之交互:
- 访问
wp_options
表 wp_options
表的结构- 填充(
Populating
)wp_options
表 - 选项API——The Options API
- 设置API——The Settings API
这里只是给出这些API以及它们如何与options表交互的概述——如果你想学习更多,可以阅读McFarlin的关于Setting API的系列。
访问wp_options表
由于wp_options
表存储与整个站点的设置和管理有关的数据,因此对其访问受到限制。为了能够修改设置和选项,用户需要具有manage_options
能力(capability
)。具有此能力的唯一默认用户角色是管理员(administrator
)角色(在多站点中,是网络管理员(network administrator
)角色)。
这意味着,如果其他用户角色需要访问来添加选项,则必须为其分配manage_options
能力。这会带来风险,因此,只有在确定的情况下,才可以这样做!
wp_options表结构
options表和元数据表有相似的结构,它有四个字段:
option_ID
option_name
option_value
autoload
——指定是否在每次页面加载时自动加载该选项——在单站点安装中默认为yes
,在多站点中默认为no
。
option_name
字段的记录值是唯一的:如果一个选项添加多个值,WordPress在option_value
字段中存储为一个数组。一个好的例子是active_plugins
选项,它存储站点中激活插件的数组。
当添加、编辑或删除wp_options
表中的数据时,必须指定option_name
,该教程的后面将会介绍。
填充wp_options表
wp_options
由一到三个源填充:
- 默认的设置屏幕
- 主题选项屏幕
- 通过插件添加的设置和选项屏幕
WordPress内置了许多选项-可以在选项参考中查看所有内容。同时你也可以创建自己的选项。
在主题或插件中创建新选项,可以使用Options API或Settings API。下面将详细地介绍这些内容。
使用Options API
Options API包含八个函数,用以实现添加、获取、更新或删除选项:
函数 | 参数 | 说明 |
---|---|---|
add_option() | $option , $value , $deprecated , $autoload | 只有$option 是必需的,如果记录已经存在,即:$option 参数值与option_name 字段的值相同,则WordPress将会添加$value 值到一个数组存储在option_value 字段;否者将创建一个新的记录 |
delete_option() | $option | 删除选项的所有字段 |
get_option() | $option , $default | $default (可选的)是option不存在时返回的默认值 |
update_option() | $option ,$value ,$autoload | $value 是填入option_value 字段的值,如果$option 存在则更新,不存在将创建新的记录 |
add_site_option() | $option , $value | 与add_option() 相似,但是把该选项添加到多站点的网络范围内(意味着选项被存储在wp_options 表中而不是wp_xx_options 表中,这是的xx 表示站点的ID)。$autoload 不被包括在内,因为在多站点中站点选项不会自动加载而且不能重载。 |
delete_site_option() | $option | 与delete_option() 相似但是工作在多站点的网络范围(network-wide )内 |
get_site_option() | $option , $default , $deprecated | 与get_option() 相似但是得到多站点网络范围的选项 |
update_site_option() | $option , $value | 与update_option() 相同但是工作在多站点的网络范围内 |
注意,通过选项API或设置API创建选项时,可以创建option_value
字段中没有值的记录。这允许站点管理员稍后填充该字段。
使用Settings API
和Options API一样,你可以使用Settings API和wp_options
表中的数据交互。设置API可以让你创建设置,这样管理员可以在options表中添加或更新数据——它添加了一个到options的用户接口。
设置API比选项API拥有更多的功能,因此在这里我不会对其进行详细介绍,但是从本质上讲,它具有三个要素:
- 设置(
wp_options
表中的数据) - 字段(用于添加和编辑数据)
- 设置部分, 它是一组相关字段。
Settings API中与wp_options
表直接交互的两个函数如下:
函数 | 参数 | 说明 |
---|---|---|
register_setting() | $option_group ,$option_name , $args | $option_name 参数表示wp_options 表中的option_name 字段;其他参数与Settings API中的其他函数交互 |
unregister_setting() | $option_group , $option_name , $deprecated | 从wp_options 表中注销设置——通常与主题或插件的停用钩子一起使用。 |
这些函数不会向wp_options
表中的选项添加值,但是会创建设置,然后通过Settings API中的其他函数将值添加到其中。
概要
在WordPress数据库中wp_options
是唯一一个与其他任何表都没有关联的表。这是因为它只存储关于站点或网络的数据而不是站点内容。
为与这个表交互,可以使用Options API或者Settings API中的函数。还可以在多站点隔离中使用添加网络范围数据的函数。
在本系列的最后一部分,将介绍多站点(Multisite
),因为它使用了本系列到目前为止尚未介绍的一些其他数据库表,并且还为每个核心表创建了多个实例,每个站点一个。