Nhận URL tải lên bằng ID blog trong nhiều trang


11

Bản chất của câu hỏi là, tôi đang tìm kiếm một giải pháp như thế này:

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

$blog_IDID blog hiện tại khác nhau ở đâu . Giải pháp «WP-Rõ ràng nhất« thất bại:

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

wp_upload_dir () dựa vào hằng số WP_CONTENT_URLđược đặt động URL của blog hiện tại trừ khi tùy chọn upload_url_pathđược đặt.

Tất nhiên, tôi có thể đặt tùy chọn này, nhưng điều này sẽ kết hợp mã của tôi với các cài đặt hệ thống cụ thể bao gồm nhiều »WTF?« - tiềm năng.

Vì vậy, tôi quyết định thêm tùy chọn này hầu như:

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

trong thực tế, một phần ngã ba wp_upload_dir()và như vậy phụ thuộc vào các hằng số không phải là một thực hành tốt . Hơn nữa, một ngã ba luôn được kết hợp với thực hiện ban đầu và nếu thay đổi ban đầu, người ta cũng phải sửa chữa ngã ba.

Vì vậy, vì giải pháp này không còn hoàn hảo, tôi tự hỏi liệu có cách nào tốt hơn để lấy URL tải lên bằng ID blog không.


1
Có một cách giải quyết khác cho vấn đề này trong Báo chí đa ngôn ngữ của Plugin: github.com/inpsyde/mult Languages
David

1
Tôi nghĩ thật hữu ích khi bạn thêm nguồn dưới dạng câu trả lời cho những người đọc khác. Liên kết không ổn định và nằm ngoài Câu trả lời của WPSE.
bueltge

1
@bueltge Về cơ bản tôi đồng ý. Nhưng nhận xét của tôi dựa vào cách giải quyết này là hơi quá nóng. Giải pháp là một cách tiếp cận cho vấn đề này, nhưng nó có một số hạn chế: github.com/inpsyde/multallel-press/issues/133 Khi chúng tôi tìm thấy giải pháp, tất nhiên tôi cũng sẽ trả lời nó ở đây.
David

Câu trả lời:


1

Tại sao không chỉ sử dụng get_option('upload_path')sau của bạn switch_to_blog( $blog_ID );? Điều đó có làm được không?


(Xây dựng URL đầy đủ bằng cách sử dụng get_blog_details codex.wordpress.org/WPMU_Fiances/get_blog_details )
Megan

Nhìn vào wp_upload_dir(): Tùy chọn upload_pathkhông phải là tùy chọn mặc định và có thể trống. Hơn nữa nó có thể được bỏ qua bởi các tùy chọn upload_url_path. Tuy nhiên, một giải pháp thích hợp cho vấn đề này sẽ là rẽ nhánh wp_upload_dir()hoàn toàn để bao gồm tất cả các cài đặt có thể và các trường hợp cạnh này.
David

-1

Để hoàn thiện, giải pháp này dường như hoạt động cho đến khi vấn đề được khắc phục trong cốt lõi:

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

1
Vâng, điều đó sẽ làm việc trong các cài đặt WordPress tiêu chuẩn. Tuy nhiên, tôi sẽ không muốn sử dụng điều này do hành động ghi DB. Điều này sẽ làm cho switch_to_blog()thậm chí chậm hơn.
David

Điều này cũng giả sử rằng url nội dung của bạn thực sự là wp-content / tải lên, có thể không phải là trường hợp.
rfair404
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.