Cómo actualizar una opción 'array' usando wp-cli [duplicado]

2

Estoy intentando escribir un script de bash para automatizar la sincronización de un sitio en vivo con un sitio de desarrollo. Tengo los conceptos básicos resueltos, como exportar la base de datos de producción e importar / actualizar las URL en el sitio de desarrollo, pero necesito ayuda para actualizar una opción cuyos datos se guardan como una matriz.

Específicamente, quiero cambiar la configuración de Raya de Woocommerce usando wp-cli .

Puedo ver la opción usando wp-cli:

$ wp option get woocommerce_stripe_settings
array (
  'enabled' => 'yes',
  'title' => 'Credit Card (Stripe)',
  'description' => 'Pay with your credit card via Stripe.',
  'testmode' => 'no',
  'test_secret_key' => 'sk_test_xxxxxxxxxxxxxxxxxx',
  'test_publishable_key' => 'pk_test_xxxxxxxxxxxxxxxxxx',
  'secret_key' => 'sk_live_xxxxxxxxxxxxxxxxxx',
  'publishable_key' => 'pk_live_xxxxxxxxxxxxxxxxxx',
  'capture' => 'yes',
  'stripe_checkout' => 'no',
  'allow_remember_me' => 'yes',
  'stripe_checkout_locale' => 'en',
  'stripe_bitcoin' => 'no',
  'stripe_checkout_image' => '',
  'saved_cards' => 'yes',
  'logging' => 'no',
  'apple_pay_domain_set' => 'yes',
  'statement_descriptor' => 'Statement From',
  'request_payment_api' => 'no',
  'apple_pay' => 'yes',
  'apple_pay_button' => 'black',
  'apple_pay_button_lang' => 'en',
)

Intenté usar el valor serializado que se obtuvo al consultar directamente la base de datos, actualizando s:2:"no" a s:3:"yes" , pero eso no parecía guardar el valor correctamente:

wp option update woocommerce_stripe_settings 'a:22:{s:7:"enabled";s:3:"yes";s:5:"title";s:20:"Credit Card (Stripe)";s:11:"description";s:37:"Pay with your credit card via Stripe.";s:8:"testmode";s:3:"yes";s:15:"test_secret_key";s:32:"sk_test_xxxxxxxxxxxxxxxxxxxxxxxx";s:20:"test_publishable_key";s:32:"pk_test_xxxxxxxxxxxxxxxxxxxxxxxx";s:10:"secret_key";s:32:"sk_live_xxxxxxxxxxxxxxxxxxxxxxxx";s:15:"publishable_key";s:32:"pk_live_xxxxxxxxxxxxxxxxxxxxxxxx";s:7:"capture";s:3:"yes";s:15:"stripe_checkout";s:2:"no";s:17:"allow_remember_me";s:3:"yes";s:22:"stripe_checkout_locale";s:2:"en";s:14:"stripe_bitcoin";s:2:"no";s:21:"stripe_checkout_image";s:0:"";s:11:"saved_cards";s:3:"yes";s:7:"logging";s:2:"no";s:20:"apple_pay_domain_set";s:3:"yes";s:20:"statement_descriptor";s:50:"                                                  ";s:19:"request_payment_api";s:2:"no";s:9:"apple_pay";s:3:"yes";s:16:"apple_pay_button";s:5:"black";s:21:"apple_pay_button_lang";s:2:"en";}'

Además, la única información que quiero cambiar es de 'testmode' => 'no' a 'testmode' => 'yes' ; por lo tanto, una solución para hacer algo como codificar por hardware la matriz serializada no funcionará en mi situación, y de todos modos se siente realmente frágil a mi de todos modos

¿Hay una manera de actualizar solo un valor de una matriz usando wpcli? En mi mente se vería algo así como:

$ wp option update woocommerce_stripe_settings['testmode'] yes
    
pregunta passionsplay 18.05.2017 - 00:54

1 respuesta

6

Gracias a un consejo de milo en los comentarios anteriores, miré este pregunta similar .

Laurent proporciona una respuesta que básicamente obtiene la opción de usar wp-cli, la canaliza a un programa php en línea, realiza los ajustes y luego la canaliza nuevamente a wp-cli. Tomé esa idea y la generalicé un poco creando un hermano de archivo en mi script de clonación: update-array-option.sh .

#!/bin/bash

option_name=$1
option_key=$2
option_value=$3

wp option get ${option_name} --format=json | php -r "
\$option = json_decode( fgets(STDIN) );
\$option->${option_key} = \"${option_value}\";
print json_encode(\$option);
" | wp option set ${option_name} --format=json

El uso entonces se convierte en:

./update-array-option.sh <option-name> <option-key> <value>

Específicamente para esta pregunta:

./update-array-option.sh woocommerce_stripe_settings testmode yes

Obviamente, esto es rápido y sucio y no manejará todos los casos de borde. Se ve y se siente pesado al mezclar bash / php de esta manera, y como con todas las cosas relacionadas con las cadenas en bash, YMMV.

    
respondido por el passionsplay 19.05.2017 - 20:54

Lea otras preguntas en las etiquetas