当前浏览:首页 / WordPress函数 / update_option()

update_option( string $option, mixed $value, string|bool $autoload = null )

更新已添加的选项的值

option 选项more...

updatemore...


描述

您不需要序列化值。如果该值需要序列化,则在将其插入数据库之前将对其进行序列化。请记住,资源不能序列化或作为选项添加。

如果该选项不存在,将创建它。

此函数设计用于登录或未登录用户一同使用。在安全方面,插件开发人员应该在更新任何选项之前检查当前用户的能力。


参数

$option

(string)(必填) 要更新的选项的名称,预期不会进行SQL转义。

$value

(mixed)(必填) 选项值,如果不是标量,则必须是可序列化的。预期不会进行SQL转义。

$autoload

(string|bool)(可选) WordPress启动时是否加载该选项。对于现有选项,$autoload只有在$value也发生更改的情况下使用update_option()进行更新。接受 'yes'|true 表示启用,或接受 'no'|false 以禁用。对于不存在的选项,默认值是 'yes'。

默认值: null


返回

(bool) 如果值已更新,则为true,否则为false。



源码

查看源码 官方文档


更新日志

版本描述
4.2.0添加了 $autoload 参数。
1.0.0开始引入

使用示例

  • 示例1

    根据WordPress Codex(以及我使用WP开发的经验),请注意此处返回值中的一个重要细微之处:
    如果选项值已更改,则为true,如果未更改或更新失败,则为false。

    在一些论坛上还建议通过代码检查选项的存在:

    if ( ! get_option('my_option') ) ...

    但是当选项存在并且我将 my_option 设置为bool FALSE时,我发现这不起作用!

    为了处理选项存在性的所有检查,我利用了 update_option 的细微之处:

    if (FALSE === get_option('my_option') && FALSE === update_option('my_option',FALSE)) add_option('my_option',$default_value);

    当将选项设置为FALSE时,第二个检查结果为FALSE,不会产生任何变化……因此,如果该值确实不存在,则将添加(在我的情况下)所需的 $default_value。

    我知道这似乎有些极端,但据我所知,这是我能够在插件选项上保留bool FALSE并根据自定义选项的实际存在断言有效操作的唯一方法。

  • 示例2

    由于第271行的 get_option 在选项不存在的情况下返回false,所以不可能使用 update_option 创建一个布尔值为false的新选项,因为 update_option 会错误地认为(第307行)该选项确实存在但没有变化。一个变通方法是用整数1和0代替布尔值。

  • 示例3

    仅在第一次安装时更新选项一次
    下面的代码将允许用户在设置新选项后更改选项。

    function my_switch_theme() {
    	update_option( 'thumbnail_size_w', 320 );
    	update_option( 'thumbnail_size_h', 180 );
    }
    
    add_action('switch_theme', 'my_switch_theme');
    

    如果我们使用after_setup_theme,它将阻止选项并阻止用户更改它。

  • 示例4

    用法

    <?php update_option( $option, $new_value, $autoload ); ?>
  • 示例5

    示例:更新核心选项
    将默认注释状态设置为“closed”:

    <?php update_option( 'default_comment_status', 'closed' ); ?>

    此选项通常在设置 > 讨论管理面板中设置。有关WordPress Core使用的选项的完整列表,请参阅选项参考

    注意:使用get_option()确认选项值。

    <?php echo get_option( 'default_comment_status' ); ?>
  • 示例6

    示例:更新自定义选项
    您还可以创建自己的自定义选项。此示例使用值255更新选项'my_custom_option'

    <?php update_option( 'my_custom_option', 255 ); ?>

    如果该选项不存在,则会自动添加该选项(并设置该选项的值)。

    如果您不希望自定义选项在WordPress启动时自动加载,请使用add_option()。此示例更新该选项(如果该选项已存在),如果不存在,则使用add_option()$autoload设置为'no'

    <?php
    $option_name = 'my_custom_color_option' ;
    $new_value = 'red';
    
    if ( get_option( $option_name ) !== false ) {
    
        // The option already exists, so update it.
        update_option( $option_name, $new_value );
    
    } else {
    
        // The option hasn't been created yet, so add it with $autoload set to 'no'.
        $deprecated = null;
        $autoload = 'no';
        add_option( $option_name, $new_value, $deprecated, $autoload );
    }
    ?>
  • 示例7

    注意
    通过WordPress函数检索的选项值被缓存。如果在选项API之外修改选项,然后尝试更新缓存的选项,则更新将失败并返回false。在尝试获取或更新同一请求的选项之前,请使用以下方法清除选项缓存:

    <?php wp_cache_delete ( 'alloptions', 'options' ); ?>
  • 示例8

    使用 wp_load_alloptions() 打印所有选项的列表:

    <?php 
    $alloptions  = wp_load_alloptions();
    var_dump( $alloptions );
    ?>
  • 示例9

    注意
    请避免将$value传递为null,对于false-y值只需使用 0false 甚至空字符串,null 值可能会导致潜在的错误和副作用。

  • 示例10

    保存布尔值true将保存为(字符串)“1”的选项值
    保存布尔值为false时,选项值为空(字符串)“”

    $value = true;
    update_option( 'some_option', $value );

    获取布尔值将返回:
    a)如果保存的布尔值为true,则返回字符串“1”
    b)如果保存布尔值为false,则返回空字符串“”
    c)如果该选项不存在,则返回布尔值false

    $get_value = get_option( 'some_option', true );
    

    要检查某个选项是否已启用,并且默认情况下应该启用(我们不关心该选项是否已存在):

    $check = ! empty( $get_value );
    

    要检查某项功能是否已启用,但仅当该选项存在时:

    $check = ( '1' === $get_value );
    
  • 示例11

    如果新值与旧值相同,则update_option将返回false。

    $opt_name  = ( ! empty($_POST['opt_name']  ) ) ? $_POST['opt_name']  : 'wpdocs';
    $opt_value = ( ! empty($_POST['opt_value'] ) ) ? $_POST['opt_value'] : ' ';
    		
    $existing_val = get_option( $opt_name );
    
    if ( false !== $existing_val ) {
    	// option exist
    	if ( $existing_val === $opt_value ) {
    		echo "new value is same as old.";
    	} else {
    		echo "new value is different.";
    		update_option( $opt_name, $opt_value );
    	}
    } else {
    	// option not exist
    	add_option( $opt_name, $opt_value );
    }
    
  • 示例12

    更新选项存储在多维数组中

    更新多维数组并检索整个数组。

    //store in one variable
    $multidimensional_options = array(
      'inner_array'=>array(
           'foo' => 'bar',
           'hello' => 'world',
       ),
    );
     
    //Update entire array
    update_option('my_multi_options', $multidimensional_options);
     
    //Get entire array
    $my_multi_options = get_option('my_multi_options');