Si hay un archivo de configuración esencial en toda instalación de WordPress, ese es el archivo wp-config.php
El archivo ‘wp-config.php‘ es uno de los componentes más fundamentales y estratégicos de cualquier sitio web de WordPress. Este archivo de configuración, escrito en PHP, contiene parámetros esenciales que dictan cómo interactúa WordPress con su base de datos, cómo gestiona la autenticación de usuarios, y cómo maneja diversos aspectos de la seguridad y la personalización del sitio. Aunque no es un archivo que ejecute una gran cantidad de código, su correcta configuración es esencial para el funcionamiento seguro y eficiente de un sitio web. En este artículo técnico, exploraremos en detalle su ubicación, importancia, usos comunes, códigos relevantes, y las mejores prácticas para trabajar con él sin comprometer la integridad de tu web.
El archivo ‘wp-config.php’ se encuentra en el directorio raíz de tu instalación de WordPress, compartiendo nivel que los archivos principales del sistema (‘wp-admin’, ‘wp-content’ y ‘wp-includes’). Su papel es crítico, ya que almacena información vital, como las credenciales de acceso a la base de datos y las claves de seguridad. Entre sus funciones principales se incluyen el establecimiento de una conexión segura con la base de datos y la configuración de parámetros de seguridad y personalización que afectan a toda la instalación.
Además de las credenciales de la base de datos (nombre de la base de datos, usuario y contraseña), el archivo ‘wp-config.php’ contiene las claves de seguridad únicas y secretas que WordPress utiliza para cifrar y proteger los datos almacenados en las cookies y otras áreas sensibles. Estas claves son cruciales para prevenir ataques maliciosos y fortalecer la seguridad general de tu sitio.
Otro aspecto importante es la configuración del prefijo de las tablas en la base de datos de WordPress, que se define en este archivo. El uso de un prefijo personalizado, en lugar del predeterminado ‘wp_’, agrega una capa adicional de seguridad al dificultar los ataques dirigidos a la base de datos. Esta es una de las recomendaciones más comunes para mejorar la seguridad básica en cualquier instalación de WordPress.
Por último, el archivo ‘wp-config.php’ permite la definición de constantes personalizadas y ajustes específicos para el sitio, como el idioma, el límite de memoria de PHP, el modo de depuración, y la gestión de la caché, entre otros. Estos parámetros son fundamentales para adaptar el rendimiento y la funcionalidad de WordPress a las necesidades específicas de cada sitio.
Entendiendo la estructura del archivo wp-config.php predeterminado
El archivo ‘wp-config.php’ comienza con la configuración de la base de datos, que incluye el nombre de la base de datos, el usuario, la contraseña y el host de la base de datos. Este es el primer y más importante conjunto de parámetros que asegura que WordPress pueda conectarse a la base de datos de manera correcta y segura.
<?php
/**
* Configuración básica de WordPress.
*
* Este archivo contiene las siguientes configuraciones: ajustes de MySQL, prefijo de tablas,
* claves secretas, idioma de WordPress y ABSPATH. Para obtener más información,
* visita la página del Codex{@link https://codex.wordpress.org/Editing_wp-config.php Editing
* wp-config.php} . Los ajustes de MySQL te los proporcionará tu proveedor de alojamiento web.
*
* This file is used by the wp-config.php creation script during the
* installation. You don't have to use the web site, you can just copy this file
* to "wp-config.php" and fill in the values.
*
* @package WordPress
*/
// ** Ajustes de MySQL. Solicita estos datos a tu proveedor de alojamiento web. ** //
/** El nombre de tu base de datos de WordPress */
define('DB_NAME', 'tu-base-de-datos');
/** Tu nombre de usuario de MySQL */
define('DB_USER', 'tu-nombre-de-usuario');
/** Tu contraseña de MySQL */
define('DB_PASSWORD', 'tu-contraseña');
/** Host de MySQL */
define('DB_HOST', 'localhost');
/** Codificación de caracteres para la base de datos. */
define('DB_CHARSET', 'utf8');
/** Cotejamiento de la base de datos. No lo modifiques si tienes dudas. */
define('DB_COLLATE', '');
/**#@+
* Claves únicas de autentificación.
*
* Define cada clave secreta con una frase aleatoria distinta.
* Puedes generarlas usando el {@link https://api.wordpress.org/secret-key/1.1/salt/ servicio de claves secretas de WordPress}
* Puedes cambiar las claves en cualquier momento para invalidar todas las cookies existentes. Esto forzará a todos los usuarios a volver a hacer login.
*
* @since 2.6.0
*/
define('AUTH_KEY', 'clave_única');
define('SECURE_AUTH_KEY', 'clave_única');
define('LOGGED_IN_KEY', 'clave_única');
define('NONCE_KEY', 'clave_única');
define('AUTH_SALT', 'clave_única');
define('SECURE_AUTH_SALT', 'clave_única');
define('LOGGED_IN_SALT', 'clave_única');
define('NONCE_SALT', 'clave_única');
/*#@-/
/**
* Prefijo de la base de datos de WordPress.
*
* Cambia el prefijo si deseas instalar multiples blogs en una sola base de datos.
* Emplea solo números, letras y guión bajo.
*/
$table_prefix = 'wp_';
/**
* Para desarrolladores: modo debug de WordPress.
*
* Cambia esto a true para activar la muestra de avisos durante el desarrollo.
* Se recomienda encarecidamente a los desarrolladores de temas y plugins que usen WP_DEBUG
* en sus entornos de desarrollo.
*/
define('WP_DEBUG', false);
/* ¡Eso es todo, deja de editar! Feliz blogging */
/** WordPress absolute path to the Wordpress directory. */
if ( !defined('ABSPATH') )
define('ABSPATH', dirname(__FILE__) . '/');
/** Sets up WordPress vars and included files. */
require_once(ABSPATH . 'wp-settings.php');
Códigos clave en el archivo wp-config.php
En este apartado, exploramos algunos de los códigos más importantes y relevantes que pueden ser incluidos o modificados en el archivo ‘wp-config.php’ para personalizar y optimizar tu instalación de WordPress. Hay más de los que aquí aparecen, e igualmente, muchos van poco quedándose sin uso (deprecated). Es fundamental comprender cómo y cuándo utilizar estos códigos para evitar errores que puedan comprometer la seguridad o el rendimiento del sitio. En este enlace puedes encontrar toda la documentación oficial de WordPress.
Definir la configuración de la base de datos:
Este código establece las credenciales y la configuración necesarias para que WordPress se conecte correctamente a la base de datos.
DB_NAME: nombre de la base de datos.
DB_USER: nombre de usuario de conexión a la base de datos.
DB_PASSWORD: contraseña de conexión a la base de datos.
DB_HOST: host o servidor MySQL donde se encuentra la base de datos.
DB_CHARSET: codificación de caracteres.
DB_COLLATE: intercalación de la base de datos (orden de clasificación del conjunto de caracteres). Este parámetro es adicional. Para webs de España, si DB_CHARSET está configurado como UTF8 no debería ser necesario.
define('DB_NAME', 'nombre_base_de_datos');
define('DB_USER', 'nombre_usuario');
define('DB_PASSWORD', 'contraseña');
define('DB_HOST', 'localhost');
define('DB_CHARSET', 'utf8');
define('DB_COLLATE', ' ');
Definir las claves de seguridad:
Las claves de seguridad son un conjunto claves secretas aleatorias que sirven para proteger las sesiones y las cookies de WordPress. Una clave secreta hace que el sitio sea más difícil de atacar con éxito añadiendo elementos aleatorios a la contraseña. En términos sencillos, una clave secreta es una contraseña con elementos que dificultan la generación de suficientes opciones para romper sus barreras de seguridad. Una contraseña común, como «password», «test» o «1234abc» es simple y fácil de romper. Una contraseña aleatoria y larga que no utilice palabras comunes ni secuencias lógicas, como «KmDTqNrFjLf2SS3wE6GSgZpsRbftCTPEsgFvNvVV», le llevaría a un atacante de fuerza bruta millones de horas descifrarla. Una buena opción para generar las claves automáticamente es este generador online.
Las cuatro claves son necesarias para mejorar la seguridad. Las cuatro se recomiendan, pero no son necesarias, porque WordPress generará las claves por ti si no las defines manualmente.
Consejo: Utiliza un generador de claves de seguridad para crear combinaciones fuertes y únicas que mejoren la protección de tu sitio.
define('AUTH_KEY', 'clave_única');
define('SECURE_AUTH_KEY', 'clave_única');
define('LOGGED_IN_KEY', 'clave_única');
define('NONCE_KEY', 'clave_única');
define('AUTH_SALT', 'clave_única');
define('SECURE_AUTH_SALT', 'clave_única');
define('LOGGED_IN_SALT', 'clave_única');
define('NONCE_SALT', 'clave_única');
Cambiar el prefijo de tabla (opcional pero recomendado):
De forma predefinida, el prefijo para las tablas de la base de datos de WordPress es ‘wp_’. Modificar este prefijo es una medida de seguridad recomendada que ayuda a proteger tu base de datos de ataques automatizados. Sin embargo, es importante no realizar nunca este cambio desde el archivo ‘wp-config.php’ una vez WordPress ya está instalado, sino utilizar herramientas o plugins específicos. Hay, además, plugins de seguridad que tienen la opción de hacerlo o que lo cambian automáticamente.
$table_prefix = 'wp_';
Activar el modo debug:
El modo de depuración controla, mediante el parámetro WP_DEBUG, el reporte de algunos errores y advertencias, y habilita el uso de las opciones WP_DEBUG_DISPLAY y WP_DEBUG_LOG. Este modo permite que podamos ver los errores que ocurren en nuestro sitio para identificarlos y así poder repararlos. Si queremos activarlo debemos cambiar el parámetro a TRUE.
Consejo: Utiliza el modo debug en entornos de desarrollo, no en sitios en producción, para evitar mostrar errores a los usuarios finales.
define('WP_DEBUG', false);
// Debug de los scripts y las hojas de estilo CSS
define( 'SCRIPT_DEBUG', true );
// Guardar los errores en un archivo log txt
define( 'WP_DEBUG_LOG', true );
// Mostrar en pantalla todos los errores que recoge el modo debug
define( 'WP_DEBUG_DISPLAY', true );
Opciones avanzadas y de rendimiento:
WP_SITEURL: permite definir la URL de WordPress, es decir, la dirección donde residen los archivos del núcleo. No cambia el valor de ‘siteurl’ en la base de datos, sino que lo anula.
WP_HOME: similar a WP_SITEURL, permite modificar temporalmente la URL de la home de WordPress, sin modificar la opción ‘siteurl’ en la base de datos.
WP_CONTENT_DIR: especifica la ruta en la que se guarda el contenido de WP-CONTENT (desde el directorio local).
WP_CONTENT_URL: especifica la ruta en la que se guarda el contenido de WP-CONTENT (desde la URL del sitio).
WP_PLUGIN_DIR: personaliza la ubicación y el nombre de la carpeta de plugins (desde el directorio local).
WP_PLUGIN_URL: personaliza la ubicación y el nombre de la carpeta de plugins (desde la URL del sitio).
UPLOADS: cambia la localización de la carpeta donde se guardan los archivos de medios (imágenes, PDFs…).
AUTOSAVE_INTERVAL: cuando se edita una entrada, WordPress usa AJAX para hacer un guardado automático de las revisiones de la entrada a medida que se va editando, haciendo un uso intensivo de la API Heartbeat de WordPress (una sencilla API de sondeo del servidor integrada en WordPress, que permite actualizaciones del frontend casi en tiempo real.). Las revisiones se guardan en la base de datos, ocupando espacio. El tiempo entre autoguardados se puede cambiar con este parámetro. El valor por defecto es de 60 segundos. Si nuestro hosting no dispone de demasiados recursos y el guardado automático puede suponer un consumo elevado de los mismos, podemos personalizar el parámetro con un tiempo mayor de autoguardado.
WP_POST_REVISIONS: WordPress, por defecto, guardará copias de cada edición realizada en un post o página, permitiendo la posibilidad de revertir a una versión anterior de ese post o página. El guardado de revisiones puede desactivarse, o puede especificarse un número máximo de revisiones por entrada o página.
EMPTY_TRASH_DAYS: constante que define el número de días tras los cuales WordPress borra permanentemente el contenido descartado (entradas, páginas, adjuntos, comentarios…).
COOKIE_DOMAIN: el dominio establecido en las cookies para WordPress se puede especificar para aquellos que tengan configuraciones de dominio inusuales. Si por ejemplo se utilizan subdominios para servir contenido estático, se puede establecer el dominio de las cookies solamente en el dominio no estático para evitar que se envíen las cookies de WordPress con cada solicitud de contenido estático en su subdominio.
WP_ALLOW_MULTISITE: habilita la funcionalidad multisitio (varias subinstalaciones de WordPress que comparten una misma base de datos). Si no se especifica, por defecto es FALSE.
NOBLOGREDIRECT: se puede utilizar para redirigir el navegador si el visitante intenta acceder a un subdominio o una subcarpeta inexistentes.
WP_DISABLE_FATAL_ERROR_HANDLER: el Modo de Recuperación muestra un mensaje de error en lugar de una pantalla blanca cuando los plugins causan un error fatal («El sitio está experimentando dificultades técnicas. Por favor, compruebe la bandeja de entrada de correo electrónico del administrador del sitio para obtener instrucciones»). Las pantallas blancas y los mensajes de error PHP ya no se muestran a los usuarios. Pero en un entorno de desarrollo, si desea habilitar WP_DEBUG_DISPLAY, tiene que desactivar el modo de recuperación estableciendo TRUE para la variable WP_DISABLE_FATAL_ERROR_HANDLER.
WP_ENVIRONMENT_TYPE: controla el tipo de entorno para un sitio (local, development, staging y production). Si el valor de un tipo de entorno proporcionado no está en la lista de tipos de entorno permitidos, se devolverá el valor de producción por defecto.
CONCATENATE_SCRIPTS: para que las pantallas de administración sean más rápidas, todos los archivos JavaScript se concatenan en uno mismo, en una misma una URL. No afecta al frontend, solo se refiere al backend, para hacerlo más rápido.
define( 'WP_SITEURL', 'https://ejemplo.com/wordpress' );
define( 'WP_HOME', 'https://ejemplo.com/wordpress' );
define( 'WP_CONTENT_DIR', dirname(__FILE__) . '/blog/wp-content' );
define( 'WP_CONTENT_URL', 'https://ejemplo/blog/wp-content' );
define( 'WP_PLUGIN_DIR', dirname(__FILE__) . '/blog/wp-content/plugins' );
define( 'WP_PLUGIN_URL', 'https://example/blog/wp-content/plugins' );
// La siguiente línea debe añadirse antes de require_once(ABSPATH . 'wp-settings.php');
define( 'UPLOADS', 'wp-content/media' );
define( 'AUTOSAVE_INTERVAL', 60 ); // Tiempo en segundos
// Deshabilitar revisiones
define( 'WP_POST_REVISIONS', false );
// Especificar el número de revisiones
define( 'WP_POST_REVISIONS', 5 );
define( 'EMPTY_TRASH_DAYS', 10 ); // Tiempo en días
define( 'COOKIE_DOMAIN', 'www.ejemplo.com' );
define( 'WP_ALLOW_MULTISITE', true );
define( 'NOBLOGREDIRECT', 'http://ejemplo.com' );
define( 'WP_DISABLE_FATAL_ERROR_HANDLER', true ); // WordPress 5.2 y posteriores define( 'WP_DEBUG', true );
define( 'WP_DEBUG_DISPLAY', true );
define( 'WP_ENVIRONMENT_TYPE', 'staging' );
define( 'CONCATENATE_SCRIPTS', false );
Opciones de memoria asignada a PHP:
Por defecto, WordPress establece un límite de memoria máximo de 40M, pero el tamaño de memoria depende siempre de la configuración del servidor. Los parámetros establecidos dependerán de que el servidor lo permita.
WP_MEMORY_LIMIT: establece el límite de la memoria RAM utilizable por cada proceso PHP.
WP_MAX_MEMORY_LIMIT: establece el máximo de memoria RAM utilizable en el backend de WordPress.
define( 'WP_MEMORY_LIMIT', '256M' );
define( 'WP_MAX_MEMORY_LIMIT', '512M' );
Opciones de caché:
Casi todos los plugins de caché, para gestionar la caché de la web, utilizan tanto el archivo ‘wp-config.php’ como el archivo ‘advanced-cache.php‘. Para que los plugins de caché que instalemos puedan funcionar correctamente la constante WP_CACHE debe estar activada en ‘wp-config.php’. Si el plugin que usamos necesita esta configuración, se encarga de manera de automática de insertar esta línea en ‘wp-config.php’.
define( 'WP_CACHE', true );
Otras Opciones del archivo wp-config.php:
WPLANG: define el nombre del fichero de traducción del idioma (.mo).
WP_LANG_DIR: define en qué directorio reside el archivo .mo de WPLANG. Si WP_LANG_DIR no está definido WordPress busca primero en wp-content/languages y luego en wp-includes/languages el archivo .mo definido por WPLANG.
SAVEQUERIES: la definición SAVEQUERIES guarda las consultas de la base de datos en un array y ese array puede mostrarse para ayudar a analizar esas consultas. La información guarda cada consulta, qué función la llamó y cuánto tiempo tardó en ejecutarse.
FS_CHMOD_DIR: especifica qué permisos le otorgamos a los directorios de instalación de WordPress (recomendado 755).
FS_CHMOD_FILE: especifica qué permisos le otorgamos a los archivos de instalación de WordPress (recomendado 644).
DISABLE_WP_CRON: deshabilita completamente el WP-CRON de WordPress.
WP_ALLOW_REPAIR: optimización automática de la base de datos. Se recomienda activar solo en caso necesario, y desactivar cuando se haya solucionado el problema.
DISALLOW_FILE_EDIT: deshabilita el editor de archivos de plugins y temas. Buena opción para evitar que otros usuarios puedan editar archivos importantes con lo que ello puede conllevar. Además, proporciona una capa de seguridad adicional.
DISALLOW_FILE_MODS: deshabilita la actualización e instalación de plugins y temas. Bloquea que los usuarios puedan usar la funcionalidad de instalación/actualización de plugins y temas desde el área de administración de WordPress. Establecer esta constante también desactiva el editor de archivos de plugins y temas (es decir, no necesitas establecer DISALLOW_FILE_MODS y DISALLOW_FILE_EDIT, ya que por sí solo DISALLOW_FILE_MODS tiene el mismo efecto).
AUTOMATIC_UPDATER_DISABLED: desactiva todas las actualizaciones automáticas.
WP_AUTO_UPDATE_CORE: configura actualizaciones automáticas del núcleo de WordPress (true, para activar todas; false, para desactivar todas; y la opción por defecto, minor, para activar solo las actualizaciones menores).
IMAGE_EDIT_OVERWRITE: cada vez que se edita una imagen, WordPress crea por defecto un nuevo conjunto de imágenes, y cuando restaura la original guarda todas las ediciones y modificaciones. Al determinar esta opción como TRUE solo se crea un conjunto de ediciones de imágenes, es decir, se sobreescriben al editarlas, y cuando se restaura la original, las nuevas ediciones se eliminan del servidor.
define( 'WPLANG', 'de_DE' );
define( 'WP_LANG_DIR', dirname(__FILE__) . 'wordpress/languages' );
define( 'FS_CHMOD_DIR', ( 0755 & ~ umask() ) );
define( 'FS_CHMOD_FILE', ( 0644 & ~ umask() ) );
define( 'DISABLE_WP_CRON', true );
define( 'WP_ALLOW_REPAIR', true );
define( 'DISALLOW_FILE_EDIT', true );
define( 'DISALLOW_FILE_MODS', true );
define( 'AUTOMATIC_UPDATER_DISABLED', true );
define( 'WP_AUTO_UPDATE_CORE', false ); // True
define( 'IMAGE_EDIT_OVERWRITE', true );
Prácticas recomendadas para trabajar con el archivo wp-config.php
Importante: antes de realizar cualquier modificación en el archivo ‘wp-config.php’, es absolutamente esencial realizar una copia de seguridad completa tanto de este archivo como de toda la instalación de WordPress. Esto te permitirá restaurar la funcionalidad del sitio en caso de que algo salga mal. Es un archivo de vital importancia. Para editarlo, asegúrate de no introducir espacios adicionales, errores de sintaxis o caracteres no deseados. El menor error puede provocar errores críticos en el sitio web.
Consejo: Usa un editor de código seguro y evita introducir espacios en blanco adicionales, errores de sintaxis, o caracteres no deseados, ya que el más mínimo error puede causar fallos críticos en tu sitio web.
Para garantizar la seguridad de tu sitio web, evita compartir el archivo ‘wp-config.php’ de forma no responsable. Asegúrate siempre de configurar permisos de archivo adecuados (por ejemplo, 400 o 440) para evitar accesos no autorizados.
Consecuencias de un mal uso:
Modificar incorrectamente los detalles de conexión de la base de datos en el archivo ‘wp-config.php’ puede resultar en errores de conexión que impidan que WordPress funcione correctamente. El sitio web de WordPress no podrá establecer vinculación con la base de datos, le será imposible conectar, y esto desembocará en errores de conexión y, por tanto, la imposibilidad de acceder a la web.
Además, no actualizar las claves de seguridad o no cambiar el prefijo de las tablas aumenta la vulnerabilidad de tu sitio ante ataques. Otros errores en las constantes o configuraciones personalizadas pueden llevar a problemas de rendimiento o funcionalidades inesperadas, afectando negativamente la experiencia del usuario.
En resumen, el archivo ‘wp-config.php’ es una pieza esencial del rompecabezas que es WordPress. Entender y manejar este archivo con cuidado es vital para asegurar que tu sitio web funcione de manera eficiente y segura.