钩子文档

intermediate_image_sizes_advanced

💡 云策文档标注

概述

intermediate_image_sizes_advanced 是一个 WordPress 过滤器,用于控制在图片上传时自动生成的中间尺寸。开发者可以通过此 Hook 自定义或排除特定图片类型的尺寸生成。

关键要点

  • 过滤器名称:intermediate_image_sizes_advanced
  • 参数:$new_sizes(关联数组,要创建的图片尺寸)、$image_meta(图片元数据,如宽度、高度、文件信息)、$attachment_id(附件 ID)
  • 用途:过滤上传图片时自动生成的中间尺寸,允许基于图片类型或元数据动态调整尺寸列表
  • 相关函数:wp_create_image_subsizes() 使用此过滤器来创建图片子尺寸并更新元数据
  • 版本历史:从 WordPress 2.9.0 引入,4.4.0 添加 $image_meta 参数,5.3.0 添加 $attachment_id 参数

代码示例

function wpdocs_disable_upload_sizes( $sizes, $image_meta ) {
    // 获取文件类型数据。
    $filetype = wp_check_filetype( $image_meta['file'] );
    
    $exclude_file_types = array(
        'image/gif',
    );

    // 检查文件类型是否在排除列表中
    if ( in_array( $filetype['type'], $exclude_file_types ) ) {
        $sizes = array();
    }

    // 返回要创建的尺寸(如果是 GIF 图片则返回空数组)。
    return $sizes;
}   
add_filter( 'intermediate_image_sizes_advanced', 'wpdocs_disable_upload_sizes', 10, 2 );

注意事项

此过滤器仅影响上传时自动生成的中间尺寸,不直接修改原始图片或已存在的尺寸。使用时需确保参数顺序和类型正确,以避免影响其他功能。


📄 原文内容

Filters the image sizes automatically generated when uploading an image.

Parameters

$new_sizesarray
Associative array of image sizes to be created.
$image_metaarray
The image meta data: width, height, file, sizes, etc.
$attachment_idint
The attachment post ID for the image.

Source

$new_sizes = apply_filters( 'intermediate_image_sizes_advanced', $new_sizes, $image_meta, $attachment_id );

Changelog

Version Description
5.3.0 Added the $attachment_id argument.
4.4.0 Added the $image_meta argument.
2.9.0 Introduced.

User Contributed Notes

  1. Skip to note 2 content

    You can exclude certain image types from images sizes, like gifs

    function wpdocs_disable_upload_sizes( $sizes, $image_meta ) {
    
        // Get filetype data.
        $filetype = wp_check_filetype( $image_meta['file'] );
    	
        $exclude_file_types = array(
        	'image/gif',
        );
    
        // Check if file type is on exclude list 
        if ( in_array( $filetype['type'], $exclude_file_types ) ) {
            $sizes = array();
        }
    
        // Return sizes you want to create from image (None if image is gif.)
        return $sizes;
    }   
    add_filter( 'intermediate_image_sizes_advanced', 'wpdocs_disable_upload_sizes', 10, 2 );