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

11

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();

comme wp_upload_dir () relit sur la page d'accueil qui définit de manière dynamique l’URL du blog actuel, sauf si l’option WP_CONTENT_URL 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 fork de upload_url_path et repose en tant que telle 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.

Comme cette solution est loin d’être parfaite, je me demande s’il existe un meilleur moyen de récupérer les URL de téléversement par identifiants de blog.

    
posée David 01.05.2015 - 13:57

2 réponses

1

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

    
réponse donnée Megan 25.02.2016 - 13:42
-1

Par souci d'exhaustivité, la solution semble fonctionner tant que le problème n'est pas résolu au coeur :

add_action('switch_blog', function($new_blog, $prev_blog_id) {
    update_option( 'upload_url_path',  get_option('siteurl') . '/wp-content/uploads');
}, 10, 2);
    
réponse donnée Arbelzapf 14.10.2016 - 12:10

Lire d'autres questions sur les étiquettes