Wordpress 多站点 wp_upload_dir 错误
Wordpress multisite wp_upload_dir wrong
目前我正在尝试将图像上传到服务器端的 Wordpress-Multisite。
(图像已经在同一台服务器的另一个路径上)
我写了一个小的 PHP 脚本来处理这个问题:
$upload_dir = wp_upload_dir();
var_dump( $upload_dir);
$filename = basename($imagepath);
if (wp_mkdir_p($upload_dir['path'])) {
$file = $upload_dir['path'].'/'.$filename;
} else {
$file = $upload_dir['basedir'].'/'.$filename;
}
copy($imagepath, $file);
$wp_filetype = wp_check_filetype($filename, null);
$attachment = array(
'guid' => $upload_dir['url'].'/'.basename($filename),
'post_mime_type' => $wp_filetype['type'],
'post_title' => sanitize_file_name($filename),
'post_content' => '',
'post_status' => 'inherit', );
$attach_id = wp_insert_attachment($attachment, $file, $postid);
一切正常,但图像存储在错误的文件夹中。
wp_upload_dir();
returns 公共路径 /wp-content/uploads/2016/03
,不是特定子站点的路径,它将是 /wp-content/uploads/sites/SITE_ID/2016/03
后来WP使用图片时,图片的url设置为http://example.com/wp-content/uploads/sites/SITE_ID/2016/03/IMAGE.JPG
(不正确...)
使用内置媒体上传工具从 wordpress 上传文件工作正常(文件存储在 /wp-content/uploads/sites/SITE_ID/2016/03
)
你看,wp_upload_dir()
工作不正常..
谢谢..
我解决了!
大家有同样的问题,解决方法很简单:
- 当您使用多站点时,请为 "upload_dir"
注册过滤器
- 定义一个函数,您可以在其中临时更改路径和 url
就是这样!
if(is_multisite()){
add_filter('upload_dir', 'fix_upload_paths');
}
function fix_upload_paths($data)
{
$data['basedir'] = $data['basedir'].'/sites/'.get_current_blog_id();
$data['path'] = $data['basedir'].$data['subdir'];
$data['baseurl'] = $data['baseurl'].'/sites/'.get_current_blog_id();
$data['url'] = $data['baseurl'].$data['subdir'];
return $data;
}
希望有人能用得上。对我来说几个小时。
更简单的方法是使用switch_to_blog()
函数
if( is_multisite() ) {
switch_to_blog( get_current_blog_id() );
$imgdir = wp_upload_dir();
// do more process related to current blog
// close the swicth
restore_current_blog();
}
详情见https://developer.wordpress.org/reference/functions/switch_to_blog/
目前我正在尝试将图像上传到服务器端的 Wordpress-Multisite。 (图像已经在同一台服务器的另一个路径上)
我写了一个小的 PHP 脚本来处理这个问题:
$upload_dir = wp_upload_dir();
var_dump( $upload_dir);
$filename = basename($imagepath);
if (wp_mkdir_p($upload_dir['path'])) {
$file = $upload_dir['path'].'/'.$filename;
} else {
$file = $upload_dir['basedir'].'/'.$filename;
}
copy($imagepath, $file);
$wp_filetype = wp_check_filetype($filename, null);
$attachment = array(
'guid' => $upload_dir['url'].'/'.basename($filename),
'post_mime_type' => $wp_filetype['type'],
'post_title' => sanitize_file_name($filename),
'post_content' => '',
'post_status' => 'inherit', );
$attach_id = wp_insert_attachment($attachment, $file, $postid);
一切正常,但图像存储在错误的文件夹中。
wp_upload_dir();
returns 公共路径 /wp-content/uploads/2016/03
,不是特定子站点的路径,它将是 /wp-content/uploads/sites/SITE_ID/2016/03
后来WP使用图片时,图片的url设置为http://example.com/wp-content/uploads/sites/SITE_ID/2016/03/IMAGE.JPG
(不正确...)
使用内置媒体上传工具从 wordpress 上传文件工作正常(文件存储在 /wp-content/uploads/sites/SITE_ID/2016/03
)
你看,wp_upload_dir()
工作不正常..
谢谢..
我解决了!
大家有同样的问题,解决方法很简单:
- 当您使用多站点时,请为 "upload_dir" 注册过滤器
- 定义一个函数,您可以在其中临时更改路径和 url
就是这样!
if(is_multisite()){ add_filter('upload_dir', 'fix_upload_paths'); } function fix_upload_paths($data) { $data['basedir'] = $data['basedir'].'/sites/'.get_current_blog_id(); $data['path'] = $data['basedir'].$data['subdir']; $data['baseurl'] = $data['baseurl'].'/sites/'.get_current_blog_id(); $data['url'] = $data['baseurl'].$data['subdir']; return $data; }
希望有人能用得上。对我来说几个小时。
更简单的方法是使用switch_to_blog()
函数
if( is_multisite() ) {
switch_to_blog( get_current_blog_id() );
$imgdir = wp_upload_dir();
// do more process related to current blog
// close the swicth
restore_current_blog();
}
详情见https://developer.wordpress.org/reference/functions/switch_to_blog/