Opciones
Inspecciona, actualiza y analiza opciones de WordPress con deserialización controlada, comprobación de compatibilidad de formato y gráficos de distribución de autoload.
El servicio Options proporciona utilidades de diagnóstico e inspección para las opciones de WordPress:
- Deserialización controlada: Restringe la deserialización a arrays, escalares e instancias de
stdClass(allowed_classes => false), previniendo la instanciación de clases arbitrarias. - Comprobación de compatibilidad de formato: Detecta el formato existente (serialización PHP frente a JSON) durante las actualizaciones para evitar conversiones accidentales.
- Invalidación de caché: Limpia tanto la caché de claves individuales como el grupo global
alloptionsal modificar opciones. - Análisis de distribución de autoload: Genera gráficos en Vega-Lite y tablas de desglose para las opciones configuradas con carga automática.
- Compatibilidad con Multisite: Permite gestionar opciones a nivel de red mediante
NetworkOptions.
Lectura de opciones
Options.get()
Recupera el valor de una opción y decodifica cadenas JSON o deserializa datos estructurados.
Options.get(
string:key,
mixed:default = null
): mixed
Comportamiento y detección de tipos
- Datos serializados: Si la cadena de la opción está serializada (por ejemplo, arrays u objetos), se procesa mediante un procedimiento riguroso de deserialización. Solo se permiten objetos
stdClassy tipos escalares/arrays estándar. Si se detecta un objeto de una clase no autorizada, se lanza una excepción. - Datos JSON: Si la cadena de la opción es un JSON válido (por ejemplo,
{"enabled": true}o[1, 2, 3]), se analiza y convierte en un arreglo asociativo o en un objeto. - Valores escalares: Cadenas, enteros, booleanos y nulos se devuelven sin alteración.
- Claves inexistentes: Devuelve
default(onullsi se omite).
Ejemplo
/* Recuperar arreglo de configuración de plugin o valor predeterminado */
Options.get('my_plugin_settings', { enabled: false, timeout: 30 })
/* Acceso a propiedades anidadas */
Options.get('active_plugins')
Options.get_raw()
Recupera la cadena exacta y sin modificar almacenada en la columna option_value de la tabla wp_options sin ejecutar ninguna deserialización ni decodificación JSON.
Options.get_raw(
string:key,
mixed:default = null
): ?string
Ejemplo
/* Inspeccionar contenido sin procesar en la base de datos para detectar serialización corrupta */
Options.get_raw('cron')
get_raw()La función get_raw() se utiliza al realizar auditorías forenses en opciones corruptas, comprobar la longitud de bytes de cadenas sin procesar o analizar bloques serializados sin deserializar.
Escritura y actualización de opciones
Todos los métodos de modificación (update, update_raw, delete) están bloqueados cuando la constante EXPRESSION_LAB_DATABASE_READONLY está configurada como true (valor predeterminado en producción). Para permitir modificaciones, define define( 'EXPRESSION_LAB_DATABASE_READONLY', false ); en tu wp-config.php.
Options.update()
Actualiza una opción existente o crea una nueva, aplicando estrictas comprobaciones de seguridad de serialización previas.
Options.update(
string:key,
mixed:value,
string:serialization_type = Options.FORMAT_SERIALIZED
): bool
Constantes de formato de serialización
| Constante | Valor | Descripción |
|---|---|---|
Options.FORMAT_SERIALIZED | 'serialized' | Predeterminado. Codifica arreglos y escalares utilizando la serialización estándar de PHP (serialize). |
Options.FORMAT_SERIALIZED_OBJECT | 'serialized_object' | Convierte el arreglo raíz en un objeto stdClass antes de serializar. |
Options.FORMAT_JSON | 'json' | Codifica el valor como una cadena JSON mediante wp_json_encode. |
Protecciones contra conflictos de formato
Para evitar la corrupción de datos:
- Si la opción en la base de datos se encuentra serializada con PHP,
Options.update()rechaza actualizarla conOptions.FORMAT_JSON. - Si la opción en la base de datos se encuentra en formato JSON,
Options.update()rechaza actualizarla conOptions.FORMAT_SERIALIZED. - Para forzar el reemplazo de formato, se debe utilizar
Options.update_raw().
Ejemplos
/* Almacenar ajustes estructurados de un plugin mediante serialización de PHP */
Options.update('my_plugin_settings', {
api_key: 'sk_live_12345',
debug_mode: true,
retries: 3
})
/* Almacenar ajustes formateados como JSON */
Options.update('my_app_state', { theme: 'dark', notifications: true }, Options.FORMAT_JSON)
Options.update_raw()
Realiza una inserción o actualización directa y de bajo nivel en la tabla wp_options. No serializa ni codifica en JSON $value.
Options.update_raw(
string:key,
string:value,
string|bool|null:autoload = null
): bool
Parámetros
key(string, requerido): El nombre de la opción.value(string, requerido): La carga útil en cadena de texto sin procesar a almacenar.autoload(string|bool|null, opcional): Controla si la opción se carga en memoria en cada solicitud de WordPress:'yes'otrue: La opción se autocarga en el conjunto globalalloptions.'no'ofalse: La opción se carga bajo demanda al ser solicitada.null: Si la opción ya existe, conserva su valor actual deautoload. Si se inserta un nuevo registro, se establece de forma predeterminada en'no'.