The_post_thumbnail senza srcset?


12

WordPress 4.4 aggiunge più dimensioni di immagine con srcsetquando si utilizza la the_post_thumbnailfunzione. È possibile ottenere solo una dimensione dell'immagine senza srcset?

Comprendo che è possibile aggiungere un filtro da disabilitare srcsetda tutte le immagini, ma desidero disattivarlo srcsetsolo quando si chiama una dimensione di anteprima specifica (ad esempio solo quando si chiama la dimensione di immagine intera).

Risposte:


13

Voglio disabilitare lo srcset solo quando si chiama una dimensione specifica dell'anteprima (ad esempio solo quando si chiama la dimensione dell'immagine intera).

Ecco due idee (se ti capisco correttamente):

Approccio n. 1

Controlliamo le dimensioni dal post_thumbnail_sizefiltro. Se corrisponde a una dimensione corrispondente (ad es. full), Ci assicuriamo che $image_metasia vuoto, con il wp_calculate_image_srcset_metafiltro. In questo modo possiamo uscire presto dalla wp_calculate_image_srcset()funzione (prima di usare i filtri max_srcset_image_widtho wp_calculate_image_srcsetper disabilitarla):

/**
 * 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 abbiamo:

the_post_thumbnail( 'full' );

quindi il <img>tag generato non conterrà l' srcsetattributo.

Per il caso:

the_post_thumbnail();

potremmo abbinare la 'post-thumbnail'stringa di dimensioni.

Approccio n. 2

Potremmo anche aggiungere / rimuovere il 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' );

probabilmente dovrai anche rimuovere il wp_calculate_image_srcset_metafiltro quando termina la funzione
Mark Kaplun

Ho aggiunto l'approccio in cui aggiungiamo / rimuoviamo il callback del filtro manualmente. Uso il conteggio delle istanze nell'altro approccio per eseguirlo solo una volta per ogni chiamata the_post_thumbnail () @MarkKaplun
birgire

Ho semplificato lo snippet di codice, grazie per avermi permesso di pensarci di nuovo ;-) @MarkKaplun
birgire

1
:) Ho appena trovato un modo produttivo per mostrare la mia antipatia per le funzioni anonime nei filtri :)
Mark Kaplun

1
o dovrebbe esserci un parametro "run one time" su add_filter. Questo modello è davvero comune.
Mark Kaplun,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.