як оновити серіалізовані параметри програмно?


15

Я хочу автоматизувати оновлення параметрів плагіна. Є деякі речі, які я багато повторюю.

За допомогою wp-cli я знаю, що можу оновити такі прості параметри, як цей:

php wp-cli.phar option update blog_public 1

Однак деякі параметри плагіна зберігають їх параметри в серіалізованому рядку.

Приклад серіалізованого параметра_ізначення в 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:"";}

Як оновити ці параметри?

Відповіді:


14

Вирішив сам, ось як це зробити:

Якщо ви хочете програмно оновлювати серіалізовані параметри:

завантажити wp-cli з wp-cli.org

Дізнайтеся, що є "ключем" для параметрів, які ви використовуєте. У цьому прикладі ключ - "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
Спасибі - чудова робота. Якщо хтось намагається написати сценарій, не вимагаючи зовнішніх файлів, ви можете просто поставити json у option updateрядок в одних лапках. Дивіться мою реалізацію на лінії 61 тут: gist.github.com/squarecandy/cfdead55ca1d84496044
squarecandy

дивіться мою відповідь на "один лайнер"
Лоран

13

WP-CLI, безумовно, є відповіддю на це після оновлення до 1.4.0, яке ввело команди pluck та patch для доступу до серіалізованих даних у WordPress.

Команда 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

Такий же плак і патч також додані для інших команд, таких як постмета, тепер ви можете використовувати WP-CLI, щоб зробити кілька крутих циклів для оновлення програмно серіалізованих даних WordPress.


2
Це має бути прийнятою відповіддю.
Еван Маттсон

6

Ось як я це роблю в баш-скрипті:

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 ' Options API , щоб робити свою роботу. Враховуючи, наприклад, підкоманду update, правильний ввід, an array, ви повинні зробити це за допомогою WP-CLI. Ви повинні використовувати --formatпараметр тут, щоб переконатися, що ви отримали те ж, jsonпрацює в цілому нормально для updateпідкоманди. Зауважте, підкоманда getповинна повернути вам опцію несеріалізованою, оскільки використовується API параметрів, який ви зможете зберігати, змінювати та / або переносити / налаштовувати на інші / нові установки.


Це не працює: wp option get wp_smtp_options > savedconfiguration.txt wp option update wp_smtp_options < savedconfiguration.txt Перша команда зберігається як масив, а друга не приймає масив. Я думаю, я повинен спершу це серіалізувати, чи знаєте ви, як це зробити?
lalo

Ви намагалися використовувати formatпараметр? @lalo редагувати: щойно бачив, що ти зрозумів це ..
Ніколай

у wp-cli.org не кажуть, які доступні параметри для formatпараметра. Цікаво, чи могло це бути можливим без використання проміжного файлу, як я написав у своїй відповіді.
lalo

Ви повинні подивитися на джерело, щоб отримати повний огляд formatпараметра, який іноді відрізняється від команди (sub-) до команди (sub-). Це, безумовно, можливо, наприклад, написання bash-скрипту та збереження даних у змінну. @lalo
Nicolai

ось вихідний код, але не розумію, де --formatдоступні варіанти: github.com/wp-cli/wp-cli/blob/master/php/commands/…
lalo
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.