WP_GET_ATTACH_IMAGE_src()每次重新生成自定义大小的图像

时间:2015-04-20 作者:saxap

我试着从贴子的附件图片中定制尺寸,制作简单的图库。

我写了一个简单的循环:

$original = array();
$gallery = array();
$gallery_min = array();

$imgs_args = array(
    \'post_status\'    => null,
    \'post_type\'      => \'attachment\',
    \'post_parent\'    => get_the_ID(),
    \'post_mime_type\' => \'image\',
    \'order\'          => \'ASC\',
    \'numberposts\'  => 99999
);
$post_images = get_posts($imgs_args);
if ($post_images) :
    foreach ($post_images as $a) :
        $original[] = wp_get_attachment_image_src($a->ID, \'gallery_origin\');
        $gallery[] = wp_get_attachment_image_src($a->ID, \'gallery\');
        $gallery_min[] = wp_get_attachment_image_src($a->ID, \'gallery_min\');
    endforeach;
endif;
但性能页面变得很差。我检查了自定义大小图像的创建时间,发现它等于页面加载时间。这意味着wp_get_attachment_image_src() 每次加载页面时重新生成图像。

我尝试使用image_get_intermediate_size() 用于检查自定义大小图像是否存在的函数:

foreach ($post_images as $a) :
    $img = image_get_intermediate_size( $a->ID, \'gallery_origin\' );
    if ($img) {
        $original[] = $img[\'url\'];
    } else {
        $img = wp_get_attachment_image_src($a->ID, \'gallery_origin\');
        $original[] = $img[0];
    }
    $img = image_get_intermediate_size( $a->ID, \'gallery2\' );
    if ($img) {
        $gallery[] = $img[\'url\'];
    } else {
        $img = wp_get_attachment_image_src($a->ID, \'gallery2\');
        $gallery[] = $img[0];
    }
    $img = image_get_intermediate_size( $a->ID, \'gallery_min\' );
        if ($img) {
            $gallery_min[] = $img[\'url\'];
        } else {
            $img = wp_get_attachment_image_src($a->ID, \'gallery_min\');
            $gallery_min[] = $img[0];
        }
endforeach;
性能也变得很好。

wp_get_attachment_image_src() 函数是否不应在返回数组之前检查已生成的图像?

1 个回复
SO网友:Otto

不,是wp_get_attachment_image_src 函数调用image_downsize, 依次调用image_get_intermediate_size 它本身它不会导致图像的生成,它只是从元中获取相关图像并选择正确的图像来使用。

结束

相关推荐

定义`GET_POST_QUALUALY_Images`的大小,它们似乎已调整为150x150

我正在使用get_post_gallery_images 它可以输出150x150的图像。它看起来不需要大小参数,所以我假设它只会显示最大的图像,或者最好是我定义的一个大小。150x150太小了,有没有地方可以声明我想要多大尺寸的画廊图片?例如,我正在做:<?php $gallery = get_post_gallery_images( $post ); foreach ($gallery as $img) { ?> <li><img src