检查附件是否为图片

时间:2016-03-17 19:05:38

标签: php wordpress woocommerce

我试图在基于附件类型的woocommerce产品特色图像的位置显示图像或视频。为此,我正在尝试检查帖子附件是图片还是视频。

我用谷歌搜索,发现get_post_mime_type()将完成这项工作,在wordpress功能参考页面here的帮助下,我添加了以下代码,但它没有给我所需的输出,切换案例是总是进入默认情况,我无法检查附件mime类型。有没有人早点面对这个问题?

function get_icon_for_attachment($post_id) {
  $base = get_template_directory_uri() . "/images/icons/";
  $type = get_post_mime_type($post_id);
  switch ($type) {
    case 'image/jpeg':
    case 'image/png':
    case 'image/gif':
      return $base . "image.png"; break;
    case 'video/mpeg':
    case 'video/mp4': 
    case 'video/quicktime':
      return $base . "video.png"; break;
    case 'text/csv':
    case 'text/plain': 
    case 'text/xml':
      return $base . "text.png"; break;
    default:
      return $base . "file.png";
  }
}
// call it like this:
echo '<img src="'.get_icon_for_attachment($my_attachment->ID).'" />';

2 个答案:

答案 0 :(得分:0)

我没有使用此功能。您可以看到另一种方法:

    $file_url = wp_get_attachment_url($attachment_id);
    $file_parts = pathinfo($file_url);
    echo $file_parts['extension'];

答案 1 :(得分:0)

虽然我怀疑PHP可能会原谅你的语法,但我认为你的switch逻辑是不正确的。在break语句后添加return毫无意义。这是编码它的首选方式。

function get_icon_for_attachment($post_id) {
    $base = sprintf('%s/images/icons', get_template_directory_uri());
    $path = sprintf('%s/file.png', $base);
    $type = get_post_mime_type($post_id);
    switch ($type) {
        case 'image/jpeg':
        case 'image/png':
        case 'image/gif':
            $path = sprintf('%s/image.png', $base);
            break;
        case 'video/mpeg':
        case 'video/mp4': 
        case 'video/quicktime':
            $path = sprintf('%s/video.png', $base);
            break;
        case 'text/csv':
        case 'text/plain': 
        case 'text/xml':
            $path = sprintf('%s/text.png', $base);
            break;
    }
    return $path;
}

不要担心我对sprintf()的使用,这正是我喜欢使用的。如果它仍然使用我的函数版本返回file.png,则附件mime类型不是图像。

或者附件不是您要提供的mime类型之一,例如.ico,.bmp或.tiff文件。