WP-Config: la configuración de WordPress

Última revisión: 2 de octubre de 2021

El fichero de configuración de WordPress [wp-config.php] esconde muchas funcionalidades que ayudan a mejorar la seguridad y rendimiento del sistema. ¿Conoces todas las posibilidades que te ofrece?

NOTA: Existen artículos específicos para las constantes de seguridad de Cookies y de las Security Keys.

Estos elementos no tienen porqué estar siempre en tu configuración. Simplemente has de tener en cuenta que existen y usarlos según tus necesidades. Por defecto, si no los añades, ellos ya incluyen ciertas características y configuraciones.

Mantenimiento

WordPress Cache (WP_CACHE)

Para saber más sobre este elemento, por favor visita la página sobre Caché.

Memory Limit (WP_MEMORY_LIMIT)

Por defecto WordPress, en instalación simple, viene configurado para consumir un máximo de 40MB y en el caso de un MultiSite de 64MB; pero es posible que en alguna ocasión recibas algún mensaje del estilo a «Allowed memory size of xxxxxx bytes exhausted» debido al consumo de la plantilla o de plugins. En estos casos puedes modificar la cantidad de memoria máxima que puede utilizar cada carga.

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

Por norma general un máximo de 128 MB debería ser más que suficiente para funcionar. En caso de disponer de servidores muy potentes con mucha memoria RAM, y de tener alguna instalación complejas, como podría ser un bbPress, un WooCommerce o similar, podrías aumentarlo más.

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

Pasar de los 256 MB no sería una buena opción, ya que supondría que hay algún problema de fondo que está empeorando tu WordPress.

Max Memory Limit (WP_MAX_MEMORY_LIMIT)

En el caso del panel de administración, las tareas que se ejecutan pueden ser mucho más complejas y pesadas. Es por esto que en el caso interno, se puede aumentar la memoria a unos niveles distintos.

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

En general, aún siendo una instalación compleja, el panel de administración nunca debería sobrepasar la cifra de los 256 MB.

Seguridad

Disable Plugins and Themes Editors (DISALLOW_FILE_EDIT)

Para saber más sobre este elemento, por favor visita la página sobre Edición de ficheros.

Force SSL Admin (FORCE_SSL_ADMIN)

Para saber más sobre este elemento, por favor visita la página sobre Certificado TLS.

Force SSL Login (FORCE_SSL_LOGIN)

Para saber más sobre este elemento, por favor visita la página sobre Certificado TLS.

Disallow Unfiltered HTML (DISALLOW_UNFILTERED_HTML)

Por defecto WordPress viene con una medida de seguridad elevada a la hora de añadir código HTML en entradas, comentarios y demás espacios. Este sistema, por ejemplo, evitaría la posibilidad de usar la etiqueta <script> que podría afectar negativamente por ataques XSS.

Aún así, se puede eliminar este filtro y que todos los usuarios de la plataforma tengan la posibilidad de incluir el código HTML que deseen.

define( 'DISALLOW_UNFILTERED_HTML', true );

Allow Unfiltered uploads (ALLOW_UNFILTERED_UPLOADS)

Para saber más sobre este elemento, por favor visita la página sobre Subir ficheros sin filtro.

Block External Url (WP_HTTP_BLOCK_EXTERNAL)

Para saber más sobre este elemento, por favor visita la página sobre Servidores externos.

Manage Accessible Hosts (WP_ACCESSIBLE_HOSTS)

Para saber más sobre este elemento, por favor visita la página sobre Servidores externos.

Actualizaciones

Disable Automatic Updates (AUTOMATIC_UPDATER_DISABLED)

Para saber más sobre este elemento, por favor visita la página sobre Actualizaciones automáticas.

Disable Core Updates (WP_AUTO_UPDATE_CORE)

Para saber más sobre este elemento, por favor visita la página sobre Actualizaciones automáticas.

Disable Plugins and Themes Install and Updates (DISALLOW_FILE_MODS)

Para saber más sobre este elemento, por favor visita la página sobre Edición de ficheros.

Updates Method (FS_METHOD, FTP_BASE, FTP_CONTENT_DIR, FTP_PLUGIN_DIR, FTP_PUBKEY, FTP_PRIKEY, FTP_USER, FTP_PASS, FTP_HOST, FTP_SSL)

Por norma general WordPress sabe encontrar la opción para actualizarse él mismo, o los plugins y plantillas sin necesidad de tener que decirle cómo hacerlo. Pero en ocasiones hay instalaciones complejas o servidores en los que existe alguna limitación o configuración distinta a la habitual y por tanto WordPress pedirá los accesos para poder hacer los cambios necesarios.

Si te encuentras en estos casos, para no tener que darle los accesos a nadie o tú mismo no tener que estar configurándolos cada vez que los pida, puedes incorporar los datos directamente al fichero de configuración.

FS_METHOD indica qué metodo se utilizará para realizar la actualización: «direct» (Direct File I/O del PHP), «ssh2» (SSH PHP Extension), «ftpext» (FTP PHP Extension for FTP Access) o «ftpsockets» (PHP Sockets Class for FTP Access).
FTP_BASE es la ruta absoluta de la instalación del WordPress.
FTP_CONTENT_DIR es la ruta absoluta de la carpeta [wp-content].
FTP_PLUGIN_DIR es la ruta absoluta de la carpeta de los plugins.
FTP_PUBKEY es la ruta absoluta de la carpeta de la clave pública SSH.
FTP_PRIKEY es la ruta absoluta de la carpeta de la clave privada SSH.
FTP_USER es el usuario del FTP o SSH.
FTP_PASS es la contraseña para el usuario. Si usas clave SSH se puede omitir.
FTP_HOST es la combinación hostname:puerto de acceso al serviro (FTP o SSH). El puerto FTP por defecto es 21 y en SSH es 22.
FTP_SSL (true / false) según la conexión soporte SSL. Esto no es para SFTP.

define( 'FS_METHOD', 'ftpext' );
define( 'FTP_BASE', '/path/to/wordpress/' );
define( 'FTP_CONTENT_DIR', '/path/to/wordpress/wp-content/' );
define( 'FTP_PLUGIN_DIR ', '/path/to/wordpress/wp-content/plugins/' );
define( 'FTP_PUBKEY', '/home/username/.ssh/id_rsa.pub' );
define( 'FTP_PRIKEY', '/home/username/.ssh/id_rsa' );
define( 'FTP_USER', 'username' );
define( 'FTP_PASS', 'password' );
define( 'FTP_HOST', 'ftp.example.org' );
define( 'FTP_SSL', false );

Entradas

Post Auto save interval (AUTOSAVE_INTERVAL)

Por defecto WordPress salva automáticamente los contenidos que se van escribiendo en una entrada cada 60 segundos. Si eres de los que escribe lento, puedes aumentar el tiempo, o si eres de los que tiene miedo a perder la última frase puedes reducirlo.

define( 'AUTOSAVE_INTERVAL', 30 ); // segundos

Empty Trash Days (EMPTY_TRASH_DAYS)

Para saber más sobre este elemento, por favor visita la página sobre Copias antiguas.

Disable Post Revisions and Revisions Max Count (WP_POST_REVISIONS)

Para saber más sobre este elemento, por favor visita la página sobre Copias antiguas.

Localización / Idiomas

WordPress Language (WPLANG)

¿Cuál es el idioma por defecto de tu instalación WordPress? Aunque actualmente se puede configurar desde el panel de administración, puedes forzar el idioma directamente desde el fichero de configuración.

define( 'WPLANG', 'es_ES' );

WordPress Language Directory (WPLANG_DIR)

Si quieres cambiar la ruta donde se encuentran los ficheros de traducción por defecto, puedes hacerlo con otra ruta.

define( 'WP_LANG_DIR', dirname(FILE) . '/wordpress/languages' );

Crones / Tareas programadas

Disable Cron (DISABLE_WP_CRON)

Por defecto WordPress ejecuta un sistema de tarea programada cada vez que se carga una página. En sitios de alto tráfico esto puede bloquear la carga muchas veces de la misma ejecución, y podría ser interesante tal vez sacarlo del sistema de software y pasarlo a algo tipo el WP-CLI. En estos casos podemos desactivar los crones si los ejecutamos de otra manera.

define( 'DISABLE_WP_CRON', true );

Alternate Cron (ALTERNATE_WP_CRON)

Los crones se ejecutan de forma asíncrona por defecto, y esto a veces puede ser un problema. Aunque esta opción no es muy recomendada, activando este sistema hará que un usuario cargue una página intermedia mediante una redirección y se le vuelva a enviar a la página visitada, de forma que lance el cron.

define( 'ALTERNATE_WP_CRON', true );

Cron Lock Timeout (WP_CRON_LOCK_TIMEOUT)

Habitualmente los crones se ejecutan una vez por minuto, pero quizá quieras que no se sobrecargue el sistema ya que no tienes tantas tareas a realizar y pasar ese minuto a 5 minutos.

define( 'WP_CRON_LOCK_TIMEOUT', 300 ); // segundos

MultiSite

Configure Multi Site (WP_ALLOW_MULTISITE)

Con esta constante activas el sistema de WordPress MultiSite que va incorporado en el propio WordPress. Este sistema permite gestionar con una única instalación de WordPress, múltiples sitios web para múltiples usuarios.

define( 'WP_ALLOW_MULTISITE', true);

Sub Domain / Folder installs (SUBDOMAIN_INSTALL)

Si quieres que tu sitio WordPress MultiSite funcione por subdominios has de activar esta opicón. Sino tendrás que dejarla apagada y funcionará por carpetas. En caso de querer usar dominios propios también deberás activar la opción.

define( 'SUBDOMAIN_INSTALL', true);

Domain Current Site (DOMAIN_CURRENT_SITE)

Como vas a tener múltiples sitios web, ¿cuál va a ser el principal? Aquí identificarás qué hostname va a ser el que use la página inicial.

Path (PATH_CURRENT_SITE)

Esta será la carpeta inicial del sitio web principal. Habitualmente se usa la carpeta raíz, por lo que no deberías cambiar nada.

Site ID (SITE_ID_CURRENT_SITE)

Como vas a tener múltiples sitios, el identificador numérico del sitio inicial. habitualmente es el 1.

Blog ID (BLOG_ID_CURRENT_SITE)

Aunque tengas una red, una cosa es el sitio principal y otra el blog principal. Si quieres que sean diferentes, puedes utilizar este identificador para cambiarlo.

$base = '/';
define( 'DOMAIN_CURRENT_SITE', 'mysite.example.com' );
define( 'PATH_CURRENT_SITE', '/' );
define( 'SITE_ID_CURRENT_SITE', 1 );
define( 'BLOG_ID_CURRENT_SITE', 2 );

Base de datos

Database Name (DB_NAME)

El nombre de la base de datos. Te la de proporcionar tu proveedor o crearla tú mismo.

Database Host (DB_HOST)

El hostname o dirección IP donde está el servidor de base de datos. Si está en la misma máquina se suele poder usar «localhost».

Database User (DB_USER)

El usuario de acceso a la base de datos anterior.

Database Password (DB_PASSWORD)

La contraseña para ese usuario de la base de datos.

Database Tables Prefix ($table_prefix)

El prefijo de la base de datos. Para saber más sobre este elemento, por favor visita la página sobre Permisos a base de datos.

Database Charset (DB_CHARSET)

El tipo de caracteres en el que se almacenará la información. Por norma general es «utf8», aunque si necesitas un sitio con caracteres más complejos (chino, japonés, árabe…) puedes utilizar «utf8mb4».

Database Collation (DB_COLLATE)

Si has seleccionado un tipo de caracteres en la constante anterior, con este podrás especificar el juego de caracteres. Lo habitual es «utf8_general_ci» o «utf8mb4_general_ci».

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', 'utf8mb4_general_ci' );
$table_prefix = 'wp_';

Database Tables Auto Repair (WP_ALLOW_REPAIR)

Si en algún momento determinado tienes problemas con el acceso a las tablas o están corruptas, puedes tratar de que se auto reparen cargando una vez el siguiente identificador. Solo ha de utilizarse de manera excepcional y una vez (a ser posible cuando el sitio esté en modo de mantenimiento y que no accedan muchas personas).

define( 'WP_ALLOW_REPAIR', true );

Database Don’t upgrade Global Tables (DO_NOT_UPGRADE_GLOBAL_TABLES)

En aquellos casos en los que tengas tablas con una cantidad grande de elementos, como por ejemplo una instalación de bbPress con muchos usuarios, o instalaciones que comparten la tabla de usuarios, deberías impedir la actualización automática y hacerlo de forma manual desde uno de los sitios o de forma controlada.

define( 'DO_NOT_UPGRADE_GLOBAL_TABLES', true );

Debugging

Debug WordPress (WP_DEBUG)

Permite activar o desactivar el modo de depuración WordPress. Este sistema es muy interesante e importante para revisar que todo el código funciona correctamente, tanto con la compatibilidad de PHP, como con las funciones que se van dejando de utilizar (deprecated)..

define( 'WP_DEBUG', true );

Debug Display (WP_DEBUG_DISPLAY)

Una vez has activado el modo de depuración, puedes configurar si quieres que los mensajes de error se muestren por pantalla. De ser el caso (este sistema funciona bien por ejemplo en modo staging) por pantalla verías los mensajes de error en el lugar en el que se generan.

define( 'WP_DEBUG_DISPLAY', true );

Debug Log (WP_DEBUG_LOG)

El mismo caso que el punto anterior, pero que guardará los logs en [/wp-content/debug.log].

define( 'WP_DEBUG_LOG', true );

Script Debugging (SCRIPT_DEBUG)

Si necesitas analizar los ficheros JavaScript, puedes activar el modo de depuración que principalmente cambiará el uso de los ficheros [.min.js] por el de los [.js].

define( 'SCRIPT_DEBUG', true );

Save Database Queries (SAVEQUERIES)

Este sistema permite almacenar todas las consultas que se realizan en cada página cargada. Hay que tener en cuenta que al guardarse tiene un impacto en el rendimiento del sitio, por lo que solo se debe utilizar en casos concretos y preferiblemente nunca en producción.

define( 'SAVEQUERIES', true );

Posteriormente, si quieres mostrar todas las consultas y sus datos, puedes añadir este código en el [footer.php] de tu plantilla, de forma que al ser administrador podrás ver esos datos.

if ( current_user_can( 'administrator' ) ) {
  global $wpdb;
  echo "<pre>";
  print_r( $wpdb->queries );
  echo "</pre>";
}

Concatenate JavaScript (CONCATENATE_SCRIPTS)

Para que el panel de administración funcione más rápido habitualmente los scripts están concatenados, así que en caso de querer ver con detalle qué ocurre, hay que desactivar esta opción para poder analizar correctamente cada fichero por separado.

define( 'CONCATENATE_SCRIPTS', true );

Proxy

En caso de estar por detrás de un proxy, WordPress es capaz de ponerse detrás de un proxy-caché y sólo responder a determinados elementos.

Host (WP_PROXY_HOST)

Es el host del proxy. En el momento en el que se indica este hostname o IP el sistema se activa automáticamente.

Port (WP_PROXY_PORT)

El puerto sobre el que trabaja el proxy. No hay un puerto por defecto, por lo que este elemento es de obligada activación en caso de usarse.

User (WP_PROXY_USERNAME)

Si tu proxy dispone de usuario y contraseña, aquí deberíamos indicar el usuario.

Password (WP_PROXY_PASSWORD)

Si tu proxy dispone de usuario y contraseña, aquí deberíamos indicar la contraseña.

Bypass list (WP_PROXY_BYPASS_HOSTS)

Previene el acceso y solo permite a estos hosts el acceso. Esta lista puede utilizar «wildcards» con el caracter *.

define('WP_PROXY_HOST', '192.168.84.101');
define('WP_PROXY_PORT', '8080');
define('WP_PROXY_USERNAME', 'mi_usuario');
define('WP_PROXY_PASSWORD', 'mi_CoNtra$n4');
define('WP_PROXY_BYPASS_HOSTS', 'localhost, www.example.com, *.wordpress.org');

Cambios de ruta

Carpeta wp-content (WP_CONTENT_DIR / WP_CONTENT_URL)

Si quieres cambiar la carpeta de [wp-content] a otro lugar, puedes usar hacerlo indicando la nueva ruta. De la misma forma, deberías indicar cuál será la ruta pública accesible.

define( 'WP_CONTENT_DIR', ABSPATH . 'wp-content' ); // no trailing slash, full paths only - WP_CONTENT_URL is defined further down
define( 'WP_CONTENT_URL', get_option('siteurl') . '/wp-content'); // full url - WP_CONTENT_DIR is defined further up

Carpeta de plugins (WP_PLUGIN_DIR / WP_PLUGIN_URL y WPMU_PLUGIN_DIR / WPMU_PLUGIN_URL)

Si quieres cambiar la carpeta de los plugins [plugins] puedes hacerlo indicando la nueva ruta, tanto la física como la pública.

define( 'WP_PLUGIN_DIR', WP_CONTENT_DIR . '/plugins' ); // full path, no trailing slash
define( 'WP_PLUGIN_URL', WP_CONTENT_URL . '/plugins' ); // full url, no trailing slash

De la misma forma podemos cambiar las rutas de las carpetas «must-use» de los plugins que los usuarios no pueden modificar.

define( 'WPMU_PLUGIN_DIR', WP_CONTENT_DIR . '/mu-plugins' ); // full path, no trailing slash
define( 'WPMU_PLUGIN_URL', WP_CONTENT_URL . '/mu-plugins' ); // full url, no trailing slash

Carpetas para WordPress MultiSite (UPLOADBLOGSDIR / UPLOADS / BLOGUPLOADDIR)

Por defecto el sistema de WordPress MultiSite crea su propia estructura de carpetas. Si quieres cambiarla puedes hacerlo mediante estas constantes.

define( 'UPLOADBLOGSDIR', 'wp-content/blogs.dir' );
define( 'UPLOADS', UPLOADBLOGSDIR . '/' . $site_id . '/files/' );
define( 'BLOGUPLOADDIR', WP_CONTENT_DIR . '/blogs.dir/' . $site_id . '/files/' );

Elementos varios

Trash for media (MEDIA_TRASH)

Si quieres que al borrar un elemento multimedia no se elimine directamente sino que se vaya a su propia papelera (por defecto desactivada), puedes hacerlo activando el sistema que lo permite.

define('MEDIA_TRASH', true);

Default template (WP_DEFAULT_THEME)

WordPress siempre tiene una plantilla en su núcleo, por defecto la última que se lanza por el equipo. Si quieres que por defecto se active otra plantilla (o por ejemplo si se elimina tu plantilla sin querer), puedes indicar el slug de la que quieras poner por defecto.

define( 'WP_DEFAULT_THEME', 'twentysixteen' );

Minimum core load (SHORTINIT)

En algunas ocasiones se puede usar WordPress como núcleo de gestión, pero no con todos los elementos necesarios para ponerlo de forma pública. Si quieres cargar una versión reducida que permita utilizar la potencia (por ejemplo para un sistema basado en BackPress) puedes activar un inicio rápido y mínimo.

define( 'SHORTINIT', true );

Actualización de bundles

WordPress suele incorporar una serie de plantillas y plugins por defecto cuando se realiza la instalación inicial o cuando hay un cambio de versión mayor. Si eres de los que elimina las plantillas por defecto y no quiere que se vuelvan a añadir con una nueva versión, puedes bloquearlo.

define( 'CORE_UPGRADE_SKIP_NEW_BUNDLED', true );

Feeds / RSS

WordPress incluye una serie de funciones para la lectura externa de feeds RSS / Atom. Esta configuración hace que por defecto se cacheen elementos para que no se ejecute la carga por cada visita de usuario. Pero estos elementos pueden modificarse.

Activar la caché (MAGPIE_CACHE_ON)

define('MAGPIE_CACHE_ON', true);

Directorio de caché (MAGPIE_CACHE_DIR)

define('MAGPIE_CACHE_DIR', './cache');

Tiempo de caché (MAGPIE_CACHE_AGE)

define('MAGPIE_CACHE_AGE', 3600); // 3600 segundos

Actualización de caché (MAGPIE_CACHE_FRESH_ONLY)

define('MAGPIE_CACHE_FRESH_ONLY', false);

Depuración de la lectura de feeds (MAGPIE_DEBUG)

define('MAGPIE_DEBUG', true);

Establecer el User-Agent (MAGPIE_USER_AGENT)

define('MAGPIE_USER_AGENT', 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0');

Time Out (MAGPIE_FETCH_TIME_OUT)

define('MAGPIE_FETCH_TIME_OUT', 5); // 5 segundos

Useo de gzip (MAGPIE_USE_GZIP)

define('MAGPIE_USE_GZIP', true);

Seguir con Seguridad para WordPress


Sobre este documento

Este documento está regulado por la licencia EUPL v1.2, publicado en WP SysAdmin y creado por Javier Casares. Por favor, si utilizas este contenido en tu sitio web, tu presentación o cualquier material que distribuyas, recuerda hacer una mención a este sitio o a su autor, y teniendo que poner el material que crees bajo licencia EUPL.