如何更新小部件的选项表

时间:2016-08-24 作者:Rain Man

每个小部件在options 包含标题和其他字段值的表。是否有任何方法可以在update 作用

例如,以下是示例小部件的一些值:

a:2:{i:2;a:23:{s:5:"title";s:19:"Widget Title";.....
现在我想更新title 中的另一个值function widget($args, $instance) 并将值保存到数据库中。

我发现了options API 可以处理类似的事情,但我不确定这是否是正确的方法以及如何更新特定小部件的信息。

// Update the value of an option that was already added.
update_option( $option, $newvalue );

2 个回复
最合适的回答,由SO网友:bynicolas 整理而成

将数组保存到DB时将序列化。如果要更新数组的密钥,需要

首先获取选项,应用修改,用更新的数组值更新选项,因此在您的示例中,如果获取选项,您应该得到一个多维数组,其中键的值为[title] => Widget Title 你会更新的title 输入新值,然后更新回选项。

像这样的

$my_option = get_option( \'your_option_name\' );
现在假设您的键位于数组的第一维,然后在那里更新您的值。

$my_option[\'title\'] = \'New Widget Title\';
最后,将选项更新回DB。

update_option( \'your_option_name\', $my_option );

SO网友:Rarst

这个widget() 方法似乎不是此类操作的好选择,因为它处理小部件的显示。这个update() 方法是您通常操作小部件实例的地方,在这种情况下,您不必显式保存它,因为基类会处理它。

在更一般的视图中,您看到的是序列化的数据。保存到选项中的任何非字符串的内容都已转换为此类序列化字符串进行存储。你可以改变它,只要你确定这是你真正想要做的。

只要您坚持使用Options API,它将在检索时透明地取消序列化数据,并在保存时序列化数据。

如果你直接这样做,你必须自己处理。

只需更改序列化字符串breaks it, 由于格式取决于捕获数据的长度,不匹配会阻止其工作。这是迁移中的典型错误,当人们搜索/替换字符串而不考虑这一点时。

相关推荐

正在通过UpdraftPlus将WordPress从Dreamhost迁移到Azure WordPress资源“wp_Options表不存在...”错误

Goal我们的目标是将wordpress站点从DreamHost迁移到Azure wordpress资源。Process and Errors我们安装了UpdraftPlus (pro版本)在两个版本上。我们利用了它Send a backup to another site->Recieve a backup from a remote site功能。在数据库还原过程中,它失败并出现以下错误wp_options table does not exists....我们最终从下载了数据库备份文件Updra