Obtener URL de carga por ID de blog en varios sitios

11

La esencia de la pregunta es que estoy buscando una solución como esta:

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

Donde $blog_ID es diferente del ID del blog actual. La solución más »WP-obvia« falla:

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

como wp_upload_dir () las instalaciones de los clientes de los clientes. que establece dinámicamente la URL del blog actual a menos que se establezca la opción WP_CONTENT_URL .

Por supuesto, podría establecer esta opción, pero esto uniría mi código a la configuración concreta del sistema, que incluye mucho potencial de "WTF?"

Así que decidí agregar esta opción 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 es en realidad una bifurcación en parte de upload_url_path y como tal se basa en constantes que no es una buena práctica en absoluto . Además, un tenedor siempre está acoplado a la implementación original y, si el original cambia, también hay que arreglar el tenedor.

Entonces, como esta solución está lejos de ser perfecta, me pregunto si hay una mejor manera de obtener URLs de carga por ID de blog.

    
pregunta David 01.05.2015 - 13:57

2 respuestas

1

¿Por qué no solo usa get_option('upload_path') después de su switch_to_blog( $blog_ID ); ? ¿Eso lo hace?

    
respondido por el Megan 25.02.2016 - 13:42
-1

En aras de la integridad, esta solución parece funcionar hasta que el problema se resuelve en el núcleo :

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

Lea otras preguntas en las etiquetas