我试图在基于附件类型的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).'" />';
答案 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文件。