En las últimas semanas estuve trabajando con varios sitios en WordPress, y me tocó un caso bastante curioso:
El cliente intentaba, como de costumbre, insertar una imagen en su post/entrada de WordPress a través el botón Agregar objeto (Insert media, en inglés), y luego de subir la imagen a la galería y darle click, no sucedía nada.
Al acceder al administrador del sitio para ver el problema, vi que la versión de WordPress y plugins estaban muy desactualizados, y expuestos a diferentes ataques. Lo primero fue hacer un backup previo y luego actualizar todo. Después instalé el plugin WordFence, hice un escaneo completo, retiré archivos infectados con malware de plugins desactivados, y lo dejé activo para asegurar el sitio y prevenir futuros ataques.
Sin embargo, el botón seguía sin funcionar.
Hice click en el post con el botón derecho, y en el menú busqué Inspeccionar, y abrí el panel de DevTools de Chrome. Ahí vi que el archivo admin-ajax.php estaba tirando error 404 (not found). Sin embargo, al ver el sitio a través de FTP el archivo estaba en su lugar. Lo comparé con otros archivos de otros sitios en WordPress y eran exactamente iguales. Entonces, ¿qué causaba este error?
Probé desactivando absolutamente todos los plugins, borré la caché, intenté nuevamente y nada. Probé a través del modo HTML insertar la imagen mediante un link y, o se deshabilitaban los botones de Guardar y Publicar, o al hacer click en alguno me aparecía un mensaje de error 404. Amplié la memoria editando el archivo wp-config.php (en este post en inglés está detallado el procedimiento paso a paso).
Pero la función de insertar imagen en el post/entrada seguía sin funcionar 🙁
Hice otro backup y repliqué el sitio en una instalación local, ¡aquí sí funcionaba todo perfectamente! Volví a mirar por FTP los permisos de los archivos y carpetas, y todos estaban correctos. Me contacté con el desarrollador del Theme y me sugirió que lo actualizara a la última versión. Así lo hice, pero no cambió nada. Sin embargo me comentó que cabía la posibilidad que que el hosting hubiese bloqueado como protección al recibir demasiados request. Usualmente algunos plugins, como Visual Bakery Composer suelen causar este conflicto. Otra posibilidad era actualizar la versión de PHP del hosting. Con esto en mente, busqué referencias en el foro de soporte de WordPress. Y… ¡Bingo!
Otro usuario comentó el mismo problema y lo solucionó solicitando a su hosting que hicieran una excepción en el mod_security de Apache. Como no tengo experiencia en Apache (todo no se puede), hice exactamente lo mismo: escribí al soporte del hosting y pedí esta excepción.
Y al fin, minutos después de recibir la respuesta al ticket de soporte, funcionó.
Dejo esta referencia por si a otros usuarios les sucede lo mismo, al menos ya saben qué causa este error y cuáles son los pasos seguir. Comentarios sobre este tema en particular y soluciones alternativas son siempre bienvenidos.