Adaugă numele clasei la imaginea reprezentativă a articolului

6 iun. 2013, 23:16:31
Vizualizări: 110K
Voturi: 27

Folosesc imagini reprezentative pentru a face legături către o pagină.

Este posibil să adaug un nume de clasă la imaginea reprezentativă?

<li><a href="<?php the_permalink(); ?>" ><?php the_post_thumbnail(); ?></a></li>
0
Toate răspunsurile la întrebare 4
4
67

Da - poți pasa clasa pe care vrei să o folosești la the_post_thumbnail() ca parte din argumentul atributelor, de exemplu <?php the_post_thumbnail('thumbnail', array('class' => 'numele-clasei-tale')); ?>

Referință: http://codex.wordpress.org/Function_Reference/the_post_thumbnail#Styling_Post_Thumbnails

6 iun. 2013 23:20:34
Comentarii

Dar asta va elimina clasa attachment-$size.

fuxia fuxia
6 iun. 2013 23:21:35

Dar poți adăuga clasa "attachment-$size my-class-name"

Simon Cooper Simon Cooper
7 iun. 2013 08:45:59

@SimonCooper Am făcut asta și acum clasa are attachment- fără dimensiune.

Zhianc Zhianc
27 apr. 2015 13:33:12

Aceasta este în general o soluție proastă și non-generică. Chiar și hardcodarea attachment-$size, șterge toate posibilele injecții viitoare de clase.

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

Puteți filtra acele clase.

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'); 

Adăugați filtrul chiar înainte să apelați the_post_thumbnail. Filtrul se va elimina automat.

Este un pic mai complicat să ajungeți acolo, dar the_post_thumbnail utilizează get_the_post_thumbnail care folosește wp_get_attachment_image care aplică acel filtru.

7 iun. 2013 17:59:59
Comentarii

Are numele funcției 'alter_attr_wpse_102158' un sens anume sau această funcție ar putea fi numită myClass - function myClass($attr) {

Simon Cooper Simon Cooper
7 iun. 2013 18:17:07

Numele este oarecum descriptiv și sufixul face referire la această întrebare. Altfel, nu are un sens anume. Din interiorul unei instanțe de clasă - de exemplu o clasă de plugin - poți folosi array($this,'nume_metoda') și poți folosi clase statice cu filtre folosind array('NumeClasa','nume_metoda')

s_ha_dum s_ha_dum
7 iun. 2013 18:23:20

De ce adaugi un filtru care se elimină singur?

AlxVallejo AlxVallejo
29 sept. 2013 15:36:52

@AlxVallejo : Pentru ca să ruleze o singură dată în circumstanța specifică în care dorești să se execute.

s_ha_dum s_ha_dum
29 sept. 2013 17:11:02
0

Pentru majoritatea imaginilor de pe site-urile mele, adaug un element figure în jurul imaginilor, ca mai jos. În acest fel, păstrez totul intact și pot să folosesc o clasă în CSS pentru a stiliza elementul.

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

Mai 2021

Testat și funcționează pe WordPress 5.7

Implicit

Funcția implicită the_post_thumbnail() va afișa toate atributele necesare din 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"
    >

Folosind atributul class ca array

Folosind class fără parametrul $size sau cu $size setat ca thumbnail va elimina complet atributul srcset. Pentru că de ce ai nevoie de responsivitate când dimensiunea este doar 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"
    >

srcset va fi disponibil pentru alte dimensiuni în afară de thumbnail. Dimensiunile disponibile sunt thumbnail, medium, large, full. Dimensiunile pot fi ajustate în WordPress 'Panou de control > Setări > Media'

thumbnail:  150px
medium:     300px
large:      1024px
full:       Dimensiunea originală încărcată

Folosind dimensiunea 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"
    >

Folosind o funcție

Poți folosi o funcție pentru a adăuga clasa la postări (funcție furnizată de @s_ha_dum). Adaug clasa Bootstrap img-fluid aici. Atenție! Citește până la capăt

// folosind funcția pentru a adăuga clasă la `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'); 

Observă că clasa Bootstrap img-fluid a fost adăugată la atributul 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"
    >

clasa din funcție dispare la al doilea post

Când folosești funcția, class funcționează doar la primul post și dispare la al doilea. Folosește clasa direct în the_post_thumbnail()

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

Reține că atributul srcset este inutil pentru thumbnail.

4 mai 2021 07:40:33
Comentarii

Apelând ceva de genul the_post_thumbnail(array('class' => 'classname')); va genera de fapt o serie de avertismente PHP. Dacă primul parametru este un array se așteaptă parametri pentru lățime și înălțime. De asemenea, va afișa în continuare valorile srcset dacă imaginea are alte dimensiuni.

Howdy_McGee Howdy_McGee
4 mai 2021 08:24:37

În WordPress 5.7.1 nu se va întâmpla acest lucru. De asemenea, parametrul $size este opțional - (https://developer.wordpress.org/reference/functions/the_post_thumbnail/#parameters)

Dexter Dexter
4 mai 2021 08:50:24

Am testat acest lucru pe versiunea 5.7.1 și am obținut srcset-uri cum era de așteptat. Parametrul $size poate fi opțional, dar asta nu înseamnă că îl poți sări și să treci direct la următorul parametru. Dacă urmărești documentația prin the_post_thumbnail() -> get_the_post_thumbnail() -> wp_get_attachment_image(), acel array este transmis ca $size până la capăt, deoarece este primul parametru furnizat. Dacă dorești, poți să te alături The Loop Chat pentru o discuție mai amplă decât ce poate avea loc în comentariile de aici.

Howdy_McGee Howdy_McGee
4 mai 2021 17:14:52