问题的实质是,我正在寻找这样的解决方案:
$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?”潜力。
因此,我决定虚拟添加此选项:
/**
* 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 当我们找到解决方案时,我当然也会在这里回答。
—
大卫,