WordPress数据库系列:理解和使用WordPress中的数据系列八(Options表)

719 阅读4分钟

这是我参与更文挑战的第18天,活动详情查看: 更文挑战

本篇翻译参考自Understanding and Working With the WordPress Options Table 它是理解和使用WordPress中的数据系列的第八篇。

理解和使用WordPress的Options表

在本系列的较早部分中,我们研究了WordPress数据库中的表以及它们之间的关系。

在这一部分中,将介绍一个与其他表不同的表——wp_options表。从表的关系图中可以了解到,这是唯一一张独立的表:

options表与其他表存储的数据类型不同:不是存储站点内容的数据,而是存储有关站点本身的数据。使用Options APISettings 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, $valueadd_option()相似,但是把该选项添加到多站点的网络范围内(意味着选项被存储在wp_options表中而不是wp_xx_options表中,这是的xx表示站点的ID)。$autoload不被包括在内,因为在多站点中站点选项不会自动加载而且不能重载。
delete_site_option()$optiondelete_option()相似但是工作在多站点的网络范围(network-wide)内
get_site_option()$option, $default, $deprecatedget_option()相似但是得到多站点网络范围的选项
update_site_option()$option, $valueupdate_option()相同但是工作在多站点的网络范围内

注意,通过选项API或设置API创建选项时,可以创建option_value字段中没有值的记录。这允许站点管理员稍后填充该字段。

使用Settings API

和Options API一样,你可以使用Settings APIwp_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, $deprecatedwp_options表中注销设置——通常与主题或插件的停用钩子一起使用。

这些函数不会向wp_options表中的选项添加值,但是会创建设置,然后通过Settings API中的其他函数将值添加到其中。

概要

在WordPress数据库中wp_options是唯一一个与其他任何表都没有关联的表。这是因为它只存储关于站点或网络的数据而不是站点内容。

为与这个表交互,可以使用Options API或者Settings API中的函数。还可以在多站点隔离中使用添加网络范围数据的函数。

在本系列的最后一部分,将介绍多站点(Multisite),因为它使用了本系列到目前为止尚未介绍的一些其他数据库表,并且还为每个核心表创建了多个实例,每个站点一个。