シリアル化されたオプションをプログラムで更新する方法は?


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

これらのオプションを更新する方法は?

回答:


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
ありがとう-すばらしい仕事。誰かが外部ファイルを必要とせずにスクリプトを記述しようとしている場合はoption update、一重引用符でその行にjsonを入れるだけです。次の行61の実装を参照してください:gist.github.com/squarecandy/cfdead55ca1d84496044
squarecandy

「1つのライナー」に対する私の答えを参照してください
ローラン

13

WP-CLIは、WordPressのシリアル化されたデータにアクセスするためのpluckコマンドとpatchコマンドを導入した1.4.0への更新後、間違いなくこれに対する答えです。

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

postpmetaのような他のコマンドにも同じプラークとパッチが追加されました。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にその仕事をするために。たとえば、サブコマンドupdate、正しい入力を使用するとarray、これをWP-CLIで実行できるはずです。--formatここでパラメーターを使用する必要があります。これは、同じことを確認するために、json一般にupdateサブコマンドでうまく機能します。getオプションAPIが使用されているため、サブコマンドはシリアル化されていないオプションを返す必要があります。オプションAPIは、他の/新しいインストールで保存、変更、および/または転送/セットアップできます。


これは機能しません。 wp option get wp_smtp_options > savedconfiguration.txt wp option update wp_smtp_options < savedconfiguration.txt 最初のコマンドは配列として保存しますが、2番目のコマンドは配列を受け入れません。最初にシリアル化する必要があると思いますが、その方法を知っていますか?
ラロ

formatパラメーターを活用してみましたか?@lalo編集:ちょうどあなたがそれを理解したのを見た..-
ニコライ

wp-cli.orgでは、利用可能なオプションは何であるかを述べていません formatパラメータに。私の答えで書いたように、中間ファイルを使用せずにそれが可能かどうか疑問に思います。
ラロ

formatパラメーターを完全に把握するには、ソースを確認する必要があります。これは、(サブ)コマンドから(サブ)コマンドとは異なる場合があります。たとえば、bashスクリプトを記述して、データを変数に保存することにより、確実に可能です。@lalo
ニコライ

ここにソースコードがありますが、どこにあるのか分かりません --format使用可能なオプション:github.com/wp-cli/wp-cli/blob/master/php/commands/...
ラロ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.