멀티 사이트에서 블로그 ID로 URL 업로드


11

질문의 본질은 다음과 같은 해결책을 찾고 있다는 것입니다.

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

$blog_ID현재 블로그 ID와 다른 곳 가장»WP-obvious«솔루션이 실패합니다.

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?«-potential을 포함하는 구체적인 시스템 설정에 연결됩니다.

그래서 나는이 옵션을 가상으로 추가하기로 결정했습니다.

/**
 * 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()상수에 의존 하므로 좋은 습관이 아닙니다 . 또한 포크는 항상 원래 구현에 연결되며 원래 변경 사항이 있으면 포크도 수정해야합니다.

이 솔루션이 완벽하지는 않기 때문에 블로그 ID로 URL을 업로드하는 더 좋은 방법이 있는지 궁금합니다.


1
플러그인 다국어 프레스에서이 문제에 대한 또 다른 해결 방법이 있습니다 : github.com/inpsyde/multilingual-press/blob/…
David

1
다른 독자의 답변으로 소스를 추가하는 것이 도움이된다고 생각합니다. 링크가 안정적이지 않고 WPSE 답변 외부에 있습니다.
bueltge

1
@bueltge 기본적으로 동의합니다. 그러나이 해결 방법에 의존하는 나의 의견은 약간 과장되었습니다. 해결책은이 문제에 대한 접근 방법이지만 몇 가지 제한 사항이 있습니다 .github.com / inpsyde / multilingual-press / issues / 133 해결책을 찾았을 때 여기에서도 대답하겠습니다.
David

답변:


1

왜 그냥 사용 get_option('upload_path')하여 후 switch_to_blog( $blog_ID );? 그렇게합니까?


( get_blog_details codex.wordpress.org/WPMU_Functions/get_blog_details 를 사용하여 전체 URL을 작성하십시오 )
Megan

살펴보기 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.