Laden Sie die URL nach Blog-ID in mehreren Standorten hoch

Das Wesen der Frage ist, ich suche eine Lösung wie folgt:

$blog_upload_dir_info = wp_upload_dir( $date, $blog_ID ); $blog_upload_url = $blog_upload_dir_info[ 'baseurl' ]; 

Wobei $blog_ID sich von der aktuellen Blog-ID unterscheidet. Die meisten »WP-offensichtlichen« Lösungen scheitern:

 switch_to_blog( $blog_ID ); $blog_upload_dir_info = wp_upload_dir(); restore_current_blog(); 

as wp_upload_dir () beruht auf der Konstante WP_CONTENT_URL die dynamisch die URL des aktuellen Blogs setzt, sofern die Option upload_url_path gesetzt ist.

Natürlich könnte ich diese Option einstellen, aber das würde meinen Code an konkrete Systemeinstellungen koppeln, die viel »WTF« – Potential beinhalten.

Also 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; } 

wp_upload_dir() ist in der Tat eine teilweise Abzweigung von 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 Ausführung gekoppelt und wenn sich das Original ändert, muss man auch die Gabel befestigen.

Da diese Lösung weit davon entfernt ist, perfekt zu sein, frage ich mich, ob es eine bessere Möglichkeit gibt, Upload-URLs anhand von Blog-IDs zu erhalten.

Solutions Collecting From Web of "Laden Sie die URL nach Blog-ID in mehreren Standorten hoch"

Warum nicht einfach get_option('upload_path') nach switch_to_blog( $blog_ID ); ? Macht das das?

Aus Gründen der Vollständigkeit scheint diese Lösung zu funktionieren, bis das Problem im core behoben ist:

 add_action('switch_blog', function($new_blog, $prev_blog_id) { update_option( 'upload_url_path', get_option('siteurl') . '/wp-content/uploads'); }, 10, 2);