Cum să obții imaginea reprezentativă ca obiect în WordPress
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?

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

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ă.

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.

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

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'
