L'essence de la question est que je cherche une solution comme celle-ci:
$blog_upload_dir_info = wp_upload_dir( $date, $blog_ID );
$blog_upload_url = $blog_upload_dir_info[ 'baseurl' ];
Où $blog_ID
est différent de l'ID de blog actuel. La solution la plus «WP-évidente» échoue:
switch_to_blog( $blog_ID );
$blog_upload_dir_info = wp_upload_dir();
restore_current_blog();
car wp_upload_dir () repose sur la constante WP_CONTENT_URL
qui définit dynamiquement l'URL du blog actuel, sauf si l'option upload_url_path
est définie.
Bien sûr, je pouvais définir cette option, mais cela couplerait mon code à des paramètres système concrets qui incluent beaucoup de potentiel »WTF?«.
J'ai donc décidé d'ajouter virtuellement cette option:
/**
* 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;
}
qui est en fait un fork de wp_upload_dir()
et en tant que tel s'appuie sur des constantes, ce qui n'est pas du tout une bonne pratique . De plus, une fourche est toujours couplée à l'implémentation d'origine et si l'original change, il faut également fixer la fourche.
Donc, comme cette solution est loin d'être parfaite, je me demande s'il existe un meilleur moyen d'obtenir des URL de téléchargement par ID de blog.
Réponses:
Pourquoi ne pas simplement l'utiliser
get_option('upload_path')
après votreswitch_to_blog( $blog_ID );
? Est-ce que ça le fait?la source
get_blog_details
codex.wordpress.org/WPMU_Functions/get_blog_details )wp_upload_dir()
: l'optionupload_path
n'est pas une option par défaut et peut être vide. De plus, cette option pourrait être omiseupload_url_path
. Cependant, une solution appropriée à ce problème serait de bifurquerwp_upload_dir()
complètement pour couvrir tous ces paramètres possibles et les cas de bord.Par souci d'exhaustivité, cette solution semble fonctionner jusqu'à ce que le problème soit résolu dans le noyau:
la source
switch_to_blog()
encore plus lent.