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’.