मल्टीसाइट में ब्लॉग आईडी द्वारा अपलोड URL प्राप्त करें


11

प्रश्न का सार है, मैं इस तरह से एक समाधान की तलाश में हूँ:

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

जहाँ $blog_IDवर्तमान ब्लॉग आईडी से अलग है। सबसे »WP- स्पष्ट« समाधान विफल रहता है:

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

जैसा कि wp_upload_dir () निरंतर पर निर्भर करता है WP_CONTENT_URLजो गतिशील रूप से वर्तमान ब्लॉग के URL को तब तक upload_url_pathसेट करता है जब तक कि विकल्प सेट न हो।

बेशक, मैं इस विकल्प को सेट कर सकता था, लेकिन यह मेरे कोड को ठोस सिस्टम सेटिंग्स में जोड़ेगा, जिसमें बहुत अधिक »डब्ल्यूटीएफ शामिल है?« - संभावित।

इसलिए मैंने इस विकल्प को वस्तुतः जोड़ने का फैसला किया:

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

जो वास्तव में आंशिक रूप से कांटा है wp_upload_dir()और जैसे कि स्थिरांक पर निर्भर करता है जो कि एक अच्छा अभ्यास नहीं है । इसके अलावा एक कांटा हमेशा मूल कार्यान्वयन के लिए युग्मित होता है और यदि मूल परिवर्तन होता है, तो एक कांटा को भी ठीक करना होगा।

इसलिए जब तक यह समाधान सही होने से बहुत दूर है, मुझे आश्चर्य है कि क्या ब्लॉग आईडी द्वारा अपलोड यूआरएल प्राप्त करने का एक बेहतर तरीका है।


1
प्लगिन बहुभाषी प्रेस में इस समस्या के लिए एक और समाधान है: github.com/inpsyde/multilingual-press/blob/…
डेविड 12

1
मुझे लगता है कि यह मददगार है कि आप स्रोत को अन्य पाठकों के लिए उत्तर के रूप में जोड़ें। डब्ल्यूपीएसई उत्तर के बाहर लिंक स्थिर नहीं है।
bueltge

1
@bueltge मूल रूप से मैं सहमत हूं। लेकिन इस वर्कअराउंड पर भरोसा करने वाली मेरी टिप्पणी थोड़ी अधिक थी। समाधान इस समस्या के लिए एक दृष्टिकोण है, लेकिन इसकी कुछ सीमाएं हैं: github.com/inpsyde/multilingual-press/issues/133 जब हमें कोई समाधान मिला, तो मैं निश्चित रूप से इसका उत्तर यहां भी दूंगा।
डेविड

जवाबों:


1

क्यों नहीं बस get_option('upload_path')अपने बाद का उपयोग करें switch_to_blog( $blog_ID );? क्या वह ऐसा करता है?


( get_blog_details Codex.wordpress.org/WPMU_Functions/get_blog_details का उपयोग करके पूर्ण URL बनाएँ )
मेगन

इस पर गौर करें wp_upload_dir(): विकल्प upload_pathडिफ़ॉल्ट विकल्प नहीं है और खाली हो सकता है। आगे यह विकल्प द्वारा छोड़ा जा सकता है upload_url_path। हालांकि, इस समस्या के लिए एक उचित समाधान wp_upload_dir()पूरी तरह से इस सभी संभावित सेटिंग्स और किनारे के मामलों को कवर करने के लिए कांटा होगा ।
डेविड

-1

पूर्णता की खातिर, यह समाधान तब तक काम करता है जब तक कि समस्या कोर में तय न हो जाए:

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

1
हां, मानक वर्डप्रेस इंस्टॉल में काम करना चाहिए। हालाँकि, मैं डीबी लिखने की कार्रवाई के कारण इसका उपयोग नहीं करना चाहता। यह और switch_to_blog()भी धीमा हो जाएगा ।
डेविड

यह भी मान लिया गया है कि आपकी सामग्री url वास्तव में wp-content / uploads है, जो कि मामला नहीं हो सकता है।
rfair404
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.