Guardar y recuperar opciones con autoload desactivado
La tabla wp_options tiene un campo autoload que por defecto es yes, lo que significa que WordPress carga esas opciones en cada petición aunque no se necesiten. Para opciones con datos grandes (arrays de configuración, caches, etc.) es fundamental desactivar el autoload para no penalizar el rendimiento de toda la instalación.
Casos de uso: guardar configuraciones complejas de plugins, almacenar caches de datos de APIs externas, opciones que solo se leen en páginas específicas del admin.
<?php
function mi_plugin_guardar_opcion( $valor ) {
if ( get_option( 'mi_plugin_datos' ) !== false ) {
update_option( 'mi_plugin_datos', $valor, false );
} else {
add_option( 'mi_plugin_datos', $valor, '', 'no' );
}
}
function mi_plugin_get_opcion() {
return get_option( 'mi_plugin_datos', array() );
}
register_uninstall_hook( __FILE__, 'mi_plugin_limpiar' );
function mi_plugin_limpiar() {
delete_option( 'mi_plugin_datos' );
}
¿Qué hace cada parte?
- get_option() !== false: comprueba si la opción ya existe antes de decidir si usar
update_optionoadd_option.get_optiondevuelvefalsesi la opción no existe. - update_option( …, false ): el tercer parámetro desactiva el autoload en una opción existente. Solo disponible desde WordPress 4.2.
- add_option( …, », ‘no’ ): crea la opción con autoload desactivado desde el primer momento. Los parámetros son: nombre, valor, deprecated (dejar vacío) y autoload.
- get_option( …, array() ): el segundo parámetro es el valor por defecto que se devuelve si la opción no existe. Usar
array()facilita trabajar con el resultado sin comprobar el tipo. - register_uninstall_hook(): ejecuta la función de limpieza cuando el usuario desinstala el plugin desde el admin. Diferente a la desactivación — solo se llama cuando se hace clic en «Borrar».
- delete_option(): elimina la opción de la base de datos. Los plugins bien construidos limpian todos sus datos al desinstalarse.
