【问题标题】:Wordpress multisite wp_upload_dir wrongWordpress 多站点 wp_upload_dir 错误
【发布时间】:2016-06-17 07:46:39
【问题描述】:

目前我正在尝试将图像上传到服务器端的 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使用图片时,图片的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() 工作不正确..

谢谢..

【问题讨论】:

    标签: php wordpress url upload multisite


    【解决方案1】:

    我解决了!

    对于每个有同样问题的人来说,解决方法很简单:

    1. 当您在多站点上时,为“upload_dir”注册一个过滤器
    2. 定义一个函数,您可以在其中临时更改路径和网址
    3. 就是这样!

      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;
      }
      

    希望有人可以使用它。我的小时数。

    【讨论】:

      【解决方案2】:

      更简单的方法是使用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/

      【讨论】:

        猜你喜欢
        • 2014-10-13
        • 2015-07-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-08
        • 1970-01-01
        相关资源
        最近更新 更多