Archivo wp-config vitaminado: No te conformes con lo que viene por defecto, ¡optimízalo!

Archivo wp-config vitaminado: No te conformes con lo que viene por defecto, ¡optimízalo!

Como su propio nombre indica, el archivo wp-config es el encargado de contener los detalles de configuración de WordPress. Cuando instalamos una web, este archivo se crea con una configuración básica, pero, ¿por qué conformarte con eso? Vamos a ver, de qué forma puedes crear tu archivo wp-config vitaminado.

A lo largo de este artículo, me gustaría:

  • Explicarte qué es y para que sirve el archivo wp-config.
  • Mostrarte las distintas formas de crearlo.
  • Ver cómo es un archivo wp-config de una instalación de WordPress limpia.
  • Enseñarte algunos truquillos de configuración para que mejores el rendimiento y la seguridad de tu web.

Archivo wp-config vitaminado: No te conformes con lo que viene por defecto, ¡optimízalo!

¿Qué es y para que sirve el archivo wp-config?

Bueno, como te he dicho al principio del artículo, es el archivo en el que se guarda la configuración de WordPress. Este archivo lo puedes encontrar en la carpeta raíz de tu web, una vez hayas instalado WordPress. Es decir, que si acabas de descargarlo, pero aún no lo has instalado, no aparecerá.

¿Cómo puedes crear el archivo wp-config?

Pues muy fácil, como con todo en la vida, tienes dos opciones: de forma automática (que es como la hacen el 99% de los usuarios, incluido yo) y de forma manual.

La forma automática es crearlo a través de la instalación de WordPress. Cuando entras por primera vez en la URL de tu web, te sale la pantalla de configuración de WordPress. Después de rellenar toda la información que te pide, se genera el archivo wp-config.

La otra forma es duplicar el archivo wp-config-sample.php, renombrarlo con wp-config.php y editarlo con tu configuración.

¿Qué datos de configuración tiene el archivo wp-config.php en una instalación limpia de WordPress?

Parámetros de acceso a la base de datos

Esto es lo primero que vas a ver al abrir tu archivo wp-config.


define( 'DB_NAME', 'your-database-name' );
define( 'DB_USER', 'your-database-user' );
define( 'DB_PASSWORD', 'your-database-password' );

define( 'DB_HOST', 'localhost' );
define( 'DB_CHARSET', 'utf8' );
define( 'DB_COLLATE', '' );

Como puedes ver, estas constantes hacen referencia al nombre de la base de datos, el usuario y la contraseña de acceso, el servidor en el que está instalada, la codificación de caractéres y el cotejamiento.

Cuando instalas WordPress, estos parámetros se rellenan automáticamente, siempre y cuando hayas optado por crear el archivo wp-config de forma automática. De lo contrario, tendrás que rellenarlos tú de forma manual.

La información de los tres primeros variará en función de la base de datos de tu web, a no ser que tengas todas las instalaciones de WordPress en la misma base de datos (cosa que no te recomiendo), mientras que la información de los tres últimos suele ser común para todas las bases de datos.

Claves únicas de autentificación

Debajo de los parámetros de configuración de la base de datos, te vas a encontrar con las claves únicas de autentificación. Se podrían definir estas claves como contraseñas con elementos que hacen que sea más difícil su desencriptación, y por lo tanto, más difícil de romper la barrera de seguridad de una web.


define( 'AUTH_KEY', 'tu-frase-aleatoria-encriptada-aqui' );
define( 'SECURE_AUTH_KEY', 'tu-frase-aleatoria-encriptada-aqui' );
define( 'LOGGED_IN_KEY', 'tu-frase-aleatoria-encriptada-aqui' );
define( 'NONCE_KEY', 'tu-frase-aleatoria-encriptada-aqui' );

define( 'AUTH_SALT', 'tu-frase-aleatoria-encriptada-aqui' );
define( 'SECURE_AUTH_SALT', 'tu-frase-aleatoria-encriptada-aqui' );
define( 'LOGGED_IN_SALT', 'tu-frase-aleatoria-encriptada-aqui' );
define( 'NONCE_SALT', 'tu-frase-aleatoria-encriptada-aqui' );

Si has optado por la configuración manual del archivo wp-config, necesitás generar las claves para introducirlas aquí. Para ello, WordPress pone a tu disposición un generador online, para que no tengas que pensar en todos esos caractéres.

Por otro lado, también es recomendable que cambies estas claves cada cierto tiempo (un mes, por ejemplo) y así evitas la posibilidad de que algún listillo pueda hacerse con ellas.

Prefijo de la base de datos

A continuación, puedes encontrar el prefijo de las tablas de la base de datos.

$table_prefix = 'wp_';

WordPress está formado por 13 tablas básicas, más todas las que se puedan crear al instalar plugins… y algún que otro tema. El prefijo sirve para que, en el caso de querer utilizar la misma base de datos para varias instalaciones (cosa que ya te he dicho que no es recomendable), no se sobreescriban las tablas unas con otras.

Por otro lado, el hecho de cambiar el prefijo por defecto, también nos puede ayudar a evitar posibles ataques.

Modo de depuración de WordPress

Este es un parámetro muy útil, sobretodo si te dedicas a desarrollar plugins o temas para WordPress, ya que puede ocultarte (o mostrarte) errores de funcionamiento y compatibilidad, ya sea con otros plugins o con el propio core.

define( 'WP_DEBUG', false );

Por defecto, el modo depuración viene desactivado (y así debe estar en producción). Pero para hacer pruebas en tu entorno de trabajo local, lo ideal es activarlo, poniendo la constante en TRUE, y limpiar de incidencias tu código.

Ruta de la instalación de WordPress y del archivo donde se definen las variables y resto de archivos que se utilizan

Aunque esta información también está definida en el archivo wp-config.php, vas a hacer caso de lo que dice unas líneas más arriba y dejar de editar el archivo a partir de ahí. Editar estos archivos, e incluso estas líneas, sin conocimiento puede provocar que te cargues la web (y si tienes el conocimiento, mejor crear tu propio CMS / Framework y no juegues con el core de WordPress).

La información de la que te hablo es esta de aquí abajo:


if ( !defined( 'ABSPATH' ) )
define( 'ABSPATH', dirname( __FILE__ ) . '/' );

require_once( ABSPATH . 'wp-settings.php' );

Bueno, hasta ahora has podido ver qué es lo que trae el archivo wp-config de serie, pero no has venido hasta aquí para eso, ¿verdad? Vamos a ver como puedes darle chicha a esto:

Truquillos de configuración para mejorar el rendimiento y la seguridad de la web (vitaminando el archivo wp-config)

Evitar las actualizaciones automáticas

WordPress, por defecto, actualiza su núcleo de forma automática si no lo haces tú mismo. Aunque hay que actualizar siempre, tanto el núcleo, como los plugins y los temas, hay ocasiones en que hacerlo puede causar conflictos.

Por ese motivo, yo prefiero actualizar siempre de forma manual, haciendo una copia de seguridad previa, para que en caso de fallo, tenga la opción de volver a un estado anterior. Para desactivar las actualizaciones automáticas de WordPress, puedes utilizar la siguiente constante:

define( 'AUTOMATIC_UPDATER_DISABLED', true );

Activar y desactivar la caché de WordPress

Aunque cuando trabajas en local, el hecho de tener la caché activada te puede jugar alguna mala pasada a la hora de visualizar los cambios en el front, es cierto que en producción ayuda mucho para que la web cargue más rápido. Con estas tres constantes, podrás activar (o desactivar la cache) de nuestras webs, según lo necesitemos.


//Activar la caché
define( 'WP_CACHE', true );
define( 'ENABLE_CACHE', true );

//Desactivar la caché
define( 'WP_CACHE', false );
define( 'DISABLE_CACHE', true );

Limitar (o desactivar) las revisiones de WordPress

No sé si te has dado cuenta, de que cada vez que estás escribiendo una entrada y le das a guardar, aparece un mensaje justo encima del botón de publicar, que dice «X revisiones». Pues bien, eso son copias de la entrada que se guardan en la base de datos, a modo de control de versiones. Ahora, piensa en el número de veces que puedes hacer clic sobre «Guardar» cuando estás redactando una entrada. ¿Ponemos una media de 10? Suponiendo que tuvieses 100 entradas en tu blog, y dado que por cada una has guardado copias 10 veces, tienes 1000 registros en la base de datos. 1000 registros para solo 100 entradas. Te sobran 900. 900 registros ocupando un espacio valioso en tu base de datos. ¿Qué puedes hacer entonces?

Con esta constante, puedes limitar el número de revisiones que se crean al número que le indiques. De esta forma, cuando supere ese número, irá borrando copias de forma automática.

define( 'WP_POST_REVISIONS', 5 );

También puedes decirle que no guarde ninguna, estableciendo la constante a FALSE.

define( 'WP_POST_REVISIONS', false );

Vaciar la papelera de forma automática

Otra cosa que llena de basurilla (y nunca mejor dicho) la base de datos, son las entradas y contenidos que están en la papelera. ¿Acaso te pensabas que por eliminarlos dejaban de existir? Pues no, simplemente desaparecen de tu vista, pero siguen estando ahí, ocupando espacio.

Pero claro, al eliminarlas, como no las ves, se te olvidan y descuidas vaciar la papelera. Y luego pasa lo que pasa, que se te llena la base de datos y llamas cabreado al servicio técnico diciendo «Pero si yo solo tengo 20 páginas en mi web, ¿cómo es posible que no me quede espacio en la base de datos?»

Pero tranquilos, que si tú también tienes memoria de pez como yo, hay una solución. Añadiendo esta línea en nuestro archivo wp-config, podrás decirle a WordPress que vacie la papelera de forma automática cada X días (yo recomiendo poner una semana, para que así te de tiempo a recapacitar si realmente quieres eliminar ese contenido o no).

define( 'EMPTY_TRASH_DAYS', 7 );

Evitar que se generen copias innecesarias de las imágenes

Y continuando con los residuos que genera WordPress, no sé si alguna vez has editado una imagen desde el backoffice de la web. Personalmente, no me gusta utilizar WordPress para eso, pues además de que crea copias innecesarias que ocupan espacio en el servidor, les asigna un nombre nada amigable para el SEO, así que prefiero hacerlo desde un editor de imágenes como PhotoShop.

Pero como para gustos hay colores, te voy a enseñar un truquillo para que no se creen nuevas copias de la imagen al editarla, sino que se sobreescriba (para el nombre, no conozco ninguna solución… aún). Añadiendo esta línea, las imágenes resultantes de una edición sobreescribirán a las originales.

define( 'IMAGE_EDIT_OVERWRITE', true );

Definir las URLs de la home y del sitio web

Creo que ya sabes, que si haces clic sobre «Ajustes > Generales» en el backoffice de tu web, dos de las opciones que te aparecen son la de cambiar la URL de WordPress y del sitio web (que no tiene por qué ser siempre la misma). Obviamente tú, como profesional, sabes que ahí no hay que tocar, salvo que sea estrictamente necesario. Pero sabiendo que un usuario sin experiencia puede querer jugar con lo que no debe, y que un descuido lo puede tener cualquiera, ¿por qué arriesgarte?

Con estas dos líneas puedes configurar ambas URLs, bloqueando así las opciones de tu backoffice, para que ninguna mano indiscreta haga estragos en la web.


define( 'WP_HOME', 'https://www.yourwebsite.com' );
define( 'WP_SITEURL', 'https://www.yourwebsite.com' );

Desactivar el editor de código de WordPress

También sabes que WordPress incorpora un editor de código en su backoffice, desde el cual puedes acceder y modificar el código del tema y los plugins que tienes instalados. Aunque a priori pueda parecer cómodo, ya que te ahorra tener que descargar un archivo para editarlo, en malas manos puede hacerle mucha pupa a tu web, por lo que desactivarlo te ayudará a proteger tu sitio contra manos malvadas. Para desactivarlo, incluye la siguiente línea.

define( 'DISALLOW_FILE_EDIT', true );

Evitar la posibilidad de instalar, desinstalar y actualizar plugins

Y si además de la edición de código, quieres evitar que se puedan instalar nuevos plugins, y actualizar o desinstalar los que ya hay, puedes utilizar esta constante definida a TRUE.

Esta configuración, te la recomiendo únicamente si te dedicas al mantenimiento web, y quieres evitar que los clientes rompan algo. De lo contrario, no la pongas, para que el usuario pueda actualizar sus plugins cada vez que quiera.

define( 'DISALLOW_FILE_MODS', true );

Por cierto, añadiendo esta línea, no haría falta la anterior.

Forzar el login por SSL

Como ya sabes, estos certificados, encriptan la información que se envía a través de la web, para evitar que alguien la coja por el camino y la utiliza para hacer pupa.

Sin embargo, el hecho de tener instalado un certificado SSL, no quiere decir que no se pueda seguir utilizando el protocolo HTTP. Para ello, tendrías que configurar el archivo .htaccess en tu servidor.

Pero lo que sí puedes hacer, es obligar a WordPress para que todos los logueos que haga, así como las páginas del backoffice, estén siempre bajo HTTPS. Para ello, con añadir las siguientes líneas, será más que suficiente.


define( 'FORCE_SSL_LOGIN', true );
define( 'FORCE_SSL_ADMIN', true );

Mejorar el modo de depuración

Al principio del artículo, en la configuración básica del archivo wp-config, has visto la constante WP_DEBUG, que dependiendo de si la definías a TRUE o FALSE, te permitía ver los errores de depuración o no.

Esta constante, tiene tres hermanas más, que lo que hacen, respectivamente, es:

  • Mostrar los errores de depuración.
    define( 'WP_DEBUG_DISPLAY', true );
  • Añadirlos al log y…
    define( 'WP_DEBUG_LOG', true );
  • Cargar las opciones desminificadas de los archivos CSS y JavaScript que vienen por defecto con WordPress.
    define( 'SCRIPT_DEBUG', true );

También puedes mostrar u ocultar los errores de PHP, añadiendo las siguientes líneas:


//Mostrar errores
error_reporting( -1 );
ini_set( 'display_errors', 1 );

//Ocultar errores
error_reporting( 0 );
ini_set( 'display_errors', 0 );

Definir el límite de memoria para PHP

WordPress, como cualquier otra aplicación desarrollada con PHP, consume memoria del servidor. Hay ocasiones en las que, dependiendo del proceso, si se alcanza la memoria máxima que necesita, el servidor lanza un error y rompe la ejecución de la aplicación.

Para evitar esto, puedes aumentar el límite de memoria del servidor, incluyendo la siguiente constante en tu archivo wp-config (pero recuerda, que esto solo se aplicará a WordPress, no al resto de aplicaciones que puedas tener en tu servidor).

define( 'WP_MEMORY_LIMIT', '128M' );

También podremos definir un límite máximo de memoria, para tampoco abusar.

define( 'WP_MAX_MEMORY_LIMIT', '256M' );

Desactivar el CRON de WordPress

Las tareas CRON te permiten automatizar procesos de tu web, como la creación de un backup o la publicación de una entrada a una determinada hora. WordPress, por defecto, trae su propio sistema de tareas CRON. Sin embargo, este solo actúa si la web recibe alguna visita ese día. ¿Qué ocurre si esto no pasa? Pues que ese día, no se haría la copia de seguridad de la web o no se publicaría la entrada.

Para evitar esto, lo que yo recomiendo es desactivar el sistema de CRON de WordPress con esta línea…

define( 'DISABLE_WP_CRON', true );

… y crear una tarea en tu servidor que ejecute el archivo wp-cron de WordPress X veces al día. De esta forma, no solo evitarás que algo en tu web se quede sin ejecutar, sino que además, no ralentizarás su funcionamiento.

Optimizar la base de datos de WordPress

Muchos plugins y temas, después de ser desinstalados (o incluso actualizados), dejan en la base de datos residuos que ocupan espacio valioso del que te hablé antes. Para eliminar estos residuos, es recomendable hacer una optimización de la base de datos cada X tiempo (yo la suelo hacer una vez al mes).

Pero, ¿cómo puedes hacer eso? Pues muy fácil. Primero, tienes que añadir esta línea al archivo wp-config.

define( 'WP_ALLOW_REPAIR', true );

A continuación, entra en la siguiente URL (sustituye «yourdomain.com» por el dominio de tu web): http://www.yourdomain.com/wp-admin/maint/repair.php

Una vez que hayas hecho la optimización, define la constante a FALSE y vuélvela a definir a TRUE la próxima vez que quieras realizar otra optimización de la base de datos.

Comprimir archivos

Para ir finalizando, te voy a enseñar tres líneas que te pueden ayudar a mejorar la rapidez de tu sitio web:

  • La primera de ellas, te servirá para comprimir los archivos CSS.
    define( 'COMPRESS_CSS', true );
  • La segunda, tiene el mismo funcionamiento, pero para los archivos de JavaScript de la web.
    define( 'COMPRESS_SCRIPTS', true );
  • Y la tercera, activará la compresión GZIP en para la web.
    define( 'ENFORCE_GZIP', true );

Con estas tres líneas, puedes evitarte tener que instalar un plugin de compresión de archivos.

Bonus extra

Por último, y como he visto que te has tomado la molestia de llegar hasta aquí, te voy a enseñar un truquillo. No sé si te has fijado, pero algunas de las constantes que te he ido enseñando son para entornos de desarrollo y otras para entornos de producción.

Sin ir más lejos, los propios parámetros de la base de datos, pueden variar del servidor local al de la web, por lo que dependiento del entorno en el que estés trabajando, habrá que añadir líneas, quitar otras, y cambiar valores.

¿Qué es lo que hago yo para evitarme tanto jaleo? Pues muy fácil. Me defino una constante y le asigno el entorno en el que estoy ahora mismo (yo los he llamado «local» y «website», pero los puedes llamar como quieras).

define( 'WORKING_IN', 'local' );

Luego, mediante un switch, añado las constantes que necesito con sus respectivos valores. De esta forma, con solo un par de cambios en el código, consigo configurar el entorno que necesito.


switch( WORKING_IN )
{
case 'local':
//Configuración local
break;
case 'website':
//Configuración en producción
break;
}

Este código lo tengo disponible en mi repositorio de GitHub, por lo que puedes descargarlo, copiarlo, mejorarlo,… en fin, lo que tú quieras. Lo que sí te digo, es que no siempre utilizo todas las constantes, sino que voy adaptando el archivo dependiendo del proyecto.

Conclusión

Como puedes ver, un archivo wp-config vitaminado, te puede ser muy útil para proteger tu web y mejorar su rendimiento. A lo largo de este artículo te he podido enseñar algunas de las constantes de configuración, pero existen muchas otras más. Para acabar, me gustaría dejarte unos enlaces, que te pueden ayudar a la hora de configurar y vitaminar tu archivo wp-config:

Y tú, ¿conoces alguna otra constante para añadirla al archivo wp-config? Sería todo un placer para mí, que la compartieses con el resto en los comentarios del artículo. Y como no, cualquier duda que tengas, házmela saber a través del formulario de contacto de la web. Ya sabes que estaré encantado de ayudarte.