como atualizar as opções serializadas programaticamente?

12

Eu quero automatizar a atualização das opções do plug-in. Há algumas coisas que eu repito muito.

Com wp-cli sei que posso atualizar opções simples como esta:

php wp-cli.phar option update blog_public 1

No entanto, algumas opções de plug-in salvam suas opções em uma string serializada.

Exemplo de option_value serializado em wp_options:

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:"";}

Como atualizar essas opções?

    
por lalo 14.08.2015 / 18:51

4 respostas

11

Resolvi isso sozinho, é assim:

Se você quiser atualizar programaticamente as opções serializadas:

baixe o wp-cli do wp-cli.org

Descubra qual é a "chave" das opções que você está usando. Neste exemplo, a chave é "wp_smtp_options"

Se você não conhece a chave, procure na tabela wp_options e tente descobrir.

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

Agora que você conhece sua chave, use este comando para salvar sua configuração no arquivo json:

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

Sempre que você quiser que a configuração seja restaurada, use este comando

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

Notas:

  • funciona em WAMPSERVER64
  • funciona com caracteres unicode como ñ á é
  • você pode ter seu arquivo json com preenchimentos e espaços, para legibilidade

Seria ótimo não ter que usar um arquivo intermediário para essa finalidade. Alguém sabe como fazer isso?

    
por lalo 21.08.2015 / 17:30
6

Veja como faço isso em um script 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
    
por Laurent 21.12.2016 / 05:52
5

O WP-CLI é definitivamente a resposta para isso após a atualização para o 1.4.0, que introduziu a retirada e patch para acessar dados serializados no WordPress.

O comando pluck usa esse formato para capturar valores serializados

wp option pluck <key> <key-name>

Por exemplo, na opção active_plugins, você pode pegar o primeiro item

wp option pluck active_plugins 0

O comando patch usa esse formato para inserir, atualizar ou remover valores serializados (a ação)

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

A exclusão do primeiro active_plugin seria assim

wp option patch delete active_plugins 0

O mesmo pluck e patch também foram adicionados para outros comandos como postmeta, agora você pode usar o WP-CLI para fazer alguns loops para atualizar WordPress serializado de forma programática

    
por Mike Andreasen 04.12.2017 / 15:19
0

O WP-CLI comando option usa a API de opções do WordPress para fazer o seu trabalho. Dado, por ex. com o subcomando update , uma entrada correta, um array , você deve ser capaz de fazer isso com o WP-CLI. Você deve fazer uso do parâmetro --format aqui, para ter certeza de obter o mesmo, json funciona geralmente bem para o subcomando update . Note, o subcomando get deve retornar a opção não serializada, porque a API Options é usada, o que você então pode salvar, modificar e / ou transferir / configurar em outras / novas instalações.

    
por Nicolai 14.08.2015 / 20:04