Aggiungere un nome di classe alla miniatura dell'articolo

6 giu 2013, 23:16:31
Visualizzazioni: 110K
Voti: 27

Sto usando le miniature degli articoli per collegarle a una pagina.

È possibile aggiungere un nome di classe all'immagine della miniatura dell'articolo.

<li><a href="<?php the_permalink(); ?>" ><?php the_post_thumbnail(); ?></a></li>
0
Tutte le risposte alla domanda 4
4
67

Sì - puoi passare la classe che vuoi utilizzare a the_post_thumbnail() come parte dell'argomento degli attributi, ad esempio <?php the_post_thumbnail('thumbnail', array('class' => 'il-tuo-nome-classe')); ?>

Rif: http://codex.wordpress.org/Function_Reference/the_post_thumbnail#Styling_Post_Thumbnails

6 giu 2013 23:20:34
Commenti

Ma questo rimuoverà la classe attachment-$size.

fuxia fuxia
6 giu 2013 23:21:35

Ma puoi aggiungere la classe "attachment-$size my-class-name"

Simon Cooper Simon Cooper
7 giu 2013 08:45:59

@SimonCooper L'ho fatto e ora la classe ha attachment- senza la dimensione.

Zhianc Zhianc
27 apr 2015 13:33:12

Questa è generalmente una soluzione pessima e non generica. Anche hardcodare attachment-$size, cancella tutte le possibili iniezioni di classi future.

Fusion Fusion
18 feb 2019 13:18:11
5
15

Puoi filtrare quelle classi.

function alter_attr_wpse_102158($attr) {
  remove_filter('wp_get_attachment_image_attributes','alter_attr_wpse_102158');
  $attr['class'] .= ' new-class';
  return $attr;
}
add_filter('wp_get_attachment_image_attributes','alter_attr_wpse_102158'); 

Aggiungi il filtro appena prima di chiamare the_post_thumbnail. Il filtro si rimuoverà automaticamente.

È un po' complesso arrivarci ma the_post_thumbnail utilizza get_the_post_thumbnail che a sua volta usa wp_get_attachment_image il quale applica quel filtro.

7 giu 2013 17:59:59
Commenti

Il nome della funzione 'alter_attr_wpse_102158' ha un significato particolare o potrebbe essere chiamata myClass - function myClass($attr) {

Simon Cooper Simon Cooper
7 giu 2013 18:17:07

Il nome è abbastanza descrittivo e il suffisso fa riferimento a questa domanda. Altrimenti, non ha un significato particolare. Dall'interno di un'istanza di classe - ad esempio una classe di plugin - puoi usare array($this,'nomeMetodo') e puoi usare classi statiche con i filtri utilizzando array('NomeClasse','nomeMetodo')

s_ha_dum s_ha_dum
7 giu 2013 18:23:20

Perché stai aggiungendo un filtro che si rimuove da solo?

AlxVallejo AlxVallejo
29 set 2013 15:36:52

@AlxVallejo : In modo che venga eseguito solo una volta nella particolare circostanza in cui vuoi che venga eseguito.

s_ha_dum s_ha_dum
29 set 2013 17:11:02
0

Per la maggior parte delle immagini nei miei siti web aggiungo un elemento figure attorno alle immagini come mostrato sotto. In questo modo mantengo tutto intatto e posso comunque richiamare l'elemento con una classe nel CSS.

<?php if ( has_post_thumbnail() ) { ?>
    <figure class="your-class">
        <?php echo get_the_post_thumbnail(); ?>
    </figure>
<?php } ?>
6 lug 2021 15:44:49
3

Maggio 2021

Testato e funzionante su WordPress 5.7

Predefinito

Il codice predefinito the_post_thumbnail() restituirà tutti gli attributi richiesti da WordPress.

<?php the_post_thumbnail(); ?>

<!-- DOM -->
<img 
    src="http://example.com/wp-content/uploads/2021/04/your-image-1500x800-1.jpg" 
    class="attachment-post-thumbnail size-post-thumbnail wp-post-image" 
    alt=""
    loading="lazy" 
    srcset="http://example.com/wp-content/uploads/2021/04/your-image-1500x800-1.jpg 1500w, 
    http://example.com/wp-content/uploads/2021/04/your-image-1500x800-1-300x160.jpg 300w, 
    http://example.com/wp-content/uploads/2021/04/your-image-1500x800-1-1024x546.jpg 1024w, 
    http://example.com/wp-content/uploads/2021/04/your-image-1500x800-1-768x410.jpg 768w" 
    sizes="(max-width: 1500px) 100vw, 1500px" 
    width="1500" 
    height="800"
    >

Utilizzo dell'attributo class come array

Utilizzando l'attributo class senza il parametro $size o con $size impostato su thumbnail, l'attributo srcset verrà completamente rimosso. Perché avresti bisogno di immagini responsive quando la dimensione è solo 150 x 150?

<?php the_post_thumbnail(array('class' => 'classname')); ?>
<?php the_post_thumbnail('thumbnail' array('class' => 'classname')); ?>

<!-- DOM -->
<img 
    src="http://example.com/wp-content/uploads/2021/04/your-image-1500x800-1-150x150.jpg"
    class="classname wp-post-image"
    alt="" 
    loading="lazy"
    width="150"
    height="150"
    >

L'attributo srcset sarà disponibile per dimensioni diverse da thumbnail. Le dimensioni disponibili sono thumbnail, medium, large, full. Le dimensioni possono essere regolate in 'Dashboard > Impostazioni > Media' di WordPress.

thumbnail:  150px
medium:     300px
large:      1024px
full:       Dimensioni originali del file caricato

Utilizzando la dimensione medium.

<?php the_post_thumbnail('medium' array('class' => 'classname')); ?>

<!-- DOM -->
<img 
    src="http://example.com/wp-content/uploads/2021/04/your-image-1500x800-1-300x160.jpg" 
    class="classname img-fluid wp-post-image" 
    alt=""
    loading="lazy" 
    srcset="http://example.com/wp-content/uploads/2021/04/your-image-1500x800-1-300x160.jpg 300w, 
    http://example.com/wp-content/uploads/2021/04/your-image-1500x800-1-1024x546.jpg 1024w, 
    http://example.com/wp-content/uploads/2021/04/your-image-1500x800-1-768x410.jpg 768w, 
    http://example.com/wp-content/uploads/2021/04/your-image-1500x800-1.jpg 1500w" 
    sizes="(max-width: 300px) 100vw, 300px"
    width="300"
    height="160"
    >

Utilizzo della funzione

Puoi utilizzare una funzione per includere la classe ai post (funzione fornita da @s_ha_dum). Aggiungo qui la classe Bootstrap img-fluid. Attenzione! Leggi tutto.

// utilizzo di una funzione per aggiungere una classe a `the_post_thumbnail()`
function alter_attr_wpse_102158($attr) {
    remove_filter('wp_get_attachment_image_attributes','alter_attr_wpse_102158');
    $attr['class'] .= ' img-fluid';
    return $attr;
}
add_filter('wp_get_attachment_image_attributes','alter_attr_wpse_102158'); 

Nota come la classe Bootstrap img-fluid viene aggiunta all'attributo class.

<?php the_post_thumbnail(); ?>

<!-- DOM -->
<img 
    src="http://example.com/wp-content/uploads/2021/04/your-image-1500x800-1.jpg" 
    class="attachment-post-thumbnail size-post-thumbnail img-fluid wp-post-image" 
    alt="" 
    loading="lazy" 
    srcset="http://example.com/wp-content/uploads/2021/04/your-image-1500x800-1.jpg 1500w,
    http://example.com/wp-content/uploads/2021/04/your-image-1500x800-1-300x160.jpg 300w, 
    http://example.com/wp-content/uploads/2021/04/your-image-1500x800-1-1024x546.jpg 1024w, 
    http://example.com/wp-content/uploads/2021/04/your-image-1500x800-1-768x410.jpg 768w" 
    sizes="(max-width: 1500px) 100vw, 1500px" 
    width="1500" 
    height="800"
    >

La class della funzione scompare nel secondo post

Quando si utilizza una funzione, l'attributo class funziona solo sul primo post e scompare nel secondo. Utilizza la classe direttamente in the_post_thumbnail().

<?php the_post_thumbnail('full' array('class' => 'img-fluid')); ?>

Ricorda che l'attributo srcset è inutile per la dimensione thumbnail.

4 mag 2021 07:40:33
Commenti

Chiamare qualcosa come the_post_thumbnail(array('class' => 'classname')); in realtà produrrà una serie di PHP Warnings. Se il primo parametro è un array ci si aspetta i parametri larghezza e altezza. Inoltre, verranno comunque emessi i valori srcset se l'immagine ha altre dimensioni.

Howdy_McGee Howdy_McGee
4 mag 2021 08:24:37

Su wp 5.7.1 non lo farà. Inoltre, il parametro $size è opzionale - (https://developer.wordpress.org/reference/functions/the_post_thumbnail/#parameters)

Dexter Dexter
4 mag 2021 08:50:24

Ho provato questo su 5.7.1 e ho ottenuto srcsets come previsto. Il parametro $size può essere opzionale, ma ciò non significa che puoi semplicemente saltarlo e passare al parametro successivo. Se segui la documentazione attraverso the_post_thumbnail() -> get_the_post_thumbnail() -> wp_get_attachment_image() passerà quell'array come $size fino in fondo poiché è il primo parametro fornito. Sentiti libero di unirti a The Loop Chat per una discussione più ampia rispetto a quanto può accadere nei commenti qui.

Howdy_McGee Howdy_McGee
4 mag 2021 17:14:52