函数文档

wp_get_registered_image_subsizes()

💡 云策文档标注

概述

wp_get_registered_image_subsizes() 函数用于获取所有已注册图像子尺寸的规范化列表。它通过结合默认尺寸和插件或主题添加的额外尺寸,返回一个关联数组,包含每个尺寸的宽度、高度和裁剪信息。

关键要点

  • 返回一个关联数组,键为图像尺寸名称,值为包含 'width'、'height' 和 'crop' 的子数组。
  • 函数首先获取额外图像尺寸(通过 wp_get_additional_image_sizes()),然后遍历所有中间图像尺寸(通过 get_intermediate_image_sizes())。
  • 对于每个尺寸,优先从额外尺寸中获取宽度、高度和裁剪设置,否则从 WordPress 选项(如 {$size_name}_size_w)中获取。
  • 如果宽度和高度都为空,则跳过该尺寸;裁剪设置会被规范化为布尔值或数组。

代码示例

function wp_get_registered_image_subsizes() {
    $additional_sizes = wp_get_additional_image_sizes();
    $all_sizes        = array();

    foreach ( get_intermediate_image_sizes() as $size_name ) {
        $size_data = array(
            'width'  => 0,
            'height' => 0,
            'crop'   => false,
        );

        if ( isset( $additional_sizes[ $size_name ]['width'] ) ) {
            $size_data['width'] = (int) $additional_sizes[ $size_name ]['width'];
        } else {
            $size_data['width'] = (int) get_option( "{$size_name}_size_w" );
        }

        if ( isset( $additional_sizes[ $size_name ]['height'] ) ) {
            $size_data['height'] = (int) $additional_sizes[ $size_name ]['height'];
        } else {
            $size_data['height'] = (int) get_option( "{$size_name}_size_h" );
        }

        if ( empty( $size_data['width'] ) && empty( $size_data['height'] ) ) {
            continue;
        }

        if ( isset( $additional_sizes[ $size_name ]['crop'] ) ) {
            $size_data['crop'] = $additional_sizes[ $size_name ]['crop'];
        } else {
            $size_data['crop'] = get_option( "{$size_name}_crop" );
        }

        if ( ! is_array( $size_data['crop'] ) || empty( $size_data['crop'] ) ) {
            $size_data['crop'] = (bool) $size_data['crop'];
        }

        $all_sizes[ $size_name ] = $size_data;
    }

    return $all_sizes;
}

注意事项

  • 此函数在 WordPress 5.3.0 版本中引入,用于统一处理图像尺寸数据。
  • 返回的数组可用于比较现有图像子尺寸(如通过 wp_get_missing_image_subsizes())或生成新尺寸(如通过 wp_create_image_subsizes())。
  • 相关函数包括 wp_get_additional_image_sizes()、get_intermediate_image_sizes() 和 get_option(),开发者应熟悉这些以理解尺寸来源。

📄 原文内容

Returns a normalized list of all currently registered image sub-sizes.

Return

array[] Associative array of arrays of image sub-size information, keyed by image size name.

Source

function wp_get_registered_image_subsizes() {
	$additional_sizes = wp_get_additional_image_sizes();
	$all_sizes        = array();

	foreach ( get_intermediate_image_sizes() as $size_name ) {
		$size_data = array(
			'width'  => 0,
			'height' => 0,
			'crop'   => false,
		);

		if ( isset( $additional_sizes[ $size_name ]['width'] ) ) {
			// For sizes added by plugins and themes.
			$size_data['width'] = (int) $additional_sizes[ $size_name ]['width'];
		} else {
			// For default sizes set in options.
			$size_data['width'] = (int) get_option( "{$size_name}_size_w" );
		}

		if ( isset( $additional_sizes[ $size_name ]['height'] ) ) {
			$size_data['height'] = (int) $additional_sizes[ $size_name ]['height'];
		} else {
			$size_data['height'] = (int) get_option( "{$size_name}_size_h" );
		}

		if ( empty( $size_data['width'] ) && empty( $size_data['height'] ) ) {
			// This size isn't set.
			continue;
		}

		if ( isset( $additional_sizes[ $size_name ]['crop'] ) ) {
			$size_data['crop'] = $additional_sizes[ $size_name ]['crop'];
		} else {
			$size_data['crop'] = get_option( "{$size_name}_crop" );
		}

		if ( ! is_array( $size_data['crop'] ) || empty( $size_data['crop'] ) ) {
			$size_data['crop'] = (bool) $size_data['crop'];
		}

		$all_sizes[ $size_name ] = $size_data;
	}

	return $all_sizes;
}

Changelog

Version Description
5.3.0 Introduced.