wp_upload_media_from_url: subir contenido multimedia desde una URL

Descarga una imagen pública y la añade a la biblioteca de medios. Tu servidor hace la petición, y por eso esta herramienta está más restringida que cualquier otra del servidor.

Argumentos

Argumento Obligatorio Significado
url Sí Una URL de imagen HTTP o HTTPS pública
post_id No Adjunta la subida a una entrada
description No La descripción del adjunto
dry_run No Informa sin descargar

Permisos

Allow content writes abierto, y upload_files.

Las cuatro vallas

Como esta herramienta hace que tu servidor obtenga una URL que eligió un asistente, está restringida en cuatro puntos.

1. URL. Solo http y https, puertos 80 o 443, y como máximo 2.048 caracteres. Se rechazan las credenciales incrustadas y los fragmentos. Las URL no válidas devuelven pom_ai_mcp_invalid_url.

2. Resolución del host. Las direcciones IPv4 del nombre de host se resuelven antes de la petición, y se comprueba cada dirección devuelta. Si alguna es privada o reservada, la petición se rechaza con pom_ai_mcp_private_host.

Esa es la importante. Significa que la herramienta no puede apuntar a localhost, a un servicio interno, a un endpoint de metadatos en la nube, ni a un nombre de host público que resuelva a una dirección privada. Un host que no se puede resolver en absoluto es pom_ai_mcp_invalid_host.

La dirección validada se fija para la petición usando el transporte cURL de WordPress. Los servidores sin ese transporte deben usar wp_upload_media con una carga útil de imagen ráster compatible.

3. Sin redirecciones. La URL debe devolver la imagen directamente. Cualquier redirección hace que la respuesta no sea 2xx desde el punto de vista de la herramienta, y falla con pom_ai_mcp_media_download_failed.

4. Tamaño y tipo. La descarga está limitada a 10 MB, y el resultado pasa por la misma doble validación que una subida en base64: primero la extensión del nombre de archivo y después el contenido real.

La regla de las redirecciones afecta a todo el mundo

Una URL que funciona perfectamente en un navegador puede fallar aquí, porque el navegador siguió una redirección que esta herramienta no seguirá.

Casos habituales:

  • acortadores de enlaces;
  • un CDN o servicio de imágenes que redirige a una URL firmada;
  • http que redirige a https;
  • una plataforma de alojamiento que redirige a un dominio regional;
  • una redirección por barra final o por host canónico.

Cuando una URL falla y parece correcta, casi siempre es por esto. La solución es resolver tú mismo la redirección y pasar la URL final, u obtener los bytes y usar wp_upload_media en su lugar.

El nombre de archivo proviene de la ruta de la URL

El nombre de archivo almacenado se deriva del último segmento de la ruta de la URL, recurriendo a remote-image.jpg cuando no hay ninguno.

Eso tiene una consecuencia: una URL que termina en algo sin una extensión de imagen reconocida falla la comprobación de extensión, incluso cuando la respuesta es un JPEG perfectamente válido. Las URL de entrega de imágenes con parámetros de cadena de consulta y sin extensión de archivo son el ejemplo habitual.

De nuevo, la herramienta de base64 es la respuesta: te permite nombrar el archivo tú mismo.

Usa la prueba en seco

dry_run devuelve la URL que obtendría, sin obtenerla:

Haz una prueba en seco y muéstrame la URL que descargarías.

Su valor es confirmar que el asistente resolvió la URL que querías, antes de que tu servidor haga una petición saliente en su nombre.

Qué devuelve

El adjunto creado en la forma estándar, incluido el nuevo id.

Cuándo usar esto en lugar de base64

Solo cuando realmente tienes una URL pública, directa y sin redirecciones, y no los bytes. En la práctica es más limitado de lo que parece, y wp_upload_media es la opción predeterminada más fiable.

Cómo usarla bien

Haz una prueba en seco para esta URL, luego súbela y muéstrame el ID del adjunto.

Después establece el texto alternativo como un paso aparte: al subir nunca se establece.

Problemas habituales

Síntoma Causa
pom_ai_mcp_invalid_url No es una URL http/https
pom_ai_mcp_invalid_host El nombre de host no se resuelve
pom_ai_mcp_private_host Resuelve a una dirección privada o reservada
pom_ai_mcp_media_transport_unavailable El transporte cURL necesario no está disponible
pom_ai_mcp_media_download_failed Una redirección, o una respuesta no satisfactoria
pom_ai_mcp_media_too_large Más de 10 MB
pom_ai_mcp_media_extension_denied La ruta de la URL no tiene una extensión de imagen aceptada
pom_ai_mcp_media_mime_denied Los bytes descargados no son un tipo de imagen aceptado