Este artículo abarca todo lo referente a la API de options en WordPress para tener una guía rápida en castellano a la que acudir siempre que lo necesitemos. Además, incluye mucho más de lo que encontrarás en la documentación oficial.
Índice de Contenido
La tabla wp-options en WordPress
La tabla wp-options en WordPress es el lugar donde se almacenan un gran número de valores usados a todo lo largo y ancho de cualquier web hecha en este CMS.
Se almacenan valores tan variados como el mail del administrador, la cantidad de posts por página a mostrar, el rol de usuario asignado para nuevos registros, etc. Más abajo detallo un listado, a día de hoy completo, de los valores almacenados.
Cómo acceder a las Options de WordPress
Si preguntas a cualquier persona te dirá que para acceder a los valores de la tabla options necesitarás hacerlo a través de PhpMyAdmin, WP-CLI o a través de llamadas a la base de datos mediante código nativo o PHP. Y están en lo cierto, un truco que muy poca gente conoce es a través de un archivo llamado options.php. Más abajo en el artículo explico más sobre este desconocido archivo.
Qué funciones tenemos para gestionar la tabla options y sus valores
WordPress cuenta con una serie de funciones para gestionar los valores almacenados en la tabla options. Estas funciones son:
- add_option()
- delete_option()
- get_option()
- update_option()
- sanitize_option()
Cómo crear un nuevo valor en la tabla options
Para crear nuevos valores, o lo que es lo mismo, una nueva fila en la tabla options, contamos con la función:
add_option( 'nombre', 'valor', '', autoload );
El valor de autoload marcaría una gran diferencia en cuanto a rendimiento, ya que establece si este valor debe cargarse en cada carga de página de nuestra web. Por defecto está marcado como ‘yes’, y deberíamos marcarlo como ‘no’ en caso queramos evitar la carga automática.
Cómo eliminar un valor de la tabla options
Para eliminar un valor tan solo tendremos que usar la siguiente función con el nombre concreto:
delete_option( 'nombre' );
Obtener un valor de la tabla options
Para obtener un valor usaremos la función:
get_option( 'nombre', $default = false );
El valor ‘default’ es lo que se devolverá en caso de que esa option esté vacía.
bloginfo()
WordPress también cuenta con una función nativa que puede ser muy útil para obtener algunos valores de la tabla options. Esta función no es más que un switch
en el que se verifica qué valor se está solicitando, en el caso que sea un valor de wp-options, tan solo llamará a la función get_option(). Es por esto que, a nivel de rendimiento, siempre será mejor usar get_option() antes que bloginfo().
Actualizar un valor option
Si queremos actualizar un valor de la tabla options podremos hacerlo de un modo tan sencillo como el siguiente:
update_option( 'nombre', 'nuevo_valor' );
Un método alternativo para actualizar un valor de la tabla wp-options es mediante el archivo options.php, más abajo en el artículo explico cómo hacerlo.
Sanear valores predefinidos de la tabla options
Esta función nos ayudará a sanear un valor de la tabla option
sanitize_option( 'nombre', 'valor_a_sanear' );
Transients
Los transients son unos valores idénticos al resto de los de la tabla options. La única diferencia es que, además del nombre y el valor, se almacena una fila más haciendo referencia al tiempo de expiración de este valor.
Muy útiles para mejorar el rendimiento de nuestra web cuando hay llamadas a APIs externas o a nuestra base de datos. Puedes leer más en nuestro artículo Transients en WordPress, mejorando la eficiencia.
Cómo limpiar la tabla options
Uno de los principales quebraderos de cabeza llega cuando necesitamos optimizar la tabla options, y para hacerlo no queda otra que limpiarla. Aunque no suelo recomendar plugins por el impacto que tienen en el rendimiento, en este caso hacerlo manualmente sería un trabajo muy tedioso.
Aquí te recomiendo unos plugins gratuitos para limpiar la tabla options:
Qué contiene la tabla options
Si queremos conocer exactamente qué contiene esta tabla podemos visitar este enlace, donde se detalla de forma muy clara qué contiene esta tabla.
Optimización de la tabla options mediante index
Con cada carga de página de nuestra web tendrá que revisar una a una las filas de la tabla que contengan un valor ‘yes’ de autoload. Cuando nuestra tabla está saturada de información, y además no podemos borrarla, esta revisión constante hace que el tiempo de carga se vea notablemente afectado.
Pero no decaigamos, hay algunos truquitos para acelerar la revisión de nuestra tabla, uno de ellos sería el uso de memcached. Pero el más extendido es, sin lugar a dudas, la creación de un índice en la tabla options. En este artículo de Fernando Telllado se explica de forma muy clara y concisa cómo hacerlo.
Cuál es el límite de almacenamiento de los valores en la tabla options
El valor de las options está almacenado en una columna de tipo longtext, por lo que podrá almacenar hasta 4Gb.
La tabla options y los problemas de rendimiento
Como ya hemos mencionado, al crear una fila en la tabla options se puede definir el valor autoload. Este valor, a menos que se especifique lo contrario, hace que se carguen los valores con cada carga de la web. Esto quiere decir que cada vez que un usuario entra en nuestra web se realizará una consulta a la base de datos para obtener todos los valores con un autoload definido como true.
Cuando contamos con una web pequeña y pocos valores definidos en la tabla options, la consulta que se realiza en cada carga no debería suponer un problema. Los problemas llegan cuando la tabla options está sobrecargada por valores que, o son innecesarios de almacenar, o los valores están definidos con autoload sin realmente necesitarlo.
Para qué se suele usar la tabla options de WordPress
Además de usarse para almacenar una serie de valores, la tabla wp–options suele ser usada por un gran número de plugins.
Cuando una instalación de WordPress está gestionada por usuarios sin conocimientos técnicos avanzados se suelen instalar un gran número de plugins. También se suelen probar plugins sin tenerlos en la web de forma definitiva, instalando y desinstalando sin control alguno.
En muchos casos, los valores almacenados de plugins en esta tabla no son borrados al desinstalarse. Esto quiere decir que, con el tiempo, quedaría mucha basura provocando un impacto en el rendimiento de la web.
Cuántas options se guardan en un WordPress nuevo
He instalado la versión 6.2.2 en local y se ha creado una tabla options con:
- 147 filas
- 117 filas con autoload ‘yes’
- 31 filas con autoload ‘no’
- option_id hasta el valor 162
- Al exportar la tabla pesa 1,12Mb
Qué comandos WP-CLI tenemos para gestionar las options
A través de la consola de comandos también podemos gestionar la tabla options. A continuación te presentamos algunos comandos útiles:
- wp option add: Añade una nueva option
- wp option delete: Borra una option existente
- wp option get: Se obtiene el valor de una option
- wp option list: Se lista el valor y nombre de las options
- wp option patch: Actualiza un valor anidado en una option
- wp option pluck: Obtiene un valor anidado en una option
- wp option update: Actualiza el valor de una option
- option get-autoload: Obtiene el valor autoload de una option
- option set-autoload Define el valor autoload de una option
El archivo options.php
El archivo options.php se encuentra en la carpeta wp-admin de cualquier instalación de WordPress. Si hemos verificado nuestras credenciales de acceso de la web, y colocamos options.php en la URL, este archivo nos mostrará los nombres y valores almacenados en la tabla options sin necesidad de acceder vía PhpMyAdmin, PHP o MySQL. También podremos editar los valores de una forma muy sencilla.
Por ejemplo, para acceder por esta vía tendríamos que usar la siguiente URL:
https://midominio.com/wp-admin/options.php
El archivo option.php
Otro archivo a tener en cuenta es option.php, alojado en la carpeta wp-includes. Es en este archivo donde se definen la funciones relativas a la API options y transients de WordPress.
En WebHeroe trabajamos todos los aspectos de tu web, incluso hacemos desarrollo de plugins, para que todo esté perfecto en tu site.