สาระสำคัญของคำถามคือฉันกำลังมองหาวิธีการแก้ปัญหาเช่นนี้:
$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 อัปโหลดด้วยรหัสบล็อก