WordPress 中如何设置全局选项?一文详解 WordPress 的 Option 功能!
对于进行 WordPress 开发来说,肯定会了解到的一个开发功能就是 WordPress 设置选项的创建,访问,修改和删除,比如主题和插件的设置选项处理,那么 WordPress 具体是怎么管理全局选项的呢?
WordPress 全局选项管理的接口叫做 Option API,它是一种简单且标准化的在数据库中存储数据的方法,它使用给定的自定义名称将数据存储到 wp_options
表中。
WordPress 提供了 Option 的增删查改四个操作的函数,如果你安装的 WordPress 是多站点版本,那么还有对应的 _site_ 函数应用全网选项的函数,同样使用给定的自定义名称将数据存储到 wp_sitemeta
表中。
但是多站点的选项设置用到场景比较少,所以今天我们还是详细介绍一下 Option 的增删查改四个操作的函数:
增加选项|add_option
add_option( string $option, mixed $value = '', string $deprecated = '', string|bool $autoload = null ): bool
add_option
函数实现给 WordPress 增加一个选项,选项的名称通过参数 $option
指定,选项的值 $value
支持标量和非标量,如果非标量的话,则该值可以被序列化,但是无需手动对值进行序列化,该函数会在将值插入数据库之前会进行序列化操作,所以简单说,就是把各种类型值 $value
无需做任何处理,以 $option
作为名称添加到选项中。
另外第三个参数是被放弃的,不用管,如果要用到第四个参数 $autoload
的时候,三个参数的位置直接输入空字符串即可,这里简单说下一下第四个参数 $autoload
,用于定义在 WordPress 启动的时候是否自动加载该选项到内存中,该参数默认值为 null
,意思是它会自动根据 $value
大小来决定是否自动加载,小于 150000 字节则会自动加载,如果不管大小都要求自动加载,则可以将其设置 'on'
,无需自动加载,则需要将其设置为 'off'
。
最后如果该选项如果被成功添加,则返回 true
,否则 false
,额外说一下如果该选项数据库已有,则无法添加成功,如果你是想如已存在则修改,则建议用到后面介绍 update_option
函数。
add_option( 'my_option', 'my_value' );
比如上面代码就添加一个名称为 'my_option'
选项,它的值为:'my_value'
。
删除选项|delete_option
delete_option( string $option ): bool
delete_option
函数删除名称为 $option
的选项,删除选项函数比较简单,比如下面的代码就是删除名称为 'my_option'
选项。
delete_option( 'my_option' );
查询选项|get_option
get_option( string $option, mixed $default_value = false ): mixed
get_option
函数用于获取名称为 $option
的选项的值,除该参数之外,它还有第二个参数 $default_value
,该参数默认值为 false
,如果选项不存在,则返回该值。
get_option
函数返回值的类型可能会因与保存或更新选项时传递的类型不同而不同,如果选项值被序列化了,那么在返回时它将被反序列化,在这种情况下,返回的类型将会相同,比如存储一个如数组这样的非标量值,将返回相同的数组。
在大多数情况下,非字符串的标量和 null 值存储被转换并返回为字符串等效值。比如通过 add_option( 'my_option', $value )
添加选项,然后通过 get_option( 'my_option' )
获取选项值将会:
false
返回string(0) ""
true
返回string(1) "1"
0
返回string(1) "0"
1
返回string(1) "1"
'0'
返回string(1) "0"
'1'
返回string(1) "1"
null
返回string(0) ""
如果添加是非标量的值,比如 add_option( 'my_array', array( false, 'str', null ) )
, 返回的值将与原始值完全相同,因为它在保存到数据库之前已经被序列化了:
array(3) {
[0] => bool(false)
[1] => string(3) "str"
[2] => NULL
}
更新选项|update_option
update_option( string $option, mixed $value, string|bool $autoload = null ): bool
update_option
函数的参数和 add_option
函数参数除了没有放弃的参数,基本都是一致的,用法也是一样的,这里就不重复了。
那么 update_option
函数和 add_option
函数的区别主要是:add_option
函数只会添加,如果已经存在,则不会覆盖,而 update_option
函数则会修改现有的选项,如果不存在,它则会调用 add_option
函数增加。
update_option( 'my_option', 'my_value' );
比如上面代码就修改名称为 'my_option'
选项的值为 'my_value'
,如果不存在则增加该选项,值也是为 'my_value'。
总结
关于 WordPress 全局选项,或者说站点选项的开发接口介绍,最核心的部分就是这四个函数,只要认真阅读这篇文章,那么进行开发的时候基本不会有太大的问题。