如何以编程方式更新序列化选项?


15

我想自动更新插件选项。有些事情我会重复很多。

使用wp-cli,我知道我可以更新像这样的简单选项:

php wp-cli.phar option update blog_public 1

但是,某些插件选项会将其选项保存在序列化字符串中。

wp_options中序列化的option_value的示例:

a:9:{s:4:"from";s:21:"xx@xxx.com";s:8:"fromname";s:51:"xxx";s:4:"host";s:13:"smtp.xx.com";s:10:"smtpsecure";s:3:"ssl";s:4:"port";s:3:"465";s:8:"smtpauth";s:3:"yes";s:8:"username";s:21:"xx@xxx.com";s:8:"password";s:13:"xxx";s:10:"deactivate";s:0:"";}

如何更新这些选项?

Answers:


14

我自己解决了它,这是怎么做的:

如果要以编程方式更新序列化选项:

从wp-cli.org下载wp-cli

找出正在使用的选项的“键”是什么。在此示例中,键为“ wp_smtp_options”

如果您不知道密钥,请在wp_options表中搜索并尝试找出它。

例: select * from wp_options where option_name like '%smtp%'

现在您知道密钥了,使用以下命令将您的配置保存到json文件中:

php wp-cli.phar option get wp_smtp_options --format=json > my_saved_config.txt

每当您希望恢复该配置时,请使用此命令

php wp-cli.phar option update wp_smtp_options --format=json < my_saved_config.txt

笔记:

  • 在WAMPSERVER64中工作
  • 适用于ñáé等unicode字符
  • 为了清晰起见,您可以将您的json文件带有填充和空格

不必为此使用中间文件将是很好的。有人知道怎么做吗?


1
谢谢-辛苦了 如果有人试图编写脚本而不需要外部文件,则可以将json option update放在单引号中。请参阅我在第61行的实现:gist.github.com/squarecandy/cfdead55ca1d84496044
squarecandy '16

看到我对“一个班轮”的回答
Laurent

13

WP-CLI绝对是在引入了pluckpatch的 1.4.0更新之后对此的答案。命令来访问WordPress中的序列化数据。

pluck命令采用这种格式来获取序列化值

wp option pluck <key> <key-name>

例如,在active_plugins选项中,您可以抓取第一项

wp option pluck active_plugins 0

patch命令采用这种格式来插入,更新或删除序列化的值(操作)

wp option patch <action> <key> <key-name> <value>

删除第一个active_plugin如下所示

wp option patch delete active_plugins 0

还为诸如postmeta之类的其他命令添加了相同的代码和补丁,您现在可以使用WP-CLI做一些很酷的循环,以编程方式更新WordPress序列化数据


2
这应该是公认的答案。
伊万·马特森

6

这是我在bash脚本中执行的操作:

wp option get wp_smtp_options --format=json | php -r '
$var = json_decode( fgets(STDIN) );
$var->from = "email@email.com";
$var->fromname = "me";
print json_encode($var);
' | wp option set wp_smtp_options --format=json

0

WP-CLI命令option不使用WordPress的选项API来完成其工作。给定,例如,使用subcommand update,正确的输入an array,您应该能够使用WP-CLI做到这一点。您应该在--format此处使用该参数,以确保获得相同的json效果,该update子命令通常可以正常工作。注意,该子命令get应返回未序列化的选项,因为使用了Options API,然后您可以在其他/新安装中保存,修改和/或转移/设置。


这不起作用: wp option get wp_smtp_options > savedconfiguration.txt wp option update wp_smtp_options < savedconfiguration.txt 第一个命令另存为数组,但是第二个命令不接受数组。我想我应该先对其进行序列化,您知道怎么做吗?
lalo

您是否尝试利用format参数?@lalo编辑:刚刚看到你想通了..
尼古拉·

在wp-cli.org中没有说明format参数的可用选项。我想知道是否有可能不必使用我在答案中写的中间文件。
lalo 2015年

您必须查看源代码才能获得有关该format参数的完整概述,有时这与(子)命令与(子)命令不同。当然可以,例如通过编写bash脚本并将数据存储到变量中。@lalo
Nicolai

这是源代码,但不了解--format可用的选项:github.com/wp-cli/wp-cli/blob/master/php/commands/…–
lalo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.