Wordpress多站点wp_upload_dir错误

时间:2016-03-03 19:35:37

标签: php wordpress url upload multisite

目前我正在尝试将图片上传到服务器端的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();返回公共路径/wp-content/uploads/2016/03,而不是特定子网站的路径,将/wp-content/uploads/sites/SITE_ID/2016/03

稍后当WP使用图像时,图像的网址设置为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()工作不正确..

谢谢..

1 个答案:

答案 0 :(得分:6)

我解决了!

对于遇到同样问题的每个人,解决方案很简单:

  1. 当您使用多站点时,请为" upload_dir"
  2. 注册过滤器
  3. 定义一个函数,您可以在其中临时更改路径和URL
  4. 那就是它!

    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;
    }
    
  5. 希望有人可以使用它。我的小时数。