come aggiornare le opzioni serializzate a livello di codice?


15

Voglio automatizzare l'aggiornamento delle opzioni del plugin. Ci sono alcune cose che ripeto molto.

Con wp-cli so di poter aggiornare semplici opzioni come questa:

php wp-cli.phar option update blog_public 1

Tuttavia, alcune opzioni del plug-in salvano le loro opzioni in una stringa serializzata.

Esempio di valore_opzione serializzato in 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:"";}

Come aggiornare quelle opzioni?

Risposte:


14

Risolto da solo, ecco come farlo:

Se si desidera aggiornare programmaticamente le opzioni serializzate:

scarica wp-cli da wp-cli.org

Scopri qual è la "chiave" per le opzioni che stai utilizzando. In questo esempio la chiave è "wp_smtp_options"

Se non conosci la chiave, cerca nella tabella wp_options e prova a capirla.

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

Ora che conosci la tua chiave, usa questo comando per salvare la tua configurazione nel file json:

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

Ogni volta che si desidera ripristinare la configurazione, utilizzare questo comando

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

Appunti:

  • funziona in WAMPSERVER64
  • funziona con personaggi unicode come ñ á é
  • puoi avere il tuo file json con imbottiture e spazi, per leggibilità

Sarebbe bello non dover usare un file intermedio per questo scopo. Qualcuno sa come farlo?


1
Grazie - ottimo lavoro. Se qualcuno sta cercando di scrivere uno script senza richiedere file esterni, puoi semplicemente inserire il json nella option updateriga tra virgolette singole. Vedi la mia implementazione sulla linea 61 qui: gist.github.com/squarecandy/cfdead55ca1d84496044
squarecandy

vedi la mia risposta per un "one liner"
Laurent il

13

WP-CLI è sicuramente la risposta a questo dopo l'aggiornamento alla 1.4.0 che ha introdotto i comandi pluck e patch per l'accesso ai dati serializzati in WordPress.

Il comando pluck utilizza questo formato per acquisire valori serializzati

wp option pluck <key> <key-name>

Ad esempio nell'opzione active_plugins puoi prendere il primo oggetto

wp option pluck active_plugins 0

Il comando patch assume questo formato per l'inserimento, l'aggiornamento o la rimozione di valori serializzati (l'azione)

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

L'eliminazione del primo active_plugin sarebbe simile a questa

wp option patch delete active_plugins 0

Lo stesso pluck e patch sono stati aggiunti anche per altri comandi come postmeta, ora puoi usare WP-CLI per fare dei fantastici loop per aggiornare i dati serializzati di WordPress a livello di codice


2
Questa dovrebbe essere la risposta accettata.
Evan Mattson,

6

Ecco come lo faccio in uno 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

0

Il comando WP-CLIoption utilizza l' API delle opzioni di WordPress per fare il suo lavoro. Dato, ad esempio con il sottocomando update, un input corretto, an array, dovresti essere in grado di farlo con WP-CLI. Dovresti usare il --formatparametro qui, per assicurarti di ottenere lo stesso, jsonfunziona generalmente bene per il updatesottocomando. Nota, il sottocomandoget dovrebbe restituire l'opzione non serializzata, poiché viene utilizzata l'API Opzioni, che è quindi possibile salvare, modificare e / o trasferire / configurare su altre / nuove installazioni.


Questo non funziona: il wp option get wp_smtp_options > savedconfiguration.txt wp option update wp_smtp_options < savedconfiguration.txt primo comando salva come array, ma il secondo non accetta un array. Immagino che dovrei serializzarlo prima, sai come farlo?
Lalo,

Hai provato a sfruttare il formatparametro? @lalo edit: ti ho appena visto capito ..
Nicolai,

in wp-cli.org non dice quali sono le opzioni disponibili per il formatparametro. Mi chiedo se sia possibile senza dover utilizzare un file intermedio come ho scritto nella mia risposta.
lalo,

Devi guardare l'origine per avere una panoramica completa sul formatparametro, che a volte differisce da (sotto-) comando a (sotto-) comando. È sicuramente possibile, ad esempio scrivendo uno script bash e memorizzando i dati in una variabile. @lalo
Nicolai,

ecco il codice sorgente, ma non capisco dove sono --formatdisponibili le opzioni: github.com/wp-cli/wp-cli/blob/master/php/commands/…
lalo
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.