cómo obtener la ruta a las imágenes en la carpeta uploads para usar en un plugin
Tengo algunas imágenes en una carpeta en /wp-content/uploads
. También tengo un archivo de plugin en /wp-content/plugins
. Quiero recuperar las imágenes almacenadas en /wp-content/uploads
y usarlas en el archivo del plugin.
He intentado esto
echo'<img src="../../USER_PHOTOS/ronny'" href="#"></img>';
¿alguien puede mostrarme cómo puedo obtener la ruta a estas imágenes? gracias.
Si no me equivoco, quizás quieras probar la función wp_uploads_dir, de la siguiente manera:
$uploads = wp_upload_dir();
echo '<img src="' . esc_url( $uploads['baseurl'] . '/USER_PHOTOS/ronny/' ) . '" href="#">';

Desafortunadamente existe un error documentado donde wp_upload_dir()
no respeta https (ssl). Mi sugerencia es crear un envoltorio (wrapper) para eliminar el protocolo de la URL devuelta y hacerla adaptable al entorno:
function wp_upload_dir_url() {
$upload_dir = wp_upload_dir();
$upload_dir = $upload_dir['baseurl'];
return preg_replace('/^https?:/', '', $upload_dir);
};
echo(wp_upload_dir_url() . '/2017/01/my-img.jpg');
// devuelve algo como '//misitio.test/wp-content/uploads/2017/01/my-img.jpg'
// lo cual es perfectamente aceptable como src de una imagen
Si te preocupa el impacto en el rendimiento de usar preg_replace()
múltiples veces, entonces define una constante en tu archivo functions.php:
define('WP_UPLOAD_DIR_URL', wp_upload_dir_url() . '/');

Dan S señala un ticket en trac donde wp_upload_dir()
no soporta https. No he encontrado que este sea el caso en mis sitios, pero si te afecta, puedes agregar un filtro a upload_dir
y devolver manualmente el protocolo correcto basado en el condicional is_ssl()
.
add_filter( 'upload_dir', function( $upload_dir ){
return array_map( function( $value ) {
return is_ssl() ?
str_replace( 'http://', 'https://', $value ) :
str_replace( 'https://', 'http://', $value );
}, $upload_dir );
}, 10, 1 );
Luego puedes seguir usando wp_upload_dir()
como siempre lo has hecho.
Como se menciona aquí, a menos que tengas preocupaciones específicas de rendimiento, deberías usar https://.

Encontré la respuesta. Utilicé wp_upload_dir();
codex de WordPress

Esto es lo que utilicé para acceder a un archivo de imagen llamado "rock_01.jpg" subido a la carpeta de WordPress "uploads/complete-theme/"
<?php $upload_dir = wp_upload_dir(); ?>
<img src="<?php echo $upload_dir['baseurl'] . '/complete-theme/rock_01.jpg'; ?>" />
Funcionó como se esperaba.
