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.
fuente
Respuestas:
¿Por qué no solo usar
get_option('upload_path')
después de tuswitch_to_blog( $blog_ID );
? ¿Eso lo hace?fuente
get_blog_details
codex.wordpress.org/WPMU_Functions/get_blog_details )wp_upload_dir()
: la opciónupload_path
no es una opción predeterminada y puede estar vacía. Además, podría ser omitido por la opciónupload_url_path
. Sin embargo, una solución adecuada para este problema sería bifurcarwp_upload_dir()
completamente para cubrir todas estas configuraciones posibles y casos extremos.Para completar, esta solución parece funcionar hasta que el problema se solucione en el núcleo:
fuente
switch_to_blog()
aún más lento.