질문의 본질은 다음과 같은 해결책을 찾고 있다는 것입니다.
$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
다른 독자의 답변으로 소스를 추가하는 것이 도움이된다고 생각합니다. 링크가 안정적이지 않고 WPSE 답변 외부에 있습니다.
—
bueltge
@bueltge 기본적으로 동의합니다. 그러나이 해결 방법에 의존하는 나의 의견은 약간 과장되었습니다. 해결책은이 문제에 대한 접근 방법이지만 몇 가지 제한 사항이 있습니다 .github.com / inpsyde / multilingual-press / issues / 133 해결책을 찾았을 때 여기에서도 대답하겠습니다.
—
David