您的方法是正确的,但问题是示例中选项内的值,即:
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()时,不需要取消序列化或序列化,这些函数会解决这个问题。