将WP Uploader限制为仅在页面中使用某些文件类型

时间:2015-03-26 作者:user1048676

我有一个页面,我正在使用WP编辑器,允许用户在帖子中插入图像。我试图限制他们只添加图像的能力,我使用以下过滤器进行此操作:

add_filter(\'wp_handle_upload_prefilter\', \'yoursite_wp_handle_upload_prefilter\');
function yoursite_wp_handle_upload_prefilter($file) {
  // This bit is for the flash uploader
      if ($file[\'type\']==\'application/octet-stream\' && isset($file[\'tmp_name\'])) {
        $file_size = getimagesize($file[\'tmp_name\']);
        if (isset($file_size[\'error\']) && $file_size[\'error\']!=0) {
          $file[\'error\'] = "Unexpected Error: {$file_size[\'error\']}";
          return $file;
        } else {
          $file[\'type\'] = $file_size[\'mime\'];
        }
      }

      list($category,$type) = explode(\'/\',$file[\'type\']);

      if(\'image\'!=$category || !in_array($type,array(\'jpg\',\'jpeg\',\'gif\',\'png\'))) {
        $file[\'error\'] = "Sorry, you can only upload a .GIF, a .JPG, or a .PNG image file.";
      }

      return $file;
}
例如,当我尝试在管理仪表板中为插件添加zip文件时,就会触发此代码,但它不允许我这样做,因为此代码已触发。我试着添加一行来检查它是否是is_admin() 返回并不执行该代码。代码如下所示:

add_filter(\'wp_handle_upload_prefilter\', \'yoursite_wp_handle_upload_prefilter\');
function yoursite_wp_handle_upload_prefilter($file) {
// This bit is for the flash uploader
if( is_admin() ) return; //<--- Added this line
  if ($file[\'type\']==\'application/octet-stream\' && isset($file[\'tmp_name\'])) {
    $file_size = getimagesize($file[\'tmp_name\']);
    if (isset($file_size[\'error\']) && $file_size[\'error\']!=0) {
      $file[\'error\'] = "Unexpected Error: {$file_size[\'error\']}";
      return $file;
    } else {
      $file[\'type\'] = $file_size[\'mime\'];
    }
  }

  list($category,$type) = explode(\'/\',$file[\'type\']);

  if(\'image\'!=$category || !in_array($type,array(\'jpg\',\'jpeg\',\'gif\',\'png\'))) {
    $file[\'error\'] = "Sorry, you can only upload a .GIF, a .JPG, or a .PNG image file.";
  }

  return $file;
}
当我更新此内容时,在尝试上载图像时,我会收到以下错误代码:

`File is empty. Please upload something more substantial.`
如何将WP编辑器仅限于前端和管理部分的图像,而不执行此代码?是否有其他过滤器可供使用?

谢谢

1 个回复
SO网友:Adam Taylor

尝试

if ( is_admin() ) return $file;
取而代之的是。基本上,您应该始终返回已过滤的内容,否则您实际上已经过滤了$file 什么都没有。

结束

相关推荐

将WordPress附件导入wp-Content/Uploads/中的自定义目录

我希望有人能阐明我试图解决的这个问题,即使只是简单地改变我的思维过程,告诉我如何解决这个问题。我正在将一个基于CakePHP的定制CMS web应用程序导入WordPress,方法是遍历数据库,进行大量SQL查询,构建数组,最后输出必要的XML文件,以便使用WordPress导入工具导入。目前我已经很好地导入了类别、标签和帖子/页面,没有问题,但问题似乎出在图像上。基于CakePHP的CMS中当前的图像格式是images/year/month/day/post_id/image_name.ext据我所知,