Como mover wp-content a una ruta personalizada con constantes en WordPress

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

  1. Realiza copia de archivos (zip o rsync) de todo el sitio.
  2. Exporta y descarga una copia de la base de datos (mysqldump o export desde phpMyAdmin).
  3. 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-content

Paso 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=guid

Ejemplo 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

  1. Accede a la home y varias páginas internas revisa la consola del navegador para errores 404 de recursos (CSS, JS, imágenes).
  2. Sube una imagen nueva desde la biblioteca de medios y comprueba la ruta y visualización.
  3. Activa y desactiva plugins críticos y revisa su funcionamiento (especial atención a constructores, optimizadores y caché).
  4. Revisa logs del servidor (error_log) para detectar warnings o errores de permisos o rutas faltantes.

Cómo revertir (rollback)

  1. Si usaste un symlink, puedes eliminarlo y mover la carpeta de nuevo a wp-content:
    rm wp-content
    mv contenido-personalizado wp-content
        
  2. Si editaste la base de datos, restaura desde la copia de seguridad de la base de datos.
  3. 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 🙂



Deja una respuesta

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