comment mettre à jour les options sérialisées par programme?


15

Je veux automatiser la mise à jour des options du plugin. Il y a certaines choses que je répète souvent.

Avec wp-cli, je sais que je peux mettre à jour des options simples comme celle-ci:

php wp-cli.phar option update blog_public 1

Cependant, certaines options de plugin enregistrent leurs options dans une chaîne sérialisée.

Exemple de valeur_option sérialisée dans 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:"";}

Comment mettre à jour ces options?

Réponses:


14

Résolu moi-même, voici comment le faire:

Si vous souhaitez mettre à jour par programme les options sérialisées:

télécharger wp-cli depuis wp-cli.org

Découvrez quelle est la "clé" des options que vous utilisez. Dans cet exemple, la clé est "wp_smtp_options"

Si vous ne connaissez pas la clé, recherchez dans la table wp_options et essayez de la comprendre.

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

Maintenant que vous connaissez votre clé, utilisez cette commande pour enregistrer votre configuration dans le fichier json:

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

Chaque fois que vous souhaitez restaurer cette configuration, utilisez cette commande

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

Remarques:

  • fonctionne dans WAMPSERVER64
  • fonctionne avec des caractères unicode comme ñ á é
  • vous pouvez avoir votre fichier json avec des rembourrages et des espaces, pour plus de lisibilité

Ce serait bien de ne pas avoir à utiliser un fichier intermédiaire à cet effet. Quelqu'un sait-il comment le faire?


1
Merci - excellent travail. Si quelqu'un essaie d'écrire un script sans avoir besoin de fichiers externes, vous pouvez simplement mettre le json dans la option updateligne entre guillemets simples. Voir mon implémentation sur la ligne 61 ici: gist.github.com/squarecandy/cfdead55ca1d84496044
squarecandy

voir ma réponse pour un "one liner"
Laurent

13

WP-CLI est définitivement la réponse à cela après la mise à jour vers 1.4.0 qui a introduit les commandes pluck et patch pour accéder aux données sérialisées dans WordPress.

La commande pluck prend ce format pour récupérer les valeurs sérialisées

wp option pluck <key> <key-name>

Par exemple, dans l'option active_plugins, vous pouvez récupérer le premier élément

wp option pluck active_plugins 0

La commande patch prend ce format pour insérer, mettre à jour ou supprimer des valeurs sérialisées (l'action)

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

La suppression du premier active_plugin ressemblerait à ceci

wp option patch delete active_plugins 0

Le même pluck et le même patch ont également été ajoutés pour d'autres commandes comme postmeta, vous pouvez maintenant utiliser WP-CLI pour effectuer des boucles intéressantes pour mettre à jour par programmation les données sérialisées WordPress


2
Cela devrait être la réponse acceptée.
Evan Mattson

6

Voici comment je le fais dans un 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

La commande WP-CLIoption utilise l' API Options de WordPress pour faire son travail. Étant donné, par exemple, avec la sous-commande update, une entrée correcte, un array, vous devriez pouvoir le faire avec WP-CLI. Vous devez utiliser le --formatparamètre ici, pour vous assurer que vous obtenez le même, jsonfonctionne généralement bien pour la updatesous - commande. Remarque, la sous-commande getdoit vous renvoyer l'option non sérialisée, car l'API Options est utilisée, que vous pouvez ensuite enregistrer, modifier et / ou transférer / configurer sur d'autres / nouvelles installations.


Cela ne fonctionne pas: la wp option get wp_smtp_options > savedconfiguration.txt wp option update wp_smtp_options < savedconfiguration.txt première commande enregistre en tant que tableau, mais la seconde n'accepte pas de tableau. Je suppose que je devrais le sérialiser d'abord, savez-vous comment le faire?
lalo

Avez-vous essayé de tirer parti du formatparamètre? @lalo edit: viens de voir que vous avez compris ..
Nicolai

dans wp-cli.org ne dit pas quelles sont les options disponibles pour le formatparamètre. Je me demande si cela pourrait être possible sans avoir à utiliser un fichier intermédiaire comme je l'ai écrit dans ma réponse.
lalo

Vous devez regarder la source pour obtenir un aperçu complet du formatparamètre, qui diffère parfois de la (sous-) commande à la (sous-) commande. C'est sûrement possible, par exemple en écrivant un script bash et en stockant les données dans une variable. @lalo
Nicolai

voici le code source, mais je ne comprends pas où sont --formatles options disponibles: github.com/wp-cli/wp-cli/blob/master/php/commands/…
lalo
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.