Introducción
Este tutorial explica con todo detalle cómo mover la carpeta original wp-content a una ruta personalizada en WordPress usando constantes en wp-config.php. Se detalla el proceso, ejemplos de código listos para pegar, comandos de servidor, cómo actualizar la base de datos y recomendaciones para evitar problemas con plugins, temas, CDN y actualizaciones. Antes de empezar: haz una copia completa de archivos y base de datos. Trabaja en un entorno de pruebas si es posible.
Contents
Resumen de la estrategia
- Definir en wp-config.php constantes que indiquen la nueva ruta física y la nueva URL pública (WP_CONTENT_DIR y WP_CONTENT_URL) antes de cargar WordPress.
- Opcionalmente definir WP_PLUGIN_DIR, WP_PLUGIN_URL y WP_LANG_DIR si quieres rutas específicas para plugins y traducciones.
- Mover físicamente la carpeta wp-content al nuevo nombre/ruta o crear un enlace simbólico si prefieres compatibilidad temporal.
- Actualizar referencias en la base de datos (URLs dentro de posts, metadatos, opciones) usando WP-CLI o un plugin seguro de búsqueda/reemplazo.
- Comprobar permisos, cachés, CDN y probar exhaustivamente. Mantener un plan de reversión (rollback).
Constantes importantes y dónde colocarlas
Las constantes deben definirse en wp-config.php antes de la línea que incluye wp-settings.php (normalmente require_once ABSPATH . wp-settings.php). Las más relevantes:
- WP_CONTENT_DIR: ruta en disco al nuevo directorio de contenido.
- WP_CONTENT_URL: URL pública correspondiente a ese directorio.
- WP_PLUGIN_DIR y WP_PLUGIN_URL: opcionales, para controlar rutas de plugins si quieres mantenerlos en una subcarpeta bajo tu carpeta personalizada.
- WP_LANG_DIR: opcional, para cambiar la ubicación de los archivos de traducción.
- UPLOADS: si quieres modificar la ruta de uploads. Funciona de forma distinta y suele ser relativa a ABSPATH en instalaciones no multisitio.
Paso 1 — Preparar y respaldar
- Realiza copia de archivos (zip o rsync) de todo el sitio.
- Exporta y descarga una copia de la base de datos (mysqldump o export desde phpMyAdmin).
- Detén procesos de cache o crea un modo mantenimiento si el sitio está en producción.
Paso 2 — Definir las constantes en wp-config.php
Ejemplo mínimo para mover wp-content a una carpeta llamada contenido-personalizado en la raíz del WordPress. Este bloque debe ir antes de require_once ABSPATH . wp-settings.php
Paso 3 — Mover los archivos físicamente o crear symlink
En el directorio raíz de WordPress (donde está wp-config.php), mueve la carpeta y ajusta permisos. Dos opciones:
Opción A — Mover físicamente
# En el directorio raíz de WordPress mv wp-content contenido-personalizado # Ajustar propietario/permiso (ejemplo para Debian/Ubuntu con usuario Apache/nginx www-data) chown -R www-data:www-data contenido-personalizado find contenido-personalizado -type d -exec chmod 755 {} find contenido-personalizado -type f -exec chmod 644 {}Opción B — Crear un enlace simbólico (compatibilidad)
Si hay plugins o integraciones que buscan literalmente /wp-content en el sistema de archivos, mantener un symlink puede ayudar mientras actualizas referencias.
mv wp-content contenido-personalizado ln -s contenido-personalizado wp-contentPaso 4 — Actualizar la base de datos (URLs internas y referencias)
WordPress guarda muchas rutas/URLs en la base de datos. Es imprescindible reemplazar las ocurrencias de la URL antigua para evitar enlaces rotos o imágenes que no cargan. La forma más segura es usar WP-CLI o un plugin que gestione serializaciones correctamente.
Ejemplo con WP-CLI
# Reemplaza todas las referencias a la URL de wp-content wp search-replace https://ejemplo.com/wp-content https://ejemplo.com/contenido-personalizado --skip-columns=guidEjemplo SQL (riesgoso - usa solo si sabes lo que haces)
-- Muy arriesgado: crea copia de seguridad antes de ejecutar UPDATE wp_options SET option_value = REPLACE(option_value, wp-content, contenido-personalizado) WHERE option_value LIKE %wp-content% UPDATE wp_postmeta SET meta_value = REPLACE(meta_value, wp-content, contenido-personalizado) WHERE meta_value LIKE %wp-content% UPDATE wp_posts SET post_content = REPLACE(post_content, wp-content, contenido-personalizado) WHERE post_content LIKE %wp-content%Nota: muchos valores están serializados por eso WP-CLI o plugins especializados (p. ej. Better Search Replace, interconnect/it Search Replace DB) son preferibles, porque manejan serialización correctamente.
Paso 5 — Ajustes adicionales
- Si usas un CDN, actualiza la URL de origen o purga la cache.
- Revisa .htaccess o reglas del servidor: normalmente no necesitas cambios, pero si habías hecho redirecciones a /wp-content/ explícitas, actualízalas.
- Verifica plugins que puedan tener rutas absolutas codificadas algunos pueden requerir reconfiguración o parches.
- Si cambias la ruta de uploads con la constante UPLOADS en instalaciones no multisite, recuerda que UPLOADS es relativa a ABSPATH y su uso es distinto. Ejemplo: define(UPLOADS, contenido-personalizado/uploads)
Compatibilidad y problemas comunes
- Plugins y temas que codifican rutas: algunos desarrolladores usan ABSPATH . wp-content/... o URLs fijas esos requerirán actualización manual o un symlink temporal.
- Multisite (Network): mover wp-content en multisite es más delicado y puede causar problemas con rutas de sub-sites, uploads por site y actualizaciones. Se recomienda evitar en multisite salvo necesidad y pruebas.
- Actualizaciones de WordPress: la práctica de definir WP_CONTENT_DIR/URL es soportada por WordPress, pero ciertos procesos o scripts de terceros podrían asumir la ruta por defecto. Mantén respaldos antes de actualizar.
- Permisos y seguridad: asegúrate de que el usuario del servidor web tiene acceso a la nueva carpeta. No des permisos 777 usa 755 para carpetas y 644 para archivos como guía.
Pruebas que debes realizar
- Accede a la home y varias páginas internas revisa la consola del navegador para errores 404 de recursos (CSS, JS, imágenes).
- Sube una imagen nueva desde la biblioteca de medios y comprueba la ruta y visualización.
- Activa y desactiva plugins críticos y revisa su funcionamiento (especial atención a constructores, optimizadores y caché).
- Revisa logs del servidor (error_log) para detectar warnings o errores de permisos o rutas faltantes.
Cómo revertir (rollback)
- Si usaste un symlink, puedes eliminarlo y mover la carpeta de nuevo a wp-content:
rm wp-content mv contenido-personalizado wp-content
- Si editaste la base de datos, restaura desde la copia de seguridad de la base de datos.
- Quita las constantes añadidas en wp-config.php o restáuralas a la configuración original.
Buenas prácticas y recomendaciones finales
- Siempre prueba en un entorno de staging antes de aplicar cambios en producción.
- Mantén copias de seguridad completas (archivos base de datos) antes de cada paso crítico.
- Usa WP-CLI para las operaciones de búsqueda/reemplazo porque respeta serializaciones y es más seguro que sustituciones SQL manuales.
- Documenta el cambio (qué constantes se definieron, ruta nueva, fecha) para futuros mantenimientos o para otros administradores.
- Considera el uso de enlaces simbólicos si necesitas compatibilidad inmediata, pero planifica corregir referencias en la base de datos para eliminar dependencias del symlink a medio plazo.
Aplicando cuidadosamente estos pasos podrás cambiar la ubicación de wp-content a una ruta personalizada mediante constantes, manteniendo control sobre plugins, temas y subida de archivos. Realiza pruebas exhaustivas y ten siempre una copia de seguridad completa antes de proceder.
|
Acepto donaciones de BAT's mediante el navegador Brave 🙂 |