O the_post_thumbnail sem srcset?

12

O WordPress 4.4 adiciona vários tamanhos de imagem srcsetao usar a the_post_thumbnailfunção. É possível obter apenas um tamanho de imagem sem o srcset?

Entendo que é possível adicionar um filtro para desativar srcsettodas as imagens, mas quero desativá-lo srcsetsomente ao chamar um tamanho de miniatura específico (por exemplo, apenas ao chamar o tamanho completo da imagem).

Jay
fonte

Respostas:

13

Desejo desativar o srcset apenas ao chamar um tamanho de miniatura específico (por exemplo, apenas ao chamar o tamanho total da imagem).

Aqui estão duas idéias (se bem entendi):

Abordagem # 1

Vamos verificar o tamanho do post_thumbnail_sizefiltro. Se ele corresponder a um tamanho correspondente (por exemplo full), garantiremos que ele $image_metaesteja vazio, com o wp_calculate_image_srcset_metafiltro. Dessa forma, podemos resgatar antecipadamente a wp_calculate_image_srcset()função (antes de usar os filtros max_srcset_image_widthou wp_calculate_image_srcsetpara desativá-la):

/**
 * Remove the srcset attribute from post thumbnails 
 * that are called with the 'full' size string: the_post_thumbnail( 'full' )
 *
 * @link http://wordpress.stackexchange.com/a/214071/26350
 */
 add_filter( 'post_thumbnail_size', function( $size )
 {
     if( is_string( $size ) && 'full' === $size )
         add_filter( 
             'wp_calculate_image_srcset_meta',  
              '__return_null_and_remove_current_filter' 
         );   
    return $size;
 } );

// Would be handy, in this example, to have this as a core function ;-)
function __return_null_and_remove_current_filter ( $var )
{
    remove_filter( current_filter(), __FUNCTION__ );
    return null;
}

Se tiver-mos:

the_post_thumbnail( 'full' );

a <img>tag gerada não conterá o srcsetatributo

Para o caso:

the_post_thumbnail();

nós poderíamos combinar a 'post-thumbnail'string do tamanho.

Abordagem # 2

Também podemos adicionar / remover o filtro manualmente com:

// Add a filter to remove srcset attribute from generated <img> tag
add_filter( 'wp_calculate_image_srcset_meta', '__return_null' );

// Display post thumbnail
the_post_thumbnail();

// Remove that filter again
remove_filter( 'wp_calculate_image_srcset_meta', '__return_null' );
Birgire
fonte
você provavelmente precisará também remover o wp_calculate_image_srcset_metafiltro quando as extremidades de função
Mark Kaplun
Eu adicionei a abordagem em que adicionamos / removemos o retorno de chamada do filtro manualmente. Eu uso a contagem instância na outra abordagem para executá-lo apenas uma vez para cada the_post_thumbnail () chamada @MarkKaplun
birgire
I simplificou o trecho de código, obrigado por me deixar pensar sobre isso novamente ;-) @MarkKaplun
birgire
11
:) Eu encontrei uma maneira produtiva para mostrar o meu desagrado para funções anônimas em filtros :)
Mark Kaplun
11
ou deve haver um parâmetro "executar uma vez" para add_filter. Esse padrão é realmente comum.
Mark Kaplun