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

12

Je souhaite automatiser la mise à jour des options du plug-in. Il y a des 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 plug-in enregistrent leurs options dans une chaîne sérialisée.

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

Comment mettre à jour ces options?

    
posée lalo 14.08.2015 - 18:51

4 réponses

11

Je l'ai résolu moi-même, voici comment procéder:

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

téléchargez wp-cli à partir de wp-cli.org

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

Si vous ne connaissez pas la clé, lancez une recherche 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 un fichier json:

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

Chaque fois que vous souhaitez que cette configuration soit restaurée, utilisez cette commande

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

Notes:

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

Ce serait bien de ne pas avoir à utiliser de fichier intermédiaire à cette fin. Est-ce que quelqu'un sait comment le faire?

    
réponse donnée lalo 21.08.2015 - 17:30
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 protected]";
$var->fromname = "me";
print json_encode($var);
' | wp option set wp_smtp_options --format=json
    
réponse donnée Laurent 21.12.2016 - 05:52
5

WP-CLI est définitivement la solution après la mise à jour à la version 1.4.0 qui introduisait le pluck patch des commandes permettant d'accéder aux données sérialisées dans WordPress.

La commande pluck prend ce format pour saisir des 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 actif_plugin ressemblerait à ceci

wp option patch delete active_plugins 0

Le même plume et le même correctif ont également été ajoutés pour d'autres commandes telles que postmeta. Vous pouvez maintenant utiliser WP-CLI pour créer des boucles sympas permettant de mettre à jour Données en série WordPress programmées

    
réponse donnée Mike Andreasen 04.12.2017 - 15:19
0

Commande WP-CLI option utilise la API Options de WordPress pour effectuer 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 ici le paramètre --format . Pour vous assurer que vous obtenez le même résultat, json fonctionne généralement bien pour la sous-commande update . Veuillez noter que la sous-commande get devrait vous renvoyer l'option non sérialisée, car l'API Options est utilisée. puis peut sauvegarder, modifier et / ou transférer / configurer sur d’autres / nouvelles installations.

    
réponse donnée Nicolai 14.08.2015 - 20:04

Lire d'autres questions sur les étiquettes