Ajustes básicos de wp-config.php: de la ubicación del archivo a la memoria y las revisiones

Aviso de afiliados v3.1
Aviso de afiliados v3.2 (móvil)

El archivo wp-config.php es el archivo de configuración más importante: en un sitio WordPress contiene la información esencial, todo lo que WordPress necesita para conectarse a su base de datos y funcionar, por lo que actúa como el corazón del sitio.

Ⅰ. Función de wp-config.php

Este archivo contiene los siguientes ajustes sensibles.

  • Datos de conexión a la base de datos
  • ↳ Incluye los datos necesarios para conectarse a la base de datos que guarda el contenido de WordPress, como el nombre de la base de datos MySQL o MariaDB, el usuario, la contraseña y el host.
  • Claves de seguridad y salts
  • ↳ Cadenas únicas y aleatorias que cifran las sesiones de inicio de sesión y las cookies de los usuarios. Sin estas claves, las sesiones no pueden mantenerse seguras.
  • Otros ajustes clave
  • ↳ Define constantes importantes que controlan el funcionamiento de WordPress, como el prefijo de tablas, activar o desactivar el modo de depuración y desactivar la edición de archivos.
Archivo wp-config.php de WordPress

Por eso, el archivo wp-config.php es el objetivo principal, lo primero que buscan los atacantes externos. Si sus permisos están mal configurados o su contenido queda expuesto, puede filtrarse toda la base de datos o perderse el control de administración, lo que supone una grave vulnerabilidad de seguridad. Por eso, el primer paso para reforzar la seguridad de WordPress es proteger este archivo.

1️⃣ Dónde está wp-config.php

wp-config.php está en la carpeta raíz donde se instaló WordPress, junto a las carpetas [wp-admin], [wp-content] y [wp-includes]. En un hosting con cPanel esa carpeta es [public_html]; este sitio lo tiene en [/home/uknew/www/wp-config.php] dentro de un VPS de Lightsail.

Si no ves el archivo en la carpeta raíz, revisa la carpeta de un nivel superior. WordPress busca wp-config.php primero en la carpeta de instalación y, si no está, lo carga desde la carpeta inmediatamente superior.

2️⃣ Cómo abrir wp-config.php

En el [Administrador de archivos] del panel de tu hosting, ve a la carpeta raíz, haz clic derecho en wp-config.php y elige [Edit]. Así puedes editarlo directamente en el navegador, sin otro programa.

Con un cliente FTP (FileZilla), descargas el archivo a tu ordenador, lo editas con un editor y lo vuelves a subir. Guarda una copia del original antes de subirlo para poder restaurarlo enseguida si algo falla.

En servidores como un VPS a los que accedes por SSH, ejecuta un editor seguido de la ruta del archivo, como con [vi]; [nano] lo abre de la misma forma.

vi /home/uknew/www/wp-config.php

3️⃣ wp-config-sample.php y la estructura básica

El paquete de WordPress recién descargado no trae wp-config.php, solo [wp-config-sample.php] en el mismo lugar. Al introducir los datos de la base de datos en la pantalla de instalación, WordPress crea wp-config.php a partir de este archivo; copiarlo y renombrarlo a mano da el mismo resultado.

define( 'DB_NAME', 'database_name_here' );
define( 'DB_USER', 'username_here' );
define( 'DB_PASSWORD', 'password_here' );
define( 'DB_HOST', 'localhost' );
define( 'DB_CHARSET', 'utf8mb4' );
define( 'DB_COLLATE', '' );

define( 'AUTH_KEY',         'put your unique phrase here' );
define( 'SECURE_AUTH_KEY',  'put your unique phrase here' );
define( 'LOGGED_IN_KEY',    'put your unique phrase here' );
define( 'NONCE_KEY',        'put your unique phrase here' );
define( 'AUTH_SALT',        'put your unique phrase here' );
define( 'SECURE_AUTH_SALT', 'put your unique phrase here' );
define( 'LOGGED_IN_SALT',   'put your unique phrase here' );
define( 'NONCE_SALT',       'put your unique phrase here' );

$table_prefix = 'wp_';

define( 'WP_DEBUG', false );

Las cuatro líneas [DB_NAME], [DB_USER], [DB_PASSWORD] y [DB_HOST] llevan los datos de la base de datos que te da el hosting. Si un solo valor es incorrecto, en lugar del sitio aparece el error [Error establishing a database connection].

Las ocho líneas de [AUTH_KEY] a [NONCE_SALT] cifran las cookies de inicio de sesión; genera un juego nuevo en [https://api.wordpress.org/secret-key/1.1/salt/] y sustitúyelas todas a la vez. Al cambiarlas se cierra la sesión de todos los usuarios conectados.

[$table_prefix] es el prefijo que se añade a los nombres de las tablas, [wp_] por defecto, y sirve para distinguir varias instalaciones de WordPress que comparten una base de datos. Si cambias [WP_DEBUG] a [true], se muestran los errores de PHP, que aparecen en pantalla, así que en un sitio en producción déjalo en [false].

Ⅱ. /* That’s all, stop editing! Happy publishing. */

Técnicamente, este comentario (/* That’s all, stop editing! Happy publishing. */) no cumple ninguna función especial como código PHP. Es solo un comentario.

Pero el equipo de WordPress lo dejó como una ‘señal‘ : un aviso a los usuarios de que “debajo de este comentario está el código esencial que WordPress necesita para funcionar, así que no lo toques”.

1️⃣ Clave: por qué el código va encima de este comentario

El archivo wp-config.php de WordPress termina con la siguiente estructura.

// (omitido: Base de datos (datos), Seguridad (claves), Tabla (prefijo) etc.)

/**
 * For developers: WordPress debugging mode.
 *
 * Change this to true to enable the display of notices during development.
 * It is strongly recommended that plugin and theme developers use WP_DEBUG
 * in their development environments.
 */
define( 'WP_DEBUG', false );
### 
/* That's all, stop editing! Happy publishing. */

/** 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' );
  1. Las constantes de configuración (define) van arriba: La mayoría de las constantes de configuración de WordPress (define) deben definirse /* That’s all, stop editing! Happy publishing. */ justo encima del comentario para que WordPress las cargue correctamente al inicializar su configuración.
  2. La carga de WordPress empieza abajo: Debajo de este comentario están la definición de [ABSPATH] y el código [require_once( ABSPATH . ‘wp-settings.php’ );]. Desde el momento en que se carga este archivo [wp-settings.php], las funciones principales de WordPress empiezan a ejecutarse.

Por eso, cuando añades ajustes adicionales (por ejemplo, desactivar la edición de archivos con [define(‘DISALLOW_FILE_EDIT’, true);] o fijar un límite de memoria con [define(‘WP_MEMORY_LIMIT’, ‘256M’);]), escríbelos para que se carguen antes, por delante del archivo de carga principal de WordPress, es decir, justo encima del comentario, para que se apliquen sin errores.

wp-config-sample.php tiene otro comentario, [Add any custom values between this line and the “stop editing” line.], justo encima del comentario [stop editing]; coloca tus propios ajustes entre estos dos comentarios.

Ⅲ. Ajustes básicos de wp-config.php tras instalar WordPress

1️⃣ Ajustes de Heartbeat

El ‘Heartbeat’ de WordPress es una señal que comprueba si el servidor y el sitio siguen conectados. La Heartbeat API usa 
/wp-admin/admin-ajax.php, a través del cual hace llamadas AJAX desde el navegador. En el escritorio de WordPress, este archivo envía una petición POST cada 15 segundos.

Puedes dejarlo activo solo en las pantallas del editor, [post.php]·[post-new.php].

Heartbeat no tiene una constante para wp-config.php, así que este archivo no puede controlarlo. Si pones el código de abajo en wp-config.php, se ejecuta antes de que WordPress cargue la función [add_action] y el sitio se detiene con el error [Call to undefined function add_action()].

WP Rocket: en la pestaña [Heartbeat], elige [Do not limit], [Reduce activity] o [Disable] para el backend, el editor de entradas y el frontend.

Pantalla de ajustes de Heartbeat de WP Rocket

Perfmatters: [Disable Heartbeat] define en qué pantallas se permite Heartbeat y [Heartbeat Frequency], el intervalo de las peticiones.

Ajustes de Heartbeat de Perfmatters

Si no usas ninguno de los dos plugins, no instales otro plugin solo para Heartbeat. Los plugins dejan sus ajustes en la base de datos incluso después de eliminarlos, así que pon el código de abajo en el [functions.php] de tu tema.

/** Disable Heartbeat everywhere except post editor */
add_action('init', function() {
    global $pagenow;
    if ($pagenow != 'post.php' && $pagenow != 'post-new.php') {
        wp_deregister_script('heartbeat');
    }
}, 1);

2️⃣ Ajustes de memoria de WordPress

El ajuste de memoria fija cuánta memoria puede usar WordPress en PHP, para evitar errores de falta de memoria (Fatal error: Allowed memory size exhausted) mientras se ejecutan temas o plugins. Es decir, para que el sitio sea estable y no se exceda en recursos, es una protección básica.

La mayoría de los tutoriales de WordPress y la documentación oficial muestran solo [define(‘WP_MEMORY_LIMIT’, ‘256M’);].

/** Memory Limit for WordPress */
define('WP_MEMORY_LIMIT', '256M');      // frontend
define('WP_MAX_MEMORY_LIMIT', '512M');  // admin/backend

‘WP_MAX_MEMORY_LIMIT’ es un ajuste que permite más memoria en el backend que en el frontend.

WP_MEMORY_LIMIT es el “límite de memoria para los visitantes”,
y WP_MAX_MEMORY_LIMIT es el “límite ampliado para la administración y los procesos internos”.
Hay que configurar ambos para lograr un control completo de la memoria de WordPress.

Si el valor de wp-config.php es mayor que el de php.ini o el pool de PHP-FPM del servidor, se aplica la configuración del servidor.

3️⃣ Limitar las revisiones

Las revisiones de WordPress van acumulando versiones anteriores de cada entrada, lo que ralentiza el sitio. En sitios sin caché, e incluso con caché mientras trabajas en el escritorio, sobre todo al crear entradas o páginas, las páginas que ven los visitantes también pueden volverse lentas.

Por ejemplo, cuando el servidor usa alrededor del 50% de su CPU total, las páginas de los visitantes pueden ir más lentas sea cual sea el plugin de caché.

Por eso se desactivan las revisiones o se limita su número.

No hace falta instalar un plugin para fijar el número de revisiones. Una línea con una constante en wp-config.php hace lo mismo y no deja en la base de datos ajustes de plugins que luego haya que limpiar.

◽️️Desactivar las revisiones por completo

/** Disable Post Revisions completely */
define('WP_POST_REVISIONS', false);

◽️️Limitar las revisiones a un número fijo (p. ej., 3)

/** Limit Post Revisions to 3 per post */
define('WP_POST_REVISIONS', 3);

◽️️Ajustar el intervalo de autoguardado

WordPress guarda automáticamente las entradas cada minuto por defecto. Puedes ampliarlo, por ejemplo, de los 60 segundos por defecto a 5 minutos (300 segundos).

/** Increase autosave interval to 5 minutes */
define('AUTOSAVE_INTERVAL', 300);

Si usas WP Rocket o Perfmatters, también puedes gestionarlo desde sus pantallas de ajustes. WP Rocket: su opción [Revisions] en la pestaña [Database] elimina las revisiones acumuladas; no tiene un ajuste para limitar su número.

Pantalla de limpieza de revisiones de WP Rocket

Perfmatters: [Limit Post Revisions] fija cuántas revisiones guardar por entrada y [Autosave Interval], el intervalo de autoguardado.

Ajustes de límite de revisiones de Perfmatters

🔢 FAQ & contenido recomendado

Si a la línea que acabas de guardar le falta una comilla o un punto y coma, PHP no puede leer wp-config.php hasta el final y el sitio no abre. Restaura el original que guardaste antes de editar y revisa solo las líneas que cambiaste.

Nuestro artículo sobre la seguridad de wp-config.php: recomienda [600], que solo permite leer y escribir al propietario. En servidores donde PHP se ejecuta con una cuenta distinta a la del propietario, PHP no puede leer el archivo con 600, así que comprueba que el sitio abre justo después del cambio.

Al activarse, WP Rocket añade la línea [define( ‘WP_CACHE’, true ); // Added by WP Rocket] al principio del archivo; el wp-config.php de este sitio la tiene en la línea 2. WordPress solo carga el archivo de caché [advanced-cache.php] si esta línea existe.

Si la misma constante ya está definida más arriba en el archivo, PHP mantiene el primer valor y para la línea posterior solo deja el aviso [Constant WP_MEMORY_LIMIT already defined]. Busca el nombre de la constante en todo el archivo para encontrar líneas añadidas por tu hosting o un plugin.

ℹ️ Aviso de afiliados
El contenido de este sitio incluye enlaces de afiliado. Cuando un visitante compra un producto o servicio a través de uno de ellos, el sitio recibe una comisión del vendedor. El importe que paga el comprador(baja durante las promociones ↓)no aumenta. Los precios, descuentos y existencias publicados corresponden al momento de redacción y pueden variar, así que confírmalos con el vendedor antes de comprar. Los productos se eligen y evalúan con criterios propios, y las comisiones no influyen en el orden ni en el contenido de las reseñas.

Deja una respuesta

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

Demuestra que eres humano: 3   +   4   =