Cum să obții imaginea reprezentativă ca obiect în WordPress

6 nov. 2014, 09:38:44
Vizualizări: 15.1K
Voturi: 5

Vreau să obțin imaginea reprezentativă a unui articol ca obiect (array) pentru a avea acces la toate dimensiunile imaginii disponibile.

Funcția get_the_post_thumbnail() nu face acest lucru, aveți idei?

0
Toate răspunsurile la întrebare 3
3

Mai întâi obține dimensiunile de imagine înregistrate și ID-ul atașamentului pentru imaginea reprezentativă:

$sizes = get_intermediate_image_sizes();
$post_thumbnail_id = get_post_thumbnail_id();

Parcurge dimensiunile înregistrate și creează un array:

$images = array();
foreach ( $sizes as $size ) {
    $images[] = wp_get_attachment_image_src( $post_thumbnail_id, $size );
}

Combinat ca o funcție de plasat în functions.php:

function get_all_image_sizes($attachment_id = 0) {
    $sizes = get_intermediate_image_sizes();
    if(!$attachment_id) $attachment_id = get_post_thumbnail_id();

    $images = array();
    foreach ( $sizes as $size ) {
        $images[] = wp_get_attachment_image_src( $attachment_id, $size );
    }

    return $images;
}

Utilizare:

$featured_image_sizes = get_all_image_sizes();
6 nov. 2014 09:59:26
Comentarii

Mulțumesc passatgt. Deci nu există o cale mai ușoară de a prelua un obiect din imaginea reprezentativă? Chiar ar trebui să implementeze asta ca funcție de bază.

Staffan Estberg Staffan Estberg
6 nov. 2014 10:06:16

Păi, de obicei ai nevoie doar de o singură dimensiune. Poți folosi Advanced Custom Fields cu câmpul de imagine care va prelua un array complet cu toate dimensiunile, dar dacă plasezi funcția pe care am scris-o în fișierul functions.php, nu e atât de complicat.

passatgt passatgt
6 nov. 2014 10:11:02

Motivul pentru care vreau toate dimensiunile este pentru că folosesc Picturefill pentru a respecta imaginile responsive. WP chiar trebuie să abordeze asta în sistem. Mulțumesc pentru sugestii.

Staffan Estberg Staffan Estberg
6 nov. 2014 10:12:58
0

Aceasta este o soluție mai veche, dar răspunsul de mai sus nu este complet. Pentru a obține corect toate dimensiunile imaginilor cu toate atributele acestora, ar fi necesar să obținem și obiectul de atașament.

Ceva de genul:

if ( has_post_thumbnail() ) {
    $thumb = array();
    $thumb_id = get_post_thumbnail_id();

    // mai întâi obținem toate informațiile despre imagine... titlu/descriere/alt/etc.
    $args = array(
        'post_type' => 'attachment',
        'include' => $thumb_id
    );
    $thumbs = get_posts( $args );
    if ( $thumbs ) {
        // acum creăm noul array
        $thumb['title'] = $thumbs[0]->post_title;
        $thumb['description'] = $thumbs[0]->post_content;
        $thumb['caption'] = $thumbs[0]->post_excerpt;
        $thumb['alt'] = get_post_meta( $thumb_id, '_wp_attachment_image_alt', true );
        $thumb['sizes'] = array(
            'full' => wp_get_attachment_image_src( $thumb_id, 'full', false )
        );
        // adăugăm dimensiunile suplimentare ale imaginii
        foreach ( get_intermediate_image_sizes() as $size ) {
            $thumb['sizes'][$size] = wp_get_attachment_image_src( $thumb_id, $size, false );
        }
    } // end if

    // afișăm imaginea cu dimensiunea personalizată
    echo '<img src="' . $thumb['sizes']['custom-size'][0] . '" alt="' . $thumb['alt'] . '" title="' . $thumb['title'] . '" width="' . $thumb['sizes']['custom-size'][1] . '" height="' . $thumb['sizes']['custom-size'][2] . '" />';
} // end if
30 sept. 2016 21:05:37
0

Ok, o altă actualizare la asta după câțiva ani. Presupun că până acum te-ai descurcat ;). Dar pentru cei care ar dori să facă acest lucru și să returneze ceva consistent cu - să zicem - obiectele ACF image și care vă permite să populați cu ușurință sursele (sourcesets). Puteți face ceva de genul acesta în functions.php:

function get_all_image_sizes($attachment_id = 0) {
  $sizes = get_intermediate_image_sizes(); // Obține toate dimensiunile intermediare de imagine
  if(!$attachment_id) $attachment_id = get_post_thumbnail_id(); // Dacă nu este furnizat un ID, obține imaginea caracteristică a postului

  $images = array();
  foreach ( $sizes as $size ) {
    $images[$size] = wp_get_attachment_image_src( $attachment_id, $size )[0]; // Obține URL-ul pentru fiecare dimensiune
  }
  $imageObject = array(
    'sizes' => $images // Construiește obiectul cu toate dimensiunile imaginii
  );

  return $imageObject; // Returnează obiectul
} 

Și apoi îl puteți folosi astfel:

   $thumbID = get_post_thumbnail_id(); // Obține ID-ul imaginii caracteristice
   $image = get_all_image_sizes($thumbID); // Obține toate dimensiunile imaginii
   $html = '<img src="'. $image['sizes']['large'] .'" alt="">'; // Construiește tag-ul img cu dimensiunea 'large'
13 iul. 2020 09:41:17