Guardar y cargar datos en la tabla opciones de WordPress

Si usas WordPress como desarrollador sabrás que hay varias formas de almacenar datos sobre su base de datos sin necesidad de crear nuevas tablas. Hoy os voy a explicar una de ellas. Aparte de esta que voy a explicaros, existen básicamente dos más:
- Para guardar tipos de datos (menos usuarios) y sus metadatos (o atributos)
- Para guardar datos de usuarios y sus metadatos
Estructura
Esta en concreto usa la tabla opciones, wp_options o prefijo_options y para entender cómo usar las funciones y el objetivo de la misma, lo mejor es ver su forma. Esta tabla tiene la siguiente estructura:
- option_id: su clave primaria
- option_name: nombre de la opción
- option_value: valor de la opción
- option_autoload: indica si debe cargarse o no de primeras
Como veis, tenemos la estructura típica de las tablas hash: clave / valor con: option_name / option_value tan de moda ahora en bases de datos no relacionales y tan útiles.
Para qué sirve
A priori, la idea es: tengo un plugin o theme y quiero guardar un valor, por ejemplo, quiero guardar el color de fondo de los botones pues guardaría:
- option_name: codection_color_fondo_botones
- option_value: white
Sin embargo, gracias a la posibilidad de serializar datos, podemos meter arrays y listas en el valor, por lo que las posibilidades entonces crecen enormemente, en vez de guardar el color de fondo de los botones, podríamos guardar todas las opciones del tema:
- option_name: codection_opciones_tema
- option_value: array con opciones del tema
Cómo se usa
Tenemos las siguientes funciones, aunque hay más, me centro en las que suelo usar.
update_option($nombre_opción, $valor)
Tiene la enorme ventaja respecto a add_option de ser más flexible y valer tanto para guardar un dato como para actualizarlo. Si no existe lo crea automáticamente. El problema es que marcará autoload como verdadero y puede que no nos interese, por lo que habría que usar add_option que sí permite especificarlo (tienes aquí un ejemplo de cómo hacerlo).
Si valor es “sencillo”, lo guarda como tal, si es un array u objeto, lo guarda serializado (de forma transparente a nosotros).
Documentación y ejemplos en el enlace anterior que dirige a la página de la función en el Codex.
get_option($nombre_opción, $valor_por_defecto)
Recupera un valor por su nombre, si no lo encuentra, podemos pedirle que devuelva un valor por defecto. Si el dato es un array u objeto, automáticamente hará el proceso inverso a la serialización de forma transparente para nosotros.
Ejemplos, referencia completa y documentación como siempre en el Codex.
delete_option($nombre_opción)
Borra una opción de la base de datos por su nombre, útil para hacer uso de ella cuando desactivas un plugin o tema y no quieres dejar rastro. La referencia, aquí.