Das Wesentliche der Frage ist, ich suche nach einer Lösung wie dieser:
$blog_upload_dir_info = wp_upload_dir( $date, $blog_ID );
$blog_upload_url = $blog_upload_dir_info[ 'baseurl' ];
Wo $blog_ID
unterscheidet sich von der aktuellen Blog-ID. Die »WP-offensichtlichste« Lösung schlägt fehl:
switch_to_blog( $blog_ID );
$blog_upload_dir_info = wp_upload_dir();
restore_current_blog();
Als wp_upload_dir () wird die Konstante verwendet, WP_CONTENT_URL
die dynamisch die URL des aktuellen Blogs festlegt, sofern die Option nicht festgelegt upload_url_path
ist.
Natürlich könnte ich diese Option einstellen, aber dies würde meinen Code mit konkreten Systemeinstellungen koppeln, die viel »WTF?« - Potenzial beinhalten.
Deshalb habe ich beschlossen, diese Option virtuell hinzuzufügen:
/**
* 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;
}
Dies ist in der Tat eine teilweise Abzweigung wp_upload_dir()
und beruht als solche auf Konstanten, was überhaupt keine gute Praxis ist . Außerdem ist eine Gabel immer an die ursprüngliche Implementierung gekoppelt, und wenn sich die ursprüngliche ändert, muss auch die Gabel repariert werden.
Da diese Lösung bei weitem nicht perfekt ist, frage ich mich, ob es einen besseren Weg gibt, Upload-URLs anhand von Blog-IDs abzurufen.