La importancia del archivo wp-config.php

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 fundamentales de un sitio web de WordPress. Se trata de un archivo de configuración crucial escrito en lenguaje PHP que contiene información esencial sobre la base de datos, la autenticación, la seguridad y diversas opciones de personalización. En realidad no es un archivo que ejecute una gran cantidad de código, pero alberga parámetros y variables que intervienen de manera básica para que una web construida con WordPress funcione. En este artículo técnico exploraremos en detalle dónde se encuentra ubicado, su importancia, usos comunes, códigos relevantes, consejos para trabajar con él y las consecuencias de no utilizarlo correctamente.

El archivo wp-config.php se encuentra en el directorio raíz de la instalación de WordPress. Por lo general, se ubica en el mismo nivel que los archivos principales de nuestra instalación (wp-admin, wp-content y wp-includes). Juega un papel crítico en el funcionamiento de un sitio web construido con WordPress, puesto que almacena información vital, como las credenciales de acceso a la base de datos y claves de seguridad. Una de sus principales funciones es permitir que WordPress establezca una conexión con la base de datos y ejecute correctamente todas sus funcionalidades.

Este archivo almacena los detalles de conexión de la base de datos, como el nombre de la base de datos, el nombre de usuario y la contraseña. Estos datos son necesarios para que WordPress se conecte a la base de datos y recupere la información requerida para generar y mostrar el contenido del sitio web.

Otro de sus usos fundamentales es contener las claves de seguridad únicas y secretas que se utilizan para cifrar y proteger los datos almacenados en las cookies y otras áreas sensibles de WordPress. Estas claves ayudan a prevenir ataques maliciosos y aumentan la seguridad general del sitio.

WordPress utiliza prefijos de tabla en su base de datos para diferenciar las tablas de un sitio web de WordPress de otras tablas que puedan existir en la misma base de datos. El archivo wp-config.php permite definir el prefijo de tabla utilizado por WordPress, lo que agrega una capa adicional de seguridad. Esta es una de las acciones preventivas recomendadas en toda instalación de WordPress que pretenda partir desde un punto de partida de seguridad básica.

El archivo wp-config.php también se utiliza para definir constantes personalizadas y ajustes específicos del sitio. Esto incluye configuraciones como el idioma del sitio, el límite de memoria de PHP, el modo de depuración, el almacenamiento en caché y muchos otros parámetros que influyen en el comportamiento del sitio.

Archivo wp-config.php predeterminado


<?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');

Algunos códigos relevantes

En este resumen intento recopilar algunos de los muchos parámetros que WordPress ofrece para poder editar el archivo wp-config.php. Están presentes los más importantes, y breves explicaciones para intentar aclarar para qué sirve cada uno y cómo se puede utilizar. Hay más de los que aquí aparecen, e igualmente, muchos van poco quedándose sin uso (deprecated). En este enlace puedes encontrar toda la documentación oficial de WordPress.

Definir la configuración de 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:

Son las claves secretas aleatorias que sirven para proteger las sesiones y las cookies. 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 recomiendan, pero no son necesarias, porque WordPress generará las claves por ti si no las defines manualmente.

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_’. Si consideras oportuno cambiar este prefijo no lo hagas nunca desde el archivo wp-config.php una vez ya está instalado WordPress. Puede hacerse mediante plugins, y además hay plugins de seguridad que tienen la opción de hacerlo y lo cambian automáticamente.

$table_prefix = 'wp_';

Activar el modo debug:

El modo debug 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.

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:

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 );

Trabajar con el archivo wp-config.php

Importante: antes de realizar cualquier modificación en el archivo wp-config.php, es fundamental realizar una copia de seguridad completa del archivo y de toda la instalación de WordPress. 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.

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.

¿Cuáles son las consecuencias de un uso incorrecto del archivo wp-config.php?

Lo primero, errores de conexión a la base de datos. Si se modifican incorrectamente los detalles de conexión de la base de datos en el archivo wp-config.php, el sitio web de WordPress no podrá establecer vincularse con la base de datos, le será imposible conectar, y esto desembocará en errores de conexión y, por tanto, la imposibilidad de acceder al sitio.

Igualmente, una configuración inadecuada en el archivo wp-config.php puede comprometer la seguridad del sitio web. Por ejemplo, no cambiar las claves de seguridad predeterminadas o los prefijos de las tablas de la base de datos aumenta el riesgo de ataques de fuerza bruta y violaciones de seguridad. Además, hay que tener en cuenta que modificar incorrectamente las constantes o ajustes personalizados en el archivo wp-config.php puede provocar comportamientos inesperados en el sitio web, errores de funcionalidad o problemas de rendimiento.

En definitiva, el archivo wp-config.php es esencial para el correcto funcionamiento de un sitio web de WordPress. Al contener información vital y opciones de configuración, debe ser manejado con cuidado y siguiendo las mejores prácticas. Al comprender su ubicación, usos comunes, códigos relevantes y las consecuencias de un uso incorrecto, los administradores de WordPress pueden aprovechar al máximo este archivo y mantener un sitio web seguro y eficiente.

Comenta este artículo

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll al inicio