Mostrar una imagen del tema o de uploads en WordPress

Dos fragmentos PHP para imprimir una imagen de forma segura según esté guardada dentro del tema o en la biblioteca de uploads.

Revisado
Compatibilidad
WordPress 4.7+; PHP 7.4+
Lectura
2 min
Autor
Gabriel — infinit8

Un fragmento para una tarea muy común: construir la URL de una imagen y escapar el resultado antes de imprimir el atributo src. La función correcta depende de dónde esté realmente el archivo.

Si la imagen está dentro del tema

Guarda el archivo, por ejemplo, en assets/images/gabii_rese_web_v3.png. get_theme_file_uri() construye su URL y tiene en cuenta un tema hijo cuando el archivo existe allí.

template.php
<img
    src="<?php echo esc_url(
        get_theme_file_uri('assets/images/gabii_rese_web_v3.png')
    ); ?>"
    alt="Gabriel Rese"
>

Si la imagen está en wp-content/uploads

La URL base de uploads puede cambiar por configuración, multisitio o migraciones. Obtenerla desde WordPress evita escribir /wp-content/uploads/ a mano.

template.php
<?php $uploads = wp_get_upload_dir(); ?>

<img
    src="<?php echo esc_url(
        $uploads['baseurl'] . '/2026/05/gabii_rese_web_v3.png'
    ); ?>"
    alt="Gabriel Rese"
>

No mezclar la URL del tema con uploads

get_template_directory_uri() devuelve la URL del tema activo. Añadir después /wp-content/uploads/... suele producir una ruta dentro del tema que no existe. Si prefieres esa función para un archivo del tema, el patrón sería:

template.php
<img
    src="<?php echo esc_url(
        get_template_directory_uri() . '/assets/images/gabii_rese_web_v3.png'
    ); ?>"
    alt="Gabriel Rese"
>
Importante

En un tema hijo, get_template_directory_uri() apunta al tema padre. Para un archivo que pueda estar en el hijo, get_theme_file_uri() suele expresar mejor la intención.

Preguntas frecuentes

¿Por qué usar esc_url()?

Porque el valor se imprime dentro de un atributo URL. WordPress limpia el protocolo y escapa los caracteres necesarios para mostrarlo de forma segura.

¿Puedo escribir directamente /wp-content/uploads/?

Puede funcionar en una instalación concreta, pero deja de ser portable cuando cambia la ruta de uploads, el subdirectorio, el dominio o la configuración multisitio.

Referencias y revisión

Contenido contrastado con documentación oficial. Comprueba siempre el comportamiento en un entorno de pruebas antes de desplegar cambios.