不带ADD_IMAGE_SIZE()的自定义图像大小

时间:2014-05-26 作者:horace

我需要在我的主题很多不同的图像大小。我知道如何将它们添加到add_image_size() 函数中的函数。php。

但这些定义的大小将为每个上传的图像创建大量文件。即使图像不需要所有的尺寸,只需要特定的尺寸,这取决于它们在主题中的使用位置。

这不是一种巨大的浪费吗?

所以我想我在我的主题中这样做:

the_post_thumbnail(array(258, 190)); 
但这并不可靠。通常这些数字似乎被完全忽略了。WordPress中任意大小的数组是如何工作的?

我很困惑。:)

1 个回复
SO网友:kaiser

文档、docBlocks和Codex

基本上,你有一个非常简单的错误:$attributes 数组为the 2nd argument:

function the_post_thumbnail( $size = \'post-thumbnail\', $attr = \'\' ) {
    echo get_the_post_thumbnail( null, $size, $attr );
}
它的内部工作方式wp_get_attachment_image().

2)

稍后,在此函数中,下一个相关函数调用是

$image = wp_get_attachment_image_src( $attachment_id, $size, $icon );
在那里,image_downsize() 调用,这是您可以跳入并短路整个系统的第一个点,只需返回自定义大小的图像:

if ( $out = apply_filters( \'image_downsize\', false, $id, $size ) ) {
    return $out;
}
如果没有发生这种情况,您可以进一步查看,下一个函数调用是

// $size: One of the registered image sizes: medium, large, full, custom, etc.
$intermediate = image_get_intermediate_size( $id, $size )

// Or: Use \'thumbnail\' and retrieve the size in a different way:
$thumb_file = wp_get_attachment_thumb_file( $id ) )
getimagesize( $thumb_file )
只要在那里的任何地方,图像URl都可以通过core获得,它就会调用image_constrain_size_for_editor() 这个函数可以做两件不同的事情:

根据用户设置,通过返回宽度get_option( "{$size}_size_w" )

  • 返回自定义大小(将首先进行检查)
    • 在函数返回之前,它会通过过滤器运行所有内容:

      list( $max_width, $max_height ) = apply_filters(
          \'editor_max_image_size\', 
          array( $max_width, $max_height ),
          $size,
          $context
      );
      
      这是下一次拦截呼叫的机会。$context 将是display (主题)或edit 用于管理UI中的调用。

      5) 然后将运行返回值wp_constrain_dimensions() 计算最终尺寸。

      如果所有这些都奏效了,你就会回到wp_get_attachment_image_src() 并立即从image_downsize() 那里

      6) 最后

      。。。您可以使用wp_get_attachment_image() (正确的方式)并拦截width/height 在许多阶段中,调用底层函数。

      救援插件

      由于一次又一次地经历这一切是一件痛苦的事,我写了

      Dynamic Image Resize Plugin

      它在GitHub上免费提供,可以与主题或插件捆绑在一起。它可以通过模板中的过滤器直接调用,也可以与短代码一起使用。

    结束

    相关推荐

    如何使用图片上传的getimageSize()?

    我需要通过media box检查要上载的图像的分辨率,然后将其上载到自定义目录。作为起点,我使用了How Can I Organize the Uploads Folder by Slug (or ID, or FileType, or Author)?其中一部分是这样的:function wpse_25894_custom_upload_dir($path) { $use_default_dir = ( isset($_REQUEST[\'post_id\'] )