Problema de WordPress con get_option y update_option al pasar false en el parámetro $value

1 minuto de lectura

He encontrado un problema extraño con get_option y update_option. Necesitaba agregar una opción a wp_options mesa así que usé esto

update_option('_option_key_index', false), pero esto nunca agrega un registro en la base de datos. pero si paso update_option('_option_key_index', 0) se agrega el registro.

Inspección adicional de la función principal update_action revela algo extraño. El valor false en realidad se trata como una cadena vacía, mientras que true ¡no es! Así que cuando estoy pasando false por una clave que sé que aún no existe, get_option devuelve una cadena vacía ($old_value = get_option( $option );), que al compararse en el siguiente fragmento:

if ( $value === $old_value )
   return false;

siempre vuelve false ¡y por lo tanto no se agrega ningún registro a la base de datos!

La pregunta es por qué WordPress está tratando el valor booleano false como una cadena vacía mientras que no es lo mismo para el valor true ?

A continuación se muestra una lista de valores con los que probé y los resultados que obtuve:

true: works. Value added is 1
1: works. Value added is 1
false: does not work - No record added
0: works - Value added is 0
'true': works. Value added is true (passed as string)
'false': works. Value added is false (passed as string)

Cuando PHP lanza booleano como una cadena, false convertirse en ” (cadena vacía) mientras true convertirse en ‘1’ (cadena).

Dado que WordPress está basado en PHP, es posible que deba ceñirse a 1/0 o true/false (como una cadena) para diferenciar un ‘booleano’.

¿Ha sido útil esta solución?