bagaimana cara memperbarui opsi serial secara terprogram?

15

Saya ingin secara otomatis memperbarui opsi plugin. Ada beberapa hal yang sering saya ulangi.

Dengan wp-cli saya tahu saya dapat memperbarui opsi sederhana seperti ini:

php wp-cli.phar option update blog_public 1

Namun, beberapa opsi plugin menyimpan opsi mereka dalam string serial.

Contoh option_value serial di 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:"";}

Bagaimana cara memperbarui opsi-opsi itu?

lalo
sumber

Jawaban:

14

Selesaikan sendiri, ini cara melakukannya:

Jika Anda ingin memperbarui opsi serial secara terprogram:

unduh wp-cli dari wp-cli.org

Cari tahu apa "kunci" untuk opsi yang Anda gunakan. Dalam contoh ini kuncinya adalah "wp_smtp_options"

Jika Anda tidak tahu kuncinya, cari di tabel wp_options dan coba cari tahu.

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

Sekarang setelah Anda mengetahui kunci Anda, gunakan perintah ini untuk menyimpan konfigurasi Anda ke file json:

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

Setiap kali Anda ingin konfigurasi itu dipulihkan, gunakan perintah ini

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

Catatan:

  • bekerja di WAMPSERVER64
  • bekerja dengan karakter unicode seperti ñ á é
  • Anda dapat memiliki file json Anda dengan bantalan dan spasi, untuk keterbacaan

Alangkah baiknya tidak harus menggunakan file perantara untuk tujuan ini. Adakah yang tahu cara melakukannya?

lalo
sumber
1
Terima kasih - kerja bagus. Jika ada orang yang mencoba menulis skrip tanpa memerlukan file eksternal, Anda bisa meletakkan json di option updatebaris dalam tanda kutip tunggal. Lihat implementasi saya pada baris 61 di sini: gist.github.com/squarecandy/cfdead55ca1d84496044
squarecandy
lihat jawaban saya untuk "satu liner"
Laurent
13

WP-CLI jelas merupakan jawaban untuk ini setelah pembaruan ke 1.4.0 yang memperkenalkan perintah pluck dan patch untuk mengakses data serial di WordPress.

Perintah pemetik mengambil format ini untuk mengambil nilai serial

wp option pluck <key> <key-name>

Misalnya dalam opsi active_plugins Anda dapat mengambil item pertama

wp option pluck active_plugins 0

Perintah patch mengambil format ini untuk menyisipkan, memperbarui atau menghapus nilai serial (tindakan)

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

Menghapus active_plugin pertama akan terlihat seperti ini

wp option patch delete active_plugins 0

Pluck dan patch yang sama juga ditambahkan untuk perintah lain seperti postmeta, Anda sekarang dapat menggunakan WP-CLI untuk melakukan beberapa loop keren untuk memperbarui data berseri WordPress secara terprogram secara terprogram.

Mike Andreasen
sumber
2
Ini harus menjadi jawaban yang diterima.
Evan Mattson
6

Inilah cara saya melakukannya dalam skrip bash:

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
sumber
0

The WP-CLI command optiontidak digunakan WordPress' Options API untuk melakukan tugasnya. Diberikan, misalnya dengan sub perintah update, input yang benar, dan array, Anda harus dapat melakukan ini dengan WP-CLI. Anda harus menggunakan --formatparameter di sini, untuk memastikan Anda mendapatkan yang sama, jsonberfungsi secara umum baik untuk updatesub perintah . Catatan, sub-perintah getakan mengembalikan Anda opsi yang tidak di-serialisasi, karena API Opsi digunakan, yang kemudian dapat Anda simpan, modifikasi, dan / atau transfer / set-up pada instalasi lain / baru.

Nicolai
sumber
Ini tidak berfungsi: wp option get wp_smtp_options > savedconfiguration.txt wp option update wp_smtp_options < savedconfiguration.txt Perintah pertama disimpan sebagai array, tetapi perintah kedua tidak menerima array. Saya kira saya harus membuat cerita bersambung terlebih dahulu, apakah Anda tahu bagaimana melakukannya?
lalo
Apakah Anda mencoba meningkatkan formatparameter? @ lol edit: baru saja melihat Anda tahu ..
Nicolai
di wp-cli.org tidak mengatakan opsi apa yang tersedia untuk formatparameter. Saya bertanya-tanya apakah itu bisa dimungkinkan tanpa harus menggunakan file perantara seperti yang saya tulis dalam jawaban saya.
lalo
Anda harus melihat sumbernya untuk mendapatkan gambaran lengkap atas formatparameter, yang kadang-kadang berbeda dari perintah (sub-) hingga (sub-). Tentunya mungkin, misalnya dengan menulis skrip bash dan menyimpan data ke dalam variabel. @ lalo
Nicolai
di sini adalah kode sumber, tetapi tidak mengerti di mana --formatopsi yang tersedia: github.com/wp-cli/wp-cli/blob/master/php/commands/…
lalo