รับ URL การอัปโหลดด้วย ID บล็อกในหลายไซต์


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มีการตั้งค่าตัวเลือก

แน่นอนฉันสามารถตั้งค่าตัวเลือกนี้ แต่นี่จะจับคู่รหัสของฉันกับการตั้งค่าระบบที่เป็นรูปธรรมซึ่งรวมถึง» WTF? « - ที่มีศักยภาพ

ดังนั้นฉันตัดสินใจที่จะเพิ่มตัวเลือกนี้:

/**
 * 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()และเป็นเช่นนั้นขึ้นอยู่กับค่าคงที่ซึ่งไม่ใช่วิธีปฏิบัติที่ดีเลย ยิ่งไปกว่านั้น fork จะเชื่อมโยงกับการใช้งานดั้งเดิมเสมอและหากการเปลี่ยนแปลงเริ่มต้นต้องมีการแก้ไข fork ด้วย

ดังนั้นวิธีนี้อยู่ไกลจากความสมบูรณ์แบบฉันสงสัยว่ามีวิธีที่ดีกว่าในการรับ URL อัปโหลดด้วยรหัสบล็อก


1
: มีวิธีแก้ปัญหาสำหรับปัญหานี้ในข่าวพูดได้หลายภาษาปลั๊กอินอื่นgithub.com/inpsyde/multilingual-press/blob/...
เดวิด

1
ฉันคิดว่ามันมีประโยชน์ที่คุณเพิ่มแหล่งที่มาเป็นคำตอบสำหรับผู้อ่านคนอื่น ๆ ลิงก์ไม่เสถียรและอยู่นอกคำตอบของ WPSE
bueltge

1
@bueltge โดยทั่วไปฉันเห็นด้วย แต่ความคิดเห็นของฉันที่ใช้วิธีแก้ปัญหานี้ค่อนข้างร้อนเกินไป การแก้ปัญหาเป็นแนวทางสำหรับปัญหานี้ แต่มีข้อ จำกัด บางอย่าง: github.com/inpsyde/multilingual-press/issues/133 เมื่อเราพบวิธีแก้ปัญหาฉันแน่นอนจะตอบได้ที่นี่เช่นกัน
David

คำตอบ:


1

ทำไมไม่ลองใช้get_option('upload_path')หลังจากคุณswitch_to_blog( $blog_ID );ล่ะ มันทำอย่างนั้นเหรอ?


(สร้าง URL แบบเต็มโดยใช้get_blog_details codex.wordpress.org/WPMU_Functions/get_blog_details )
เมแกน

ตรวจสอบwp_upload_dir(): ตัวเลือกupload_pathไม่ใช่ตัวเลือกเริ่มต้นและอาจว่างเปล่า upload_url_pathต่อไปก็อาจจะถูกตัดออกจากตัวเลือก อย่างไรก็ตามวิธีแก้ไขปัญหาที่เหมาะสมสำหรับปัญหานี้คือการแยกส่วนwp_upload_dir()อย่างสมบูรณ์เพื่อครอบคลุมการตั้งค่าและกรณีขอบทั้งหมดนี้
David

-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
ใช่ว่าควรจะทำงานในการติดตั้ง WordPress มาตรฐาน อย่างไรก็ตามฉันไม่ต้องการใช้สิ่งนี้เนื่องจากการดำเนินการเขียน DB สิ่งนี้จะทำให้switch_to_blog()ช้าลง
David

นี่ก็คือสมมติว่า URL เนื้อหาของคุณเป็น wp-content / uploads ซึ่งอาจไม่เป็นเช่นนั้น
rfair404
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.