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.
quelle
Antworten:
Warum nicht einfach
get_option('upload_path')
nach Ihrem verwendenswitch_to_blog( $blog_ID );
? Tut das das?quelle
get_blog_details
codex.wordpress.org/WPMU_Functions/get_blog_details )wp_upload_dir()
: Die Optionupload_path
ist keine Standardoption und möglicherweise leer. Ferner könnte es durch die Option weggelassen werdenupload_url_path
. Eine geeignete Lösung für dieses Problem wäre jedoch, sichwp_upload_dir()
vollständig zu teilen , um all diese möglichen Einstellungen und Randfälle abzudecken.Der Vollständigkeit halber scheint diese Lösung zu funktionieren, bis das Problem im Kern behoben ist:
quelle
switch_to_blog()
noch langsamer machen.