Obter URL de upload por ID de blog em multisite

11

A essência da pergunta é que estou procurando uma solução como esta:

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

Em que $blog_ID é diferente do ID do blog atual. A solução mais »WP-óbvia« falha:

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

como wp_upload_dir () depende da constante WP_CONTENT_URL que é dinamicamente definido o URL do blog atual, a menos que a opção upload_url_path esteja definida.

É claro que eu poderia definir essa opção, mas isso combinaria meu código com configurações concretas do sistema, o que inclui muito »WTF?« - potencial.

Então, decidi adicionar essa opção virtualmente:

/**
 * 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;
}

que é na verdade um fork parcial de wp_upload_dir() e como tal depende de constantes que não é uma boa prática em tudo . Além disso, um garfo é sempre acoplado à implementação original e, se o original for alterado, também é necessário corrigir o garfo.

Assim, como esta solução está longe de ser perfeita, pergunto-me se existe uma maneira melhor de obter URLs de upload por IDs de blog.

    
por David 01.05.2015 / 13:57

2 respostas

1

Por que não usar apenas get_option('upload_path') depois do seu switch_to_blog( $blog_ID ); ? Isso faz isso?

    
por Megan 25.02.2016 / 13:42
-1

Para ser completamente completo, esta solução parece funcionar até que o problema seja resolvido :

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