web-dev-qa-db-fra.com

Obtenir l'URL de téléchargement par ID de blog dans plusieurs sites

L’essence de la question est la suivante: 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' ];

$blog_ID est différent de l'ID de blog actuel. La solution la plus "évidente" "échoue":

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

as wp_upload_dir () s'appuie sur la constante WP_CONTENT_URL qui définit de manière dynamique l'URL du blog actuel, sauf si l'option upload_url_path est définie.

Bien sûr, je pourrais définir cette option, mais cela couplerait mon code à des paramètres système concrets qui incluent beaucoup de "WTF?" - potentiel.

J'ai donc décidé d'ajouter cette option virtuellement:

/**
 * 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 une partie fourchette de wp_upload_dir() et en tant que telle repose sur des constantes qui n’est pas du tout une bonne pratique . De plus, une fourche est toujours couplée à la mise en œuvre d'origine et si les modifications d'origine sont modifiées, il faut également la réparer.

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.

11
David

Pourquoi ne pas simplement utiliser get_option('upload_path') après votre switch_to_blog( $blog_ID );? Est-ce que ça le fait?

1
Megan