El the_post_thumbnail sin srcset?

12

WordPress 4.4 agrega múltiples tamaños de imagen srcsetcuando se usa la the_post_thumbnailfunción. ¿Es posible obtener solo un tamaño de imagen sin srcset?

Entiendo que es posible agregar un filtro para deshabilitar srcsetde todas las imágenes, pero quiero deshabilitar srcsetsolo cuando se llama a un tamaño de miniatura específico (por ejemplo, solo cuando se llama a tamaño de imagen completo).

arrendajo
fuente

Respuestas:

13

Quiero deshabilitar el srcset solo cuando llame a un tamaño de miniatura específico (por ejemplo, solo cuando llame a un tamaño de imagen completo).

Aquí hay dos ideas (si te entiendo correctamente):

Enfoque n. ° 1

Verifiquemos el tamaño del post_thumbnail_sizefiltro. Si coincide con un tamaño correspondiente (por ejemplo full), nos aseguramos de que $image_metaesté vacío, con el wp_calculate_image_srcset_metafiltro. De esa manera podemos rescatarnos de la wp_calculate_image_srcset()función antes (antes de usar los filtros max_srcset_image_widtho wp_calculate_image_srcsetpara deshabilitarla):

/**
 * 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;
}

Si tenemos:

the_post_thumbnail( 'full' );

entonces la <img>etiqueta generada no contendrá el srcsetatributo.

Para el caso:

the_post_thumbnail();

Podríamos hacer coincidir la 'post-thumbnail'cadena de tamaño.

Enfoque n. ° 2

También podríamos agregar / eliminar el filtro manualmente con:

// 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
fuente
probablemente también necesite eliminar el wp_calculate_image_srcset_metafiltro cuando finalice la función
Mark Kaplun
Agregué el enfoque donde agregamos / eliminamos la devolución de llamada del filtro manualmente. Utilizo el conteo de instancias en el otro enfoque para ejecutarlo solo una vez para cada llamada the_post_thumbnail () @MarkKaplun
birgire
Simplifiqué el fragmento de código, gracias por dejarme pensar en esto nuevamente ;-) @MarkKaplun
birgire
1
:) Acabo de encontrar una manera productiva de mostrar mi aversión a las funciones anónimas en los filtros :)
Mark Kaplun
1
o debería haber un parámetro "ejecutar una vez" para add_filter. Este patrón es realmente común.
Mark Kaplun