自定义响应式“特色图像”大小

时间:2017-03-19 作者:Simon H

我的主页上有一个由帖子中的“特色(缩略图)图像”组成的旋转木马。旋转木马使用了大约三分之二的屏幕宽度,谷歌页面速度分析器抱怨我的图像太大。

我想在引导传送带转盘代码中插入的内容如下:

<img src="//localhost:3000/wp-content/uploads/2008/03/Oysters-at-A-fusion.jpg" 
class="attachment-front_page_lg size-front_page_lg wp-post-image" alt="Oysters at A-fusion" 
srcset="//localhost:3000/wp-content/uploads/2008/03/Oysters-at-A-fusion-525x270.jpg 525w, //localhost:3000/wp-content/uploads/2008/03/Oysters-at-A-fusion-420x320.jpg 420w" 
sizes="66vw" />
我不能完全确定尺寸元素。

我试图通过声明自定义图像大小来解决这个问题

/* Image Sizes  
    Large : 525 x 270
    iPhone6 210 * 180   and then 2x that?
*/
add_image_size( "card", 400, 400, false );
add_image_size( "front_page_sm", 420, 360, true );
add_image_size( "front_page_lg", 520, 270, true );
我的第一个问题是,无论我多么频繁地运行“重新生成缩略图”,我都无法获得这些大小的图像(尽管我确实看到了大小为400的图像,我在其他地方使用了这些图像)

图像再生突然开始工作!以下代码创建img标记

function getFeaturedImage($resto) {
    global $table_prefix;
    global $wpdb;
    $query = "...";
    $queryResult = $wpdb->get_results($query);
    $post_id = $queryResult[0]->post_id;
    return get_the_post_thumbnail($post_id, \'front_page_lg\');
}
这确实正确获取了$post\\u id,但会导致

<img width="405" height="270" 
src="//localhost:3000/wp-content/uploads/2016/10/Restaurant-Breda-Amsterdam-1.jpg" 
class="attachment-front_page_lg size-front_page_lg wp-post-image"
alt="restaurant-breda-amsterdam-1" />
这是一个真正的问题,因为它使用的是图像的原始(大)版本。

然而,在某些情况下

<img width="270" height="270" 
src="//localhost:3000/wp-content/uploads/2008/03/Oysters-at-A-fusion.jpg" 
class="attachment-front_page_lg size-front_page_lg wp-post-image" alt="Oysters at A-fusion" 
srcset="//localhost:3000/wp-content/uploads/2008/03/Oysters-at-A-fusion.jpg 768w, //localhost:3000/wp-content/uploads/2008/03/Oysters-at-A-fusion-150x150.jpg 150w, //localhost:3000/wp-content/uploads/2008/03/Oysters-at-A-fusion-500x500.jpg 500w, //localhost:3000/wp-content/uploads/2008/03/Oysters-at-A-fusion-400x400.jpg 400w" 
sizes="(max-width: 270px) 100vw, 270px" />
很明显,这个srcset对我来说很有价值,据我所知,它是由wordpress而不是插件生成的。但这种情况只发生在少数帖子和大小不合适的帖子上。

How can I get a src set with my two custom sizes?

1 个回复
SO网友:brianjohnhanna

首先,我不太清楚你为什么需要wpdb 类来创建img标记。如果您想获得特色图片,可以使用Wordpress功能get_the_post_thumbnail()the_post_thumbnail()这两种方法都允许您指定所需的注册大小,并按如下方式返回标记:

// In the loop:
the_post_thumbnail( \'front_page_lg\' ); // echos the markup

// Outside the loop:
$img_markup = get_the_post_thumbnail( $post->ID, \'front_page_lg\' );
从这里开始,您有两个不同的钩子来定制该标记:

  • wp_calculate_image_srcset 过滤器wp_calculate_image_sizes 过滤器wp_calculate_image_srcset:

    function wpse_custom_image_srcset( $sources, $size_array, $image_src, $image_meta, $attachment_id ){
        $w = 768; // setup a custom width here, repeat below for as many custom widths as you want, linking to your URL
        $sources[$w] = array(
            \'url\'  => \'myfolder/myimage.jpg\',
            \'descriptor\' => \'w\',
            \'value\'      => $w,
        );
        return $sources;
    }
    add_filter( \'wp_calculate_image_srcset\', \'wpse_custom_image_srcset\', 10, 5 );
    
    下面是一个使用wp_calculate_image_sizes:

    function wpse_post_thumbnail_sizes_attr( $attr, $attachment, $size ) {
        //Calculate Image Sizes by type and breakpoint
        if ($size === \'front_page_lg\') {
            $attr[\'sizes\'] = \'(max-width: 768px) 92vw, (max-width: 992px) 450px, (max-width: 1200px) 597px, 730px\';
        }  
        return $attr;
    }
    add_filter( \'wp_get_attachment_image_attributes\', \'wpse_post_thumbnail_sizes_attr\', 10 , 3 );
    
    这应该给你一个开始,但显然你必须调整这些,直到你用你的自定义图像大小和断点得到你想要的标记。以下是一些有帮助的更多资源:

相关推荐

WordPress中的Responsive.css应该优先

wp_enqueue_style( \'style\', THEMEROOT . \'/css/style.css\' ); wp_enqueue_style( \'responsive\', THEMEROOT . \'/css/responsive.css\' ); 我正在使用上述方法将样式表排队,但我想要的并没有实现。不管我写什么responsive.css 应该优先考虑(这意味着此处编写的CSS应该覆盖以style.CSS编写的所有其他内容),但这并没有发生。有没有办法通过Wor