Çoklu sitedeki blog kimliğine göre yükleme URL'si alın


11

Sorunun özü şudur: Böyle bir çözüm arıyorum:

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

Nerede $blog_IDşimdiki blog kimliğinin farklıdır. En »WP-bariz« çözümü başarısız olur:

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

olarak wp_upload_dir () sabit dayanır WP_CONTENT_URLseçenek sürece dinamik akım blog'un URL'sini ayarlanır upload_url_pathayarlanır.

Tabii ki, bu seçeneği ayarlayabilirsiniz, ancak bu benim kodum çok »WTF?« - potansiyel içeren somut sistem ayarları ile birleştirir.

Bu yüzden bu seçeneği sanal olarak eklemeye karar verdim:

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

bu aslında kısmen bir çataldır wp_upload_dir()ve bu nedenle iyi bir uygulama olmayan sabitlere dayanır . Dahası, bir çatal her zaman orijinal uygulamaya bağlanır ve orijinal değişirse, çatalın da sabitlenmesi gerekir.

Bu çözüm mükemmel olmaktan çok uzak olduğundan, URL'leri blog kimlikleriyle almanın daha iyi bir yolu olup olmadığını merak ediyorum.


1
Plugin Multilingual Press'te bu sorun için başka bir çözüm daha var: github.com/inpsyde/multilingual-press/blob/…
David

1
Kaynağı diğer okuyucular için cevap olarak eklemenin yararlı olduğunu düşünüyorum. Bağlantı kararlı değil ve WPSE Yanıtının dışında.
15'te

1
@bueltge Temel olarak katılıyorum. Ama bu geçici çözüme dayanarak yaptığım yorum biraz abartılıydı. Çözüm bu soruna bir yaklaşımdır, ancak bazı sınırlamaları vardır: github.com/inpsyde/multilingual-press/issues/133 Bir çözüm bulduğumuzda, elbette burada da cevaplayacağım.
David

Yanıtlar:


1

Neden sadece get_option('upload_path')senin sonra kullanmıyorsun switch_to_blog( $blog_ID );? Yapıyor mu?


(Tam URL'yi get_blog_details codex.wordpress.org/WPMU_Functions/get_blog_details kullanarak oluşturun )
Megan

Şuna bakın wp_upload_dir(): Seçenek upload_pathvarsayılan bir seçenek değildir ve boş olabilir. Ayrıca, seçenek tarafından atlanabilir upload_url_path. Bununla birlikte, bu sorun için uygun bir çözüm, wp_upload_dir()tüm bu olası ayarları ve kenar durumlarını kapsayacak şekilde tamamen çatallanmak olacaktır .
David

-1

Tamlık uğruna, bu çözüm, sorun özünde çözülene kadar işe yarıyor gibi görünüyor:

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

1
Evet, bu standart WordPress kurulumlarında çalışmalıdır. Ancak, DB yazma eylemi nedeniyle bu kullanmak istemem. Bu daha switch_to_blog()da yavaşlayacaktır.
David

Bu, içerik URL'nizin gerçekte wp-içerik / yüklemeler olduğunu varsayar; bu durum böyle olmayabilir.
rfair404
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.