¿Cómo actualizar las opciones serializadas programáticamente?

12

Quiero automatizar la actualización de las opciones del complemento. Hay algunas cosas que repito mucho.

Con wp-cli sé que puedo actualizar opciones simples como esta:

php wp-cli.phar option update blog_public 1

Sin embargo, algunas opciones de complementos guardan sus opciones en una cadena serializada.

Ejemplo de opción_valor serializado en 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:"x[email protected]";s:8:"password";s:13:"xxx";s:10:"deactivate";s:0:"";}

¿Cómo actualizar esas opciones?

    
pregunta lalo 14.08.2015 - 18:51

4 respuestas

11

Lo resolví yo mismo, así es como lo hago:

Si desea actualizar mediante programación las opciones serializadas:

descargue wp-cli desde wp-cli.org

Averigüe cuál es la "clave" para las opciones que está usando. En este ejemplo, la clave es "wp_smtp_options"

Si no conoce la clave, busque en la tabla wp_options e intente descifrarla.

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

Ahora que conoce su clave, use este comando para guardar su configuración en el archivo json:

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

Cuando quiera que se restaure la configuración, use este comando

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

Notas:

  • funciona en WAMPSERVER64
  • funciona con caracteres Unicode como ñ á é
  • puede tener su archivo json con rellenos y espacios, para legibilidad

Sería genial no tener que usar un archivo intermedio para este propósito. ¿Alguien sabe cómo hacerlo?

    
respondido por el lalo 21.08.2015 - 17:30
6

Así es como lo hago en un script de 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
    
respondido por el Laurent 21.12.2016 - 05:52
5

WP-CLI es definitivamente la respuesta a esto después de la actualización a 1.4.0 que introdujo el pluck y parche para acceder a los datos serializados en WordPress.

El comando pluck toma este formato para capturar valores serializados

wp option pluck <key> <key-name>

Por ejemplo, en la opción active_plugins puedes tomar el primer elemento

wp option pluck active_plugins 0

El comando patch toma este formato para insertar, actualizar o eliminar valores serializados (la acción)

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

Eliminar el primer active_plugin se vería así

wp option patch delete active_plugins 0

También se agregaron la misma pulsación y parche para otros comandos como postmeta, ahora puede usar WP-CLI para hacer algunos bucles geniales para actualizar datos serializados de WordPress mediante programación

    
respondido por el Mike Andreasen 04.12.2017 - 15:19
0

El comando WP-CLI option usa WordPress ' API de Opciones para hacer su trabajo. Dado, por ejemplo con el subcomando update , una entrada correcta, un array , debería poder hacer esto con WP-CLI. Debería utilizar el parámetro --format aquí, para asegurarse de que obtiene el mismo, json generalmente funciona bien para el subcomando update . Tenga en cuenta que el subcomando get debería devolverle la opción sin serializar, ya que se utiliza la API de Opciones, que luego puede guardar, modificar y / o transferir / configurar en otras / nuevas instalaciones.

    
respondido por el Nicolai 14.08.2015 - 20:04

Lea otras preguntas en las etiquetas