Nota revisada y reescrita el 18 de octubre de 2026: la versión original tenía errores y datos sin fuente.
Mueves un WordPress a otro servidor, todo carga bien, y al pulsar Actualizar en un plugin te pide datos de conexión FTP o falla con No se pudo crear el directorio o Fallo en la actualización. La web funciona. Lo que falla es que WordPress no puede escribir en sus propios archivos.
Por qué pide FTP
Antes de instalar o actualizar algo, WordPress elige un método para escribir en disco. Usa escritura directa desde PHP (direct) solo si el usuario que ejecuta PHP es el propietario de los archivos. Para comprobarlo, crea un archivo temporal y compara su propietario con el de los archivos de WordPress. Si no coinciden, pasa a FTP o SSH y te pide credenciales.
Tras una migración es lo normal: copiaste los archivos con tu usuario (o con root), y PHP-FPM corre como www-data, nginx o un usuario del panel.
Comprobarlo
# ¿Con qué usuario corre PHP?
ps -o user= -C php-fpm8.3 | sort -u # ajusta el nombre a tu versión
# ¿De quién son los archivos?
ls -ld wp-content wp-content/plugins wp-content/uploads
Arreglarlo
Haz que los archivos sean del usuario de PHP, con permisos razonables:
sudo chown -R www-data:www-data /var/www/miweb
find /var/www/miweb -type d -exec chmod 755 {} \;
find /var/www/miweb -type f -exec chmod 644 {} \;
chmod 640 /var/www/miweb/wp-config.php # el grupo debe ser el de PHP para que pueda leerlo
No uses chmod 777. Hace que funcione porque cualquiera puede escribir, incluido cualquier otro proceso o usuario del servidor.
define('FS_METHOD', 'direct'); en wp-config.php también quita el aviso de FTP, pero solo fuerza el método: si PHP sigue sin permisos de escritura, la actualización fallará igual, con otro mensaje. Arregla primero el propietario. La documentación de WordPress recomienda tocar esta constante solo si tienes problemas de actualización y sabes por qué.
Otras causas después de migrar
DISALLOW_FILE_MODSatrueen elwp-config.phpnuevo (algunos hostings y plantillas lo ponen). Bloquea instalar y actualizar plugins y temas desde el panel, y desactiva el editor de archivos. Si desaparece el botón de Añadir nuevo, mira esto primero.wp-content/upgradesin permisos o lleno de restos de una actualización a medias. WordPress descomprime ahí. Bórralo y deja que lo cree de nuevo.- Un
.maintenanceolvidado en la raíz: deja la web en "mantenimiento programado". Bórralo. - Límites de PHP del servidor nuevo: un
memory_limito unupload_max_filesizebajos pueden cortar la descarga de plugins grandes. - URLs antiguas en la base de datos: si
siteurlohomeapuntan al dominio viejo, el panel redirige mal.wp search-replace 'https://viejo.com' 'https://nuevo.com' --dry-runcon WP-CLI te dice qué cambiaría, también dentro de datos serializados.