使用UPDATE_OPTION仅更新一个选项

时间:2020-12-19 作者:H. M..

“wp\\U选项”表中的“选项”中有许多选项。此选项,second_option, 包含三个参数,因此有三个值。例如,这些值如下所示:

{s:12:"manual";s:0:""; s:8:"currency";s:3:"USD";s:14:"state";s:2:"nn";}
我想更新第二个参数的值,即\'currency\', 然而,每当我只想更新这一部分时,Wordpress只会更新整个选项以及第一个选项和第三个选项,即\'manual\'\'state\' 被删除,只保留我正在更新的内容,即\'currency\'. 我使用以下代码:

$sets = get_option( \'second_option\' );
$sets[\'currency\'] = \'some_value\';
update_option(\'second_option\', $sets);
有没有办法只更新选项\'currency\' 不影响其他参数,即\'manual\'\'state\'?

提前谢谢。

1 个回复
SO网友:tdj

您的方法是正确的,但问题是示例中选项内的值,即:

get_option( \'second_option\' );

未正确序列化(它可能是通过数据库直接编辑的,也可能是错误的,或者是插入了update_option() ).

如果你var_dump( get_option( \'second_option\' ) );, 您将看到它不是一个数组,而是一个字符串。

对于您的示例,数据库中正确的序列化值为:

a: 3:{s:6:manual:0:8:currency:3:USD:5:state:2:nn}

使用它,您的方法将按预期工作。但是,不要手动编辑此选项(因为它很容易出错,如本例中所示),只需重置选项,如下所示:

$second_option = array(
  \'manual\'   => \'\',
  \'currency  => \'USD\',
  \'state\'    => \'nn\',
);
update_option( \'second_option\', $second_option );
之后,这将按预期工作:

$sets = get_option( \'second_option\' );
$sets[\'currency\'] = \'some_value\';
update_option( \'second_option\', $sets );
PS:当分别使用get\\u option()和update\\u option()时,不需要取消序列化或序列化,这些函数会解决这个问题。

相关推荐

我在wp_Options表(PhpMyAdmin)中看不到site_url和home_url字段?

我想向你展示这个问题。这是我10年职业生涯中的第一次,过去我曾将许多站点克隆到另一个域,但这是我第一次在Wp\\U选项(phpmyadmin)下看不到“站点URL和主页选项”这是我克隆的域名https://13cabsonline.com.au这是目标域https://silverservice.sydney/我已经通过备份小部件下载并还原了文件。上载文件管理器+数据库,并将数据库与用户连接。但问题是,我无法在phpmyadmin中的Wp\\u options下找到选项。For example: 正常的外