Wie werden serialisierte Optionen programmgesteuert aktualisiert?

15

Ich möchte die Aktualisierung der Plugin-Optionen automatisieren. Es gibt einige Dinge, die ich oft wiederhole.

Ich weiß, dass ich mit wp-cli einfache Optionen wie diese aktualisieren kann:

php wp-cli.phar option update blog_public 1

Einige Plugin-Optionen speichern ihre Optionen jedoch in einer serialisierten Zeichenfolge.

Beispiel für serialisierten Optionswert in wp_options:

a:9:{s:4:"from";s:21:"[email protected]";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:"[email protected]";s:8:"password";s:13:"xxx";s:10:"deactivate";s:0:"";}

Wie aktualisiere ich diese Optionen?

lalo
quelle

Antworten:

13

Selbst gelöst, so geht's:

Wenn Sie serialisierte Optionen programmgesteuert aktualisieren möchten:

Laden Sie wp-cli von wp-cli.org herunter

Finden Sie heraus, was der "Schlüssel" für die von Ihnen verwendeten Optionen ist. In diesem Beispiel lautet der Schlüssel "wp_smtp_options".

Wenn Sie den Schlüssel nicht kennen, suchen Sie in der Tabelle wp_options und versuchen Sie, ihn herauszufinden.

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

Nachdem Sie Ihren Schlüssel kennen, verwenden Sie diesen Befehl, um Ihre Konfiguration in einer JSON-Datei zu speichern:

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

Verwenden Sie diesen Befehl, wenn diese Konfiguration wiederhergestellt werden soll

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

Anmerkungen:

  • arbeitet in WAMPSERVER64
  • funktioniert mit Unicode-Zeichen wie ñ á é
  • Sie können Ihre JSON-Datei aus Gründen der Lesbarkeit mit Auffüllungen und Leerzeichen versehen

Es wäre großartig, keine Zwischendatei für diesen Zweck verwenden zu müssen. Weiß jemand, wie es geht?

lalo
quelle
1
Danke - tolle Arbeit. Wenn jemand versucht, ein Skript zu schreiben, ohne dass externe Dateien erforderlich sind, können Sie den json einfach option updatein einfache Anführungszeichen setzen. Siehe meine Implementierung in Zeile 61 hier: gist.github.com/squarecandy/cfdead55ca1d84496044
squarecandy
siehe meine Antwort für ein "Einzeiler"
Laurent
12

WP-CLI ist definitiv die Antwort auf diese Frage nach dem Update auf 1.4.0 , die die eingeführte zupfen und Patch für den Zugriff auf serialisierten Daten in Wordpress - Befehle.

Der Befehl pluck verwendet dieses Format zum Abrufen serialisierter Werte

wp option pluck <key> <key-name>

Zum Beispiel können Sie in der Option active_plugins das erste Element greifen

wp option pluck active_plugins 0

Der Befehl patch verwendet dieses Format zum Einfügen, Aktualisieren oder Entfernen von serialisierten Werten (die Aktion).

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

Das Löschen des ersten active_plugins würde so aussehen

wp option patch delete active_plugins 0

Das gleiche Zupfen und Patchen wurde auch für andere Befehle wie Postmeta hinzugefügt. Sie können jetzt WP-CLI verwenden, um einige coole Schleifen zum programmgesteuerten Aktualisieren von WordPress-serialisierten Daten durchzuführen

Mike Andreasen
quelle
2
Dies sollte die akzeptierte Antwort sein.
Evan Mattson
6

So mache ich es in einem Bash-Skript:

wp option get wp_smtp_options --format=json | php -r '
$var = json_decode( fgets(STDIN) );
$var->from = "[email protected]";
$var->fromname = "me";
print json_encode($var);
' | wp option set wp_smtp_options --format=json
Laurent
quelle
0

Der WP-CLI- Befehl optionverwendet die WordPress- Options-API , um seine Arbeit zu erledigen. B. mit dem Unterbefehl update, einer korrekten Eingabe, arrayund sollte dies mit WP-CLI möglich sein. Sie sollten den --formatParameter hier verwenden, um sicherzustellen, dass Sie den gleichen erhalten, jsonfunktioniert im Allgemeinen gut für den updateUnterbefehl. Beachten Sie, dass der Unterbefehl getdie Option unserialized zurückgeben sollte, da die Options-API verwendet wird, die Sie dann bei anderen / neuen Installationen speichern, ändern und / oder übertragen / einrichten können.

Nicolai
quelle
Das funktioniert nicht: Der wp option get wp_smtp_options > savedconfiguration.txt wp option update wp_smtp_options < savedconfiguration.txt erste Befehl speichert als Array, der zweite akzeptiert kein Array. Ich denke, ich sollte es zuerst serialisieren, wissen Sie, wie es geht?
Lalo
Haben Sie versucht, den formatParameter zu nutzen? @ Lalo bearbeiten: gerade gesehen, dass Sie es herausgefunden haben ..
Nicolai
in wp-cli.org sagt nicht, welche Optionen für formatParameter verfügbar sind . Ich frage mich, ob es möglich sein könnte, ohne eine Zwischendatei zu verwenden, wie ich sie in meiner Antwort geschrieben habe.
Lalo
Sie müssen sich die Quelle ansehen, um eine vollständige Übersicht über die formatParameter zu erhalten, die sich manchmal von (Unter-) Befehl zu (Unter-) Befehl unterscheiden. Dies ist beispielsweise möglich, indem ein Bash-Skript geschrieben und die Daten in einer Variablen gespeichert werden. @lalo
Nicolai
Hier ist der Quellcode, aber ich verstehe nicht, wo die --formatverfügbaren Optionen sind: github.com/wp-cli/wp-cli/blob/master/php/commands/…
lalo