我试图在不使用插件的情况下实现这一点,但是操作和过滤器
有没有办法删除WordPress根据自定义帖子类型生成的额外图像大小?我一直想和intermediate_image_sizes_advanced
过滤器,但它看起来没有访问权限$post
或post_type
. 所以我使用这样的函数:
function filter_image_sizes($sizes) {
global $post;
global $post_type;
if($post->post_type == \'cpt_slides\' || $post_type == \'cpt_slides\'){
unset( $sizes[\'thumbnail\']);
unset($sizes[\'medium\']);
unset( $sizes[\'large\']);
}
return $sizes;
}
add_filter(\'intermediate_image_sizes_advanced\', \'filter_image_sizes\');
The Reasoning / Situation
我创建了一个幻灯片自定义帖子类型(如图像滑块),它使用特色图像允许用户上传“幻灯片”。我也有一些自定义的图像大小,但其中一个是专门为幻灯片设计的。由于幻灯片图像将是一个静态大小,我不想让WordPress生成所有这些我永远不会使用的额外图像大小,因此这是一个问题。
最合适的回答,由SO网友:Ravinder Kumar 整理而成
可能这个过滤器应该工作intermediate_image_sizes
Note: 如果您正在从后期编辑屏幕上载图像,此解决方案将起作用。(使用WP-3.8.1在本地主机上测试)
add_filter( \'intermediate_image_sizes\', \'ravs_slider_image_sizes\', 999 );
function ravs_slider_image_sizes( $image_sizes ){
// size for slider
$slider_image_sizes = array( \'your_image_size_1\', \'your_image_size_2\' );
// for ex: $slider_image_sizes = array( \'thumbnail\', \'medium\' );
// instead of unset sizes, return your custom size for slider image
if( isset($_REQUEST[\'post_id\']) && \'your_custom_post_type\' === get_post_type( $_REQUEST[\'post_id\'] ) )
return $slider_image_sizes;
return $image_sizes;
}
SO网友:Nullvariable
问题的一部分可能是,此过滤器最终可能会从多个位置调用,或者可能是从没有帖子与查询关联的位置调用。事实上,所使用的过滤器似乎只在附件作为元数据的一部分首次创建时使用。
做了一点测试后,我发现在上载图像时,$post和$post\\u类型的变量没有设置在使用此过滤器的位置。这可能是因为媒体上传是通过javascript作为后台进程完成的,而不是推送表单提交并重新加载页面。
WordPress并没有真正设置来处理这种过滤,这可能是将来更新时应该考虑的事情,我建议向WordPress Trac提交一张票据,并在那里获得一些建议。
WordPress基本上是独立于可能附加到的帖子来存储媒体元素,以便您可以在多个位置轻松使用同一文件。如果WordPress允许您在更细粒度的基础上调整生成的大小,那么最终可能会出现这样的情况:您上载了一个博客文章的图像,然后希望将该图像作为特色图像重用到其他地方。媒体库的设置是为了处理这类内容很好,但它的设置不是为了根据具体情况重新生成缩略图,而是为了生成所需的所有缩略图,因为您可以在其他地方使用任何或所有缩略图。
处理此问题的最简单方法是在上载媒体时,为自定义帖子类型的元盒使用自己的媒体上载功能。这将允许您绕过正常的WordPress缩略图过程,只创建上传文件时所需的大小。这里有一个很好的教程,可以帮助您完成这一过程:http://wp.tutsplus.com/tutorials/attaching-files-to-your-posts-using-wordpress-custom-meta-boxes-part-1/