La esencia de la pregunta es, estoy buscando una solución como esta:
$blog_upload_dir_info = wp_upload_dir( $date, $blog_ID );
$blog_upload_url = $blog_upload_dir_info[ 'baseurl' ];
Donde $blog_ID
es diferente de la ID del blog actual. La solución más »obvia para WP« falla:
switch_to_blog( $blog_ID );
$blog_upload_dir_info = wp_upload_dir();
restore_current_blog();
como wp_upload_dir () se basa en la constante WP_CONTENT_URL
que establece dinámicamente la URL del blog actual a menos que se establezca la opción upload_url_path
.
Por supuesto, podría establecer esta opción, pero esto acoplaría mi código a configuraciones concretas del sistema que incluye mucho potencial "WTF?".
Entonces decidí agregar esta opción virtualmente:
/**
* Apply a value to the option blog_upload_url
* if there's not already one
*
* @wp-hook option_upload_url_path
* @param string $upload_url
* @return string
*/
function get_real_blog_upload_url( $upload_url ) {
if ( '' !== trim( $upload_url ) )
return $upload_url;
$upload_path = trim( get_option( 'upload_path' ) );
$siteurl = get_option( 'siteurl' );
$wp_content_dir = $siteurl . '/wp-content';
if ( empty( $upload_path ) || 'wp-content/uploads' == $upload_path ) {
$dir = $wp_content_dir . '/uploads';
} elseif ( 0 !== strpos( $upload_path, ABSPATH ) ) {
// $dir is absolute, $upload_path is (maybe) relative to ABSPATH
$dir = path_join( ABSPATH, $upload_path );
} else {
$dir = $upload_path;
}
if ( empty( $upload_path ) || ( 'wp-content/uploads' == $upload_path ) || ( $upload_path == $dir ) )
$upload_path = $wp_content_dir . '/uploads';
else
$upload_path = trailingslashit( $siteurl ) . $upload_path;
return $upload_path;
}
que de hecho es una bifurcación parcial wp_upload_dir()
y, como tal, se basa en constantes que no son una buena práctica en absoluto . Además, una bifurcación siempre está acoplada a la implementación original y, si la original cambia, también hay que arreglar la bifurcación.
Entonces, como esta solución está lejos de ser perfecta, me pregunto si hay una mejor manera de obtener URL de carga por ID de blog.