Setează imagine reprezentativă pentru șabloanele de arhivă
Doresc să setez o imagine reprezentativă pentru șabloanele de arhivă ale temei mele. Din câte știu, nu există o modalitate de a face acest lucru în Adminul WordPress (ca în cazul Paginilor sau Articolelor).
Mă gândeam să scriu o funcție care să filtreze prin imaginile reprezentative încărcate și să potrivească șablonul cu numele fișierului. S-ar putea să fie puțin complex.
Știu de asemenea că există opțiuni pentru temă. Dar acest lucru pare a fi prea mult de gestionat.
Cum ați recomanda să faceți acest lucru pentru a facilita administrarea Imaginilor Reprezentative (Temă -> Antet) și ușurința în întreținere...

Există multe tipuri de arhive în WordPress. Arhive de etichete, arhive după dată, arhive de categorii, arhive de termeni, arhive de autori. La ce tip de arhivă te referi?
Poți începe prin a încerca pluginul Taxonomy Images http://wordpress.org/extend/plugins/taxonomy-images/

Acest lucru este vechi, dar este primul rezultat care apare în Google pe această temă.
Modul în care am rezolvat această problemă a fost să creez o pagină nouă. Nu îi dați același nume ca paginii de arhivă (WordPress nu apreciază paginile cu același nume ca pagina de arhivă, acest lucru cauzează probleme), o puteți numi oricum altfel. Setați imaginea reprezentativă și apoi apelați-o în șablonul de arhivă folosind acest cod:
$post_id = 8;
$queried_post = get_post($post_id);
$src = wp_get_attachment_image_src(get_post_thumbnail_id($queried_post->ID), '') ;
$thumb_id = get_post_thumbnail_id($post_id);
?>
<img src="<?php echo $src[0]; ?>" class="img-responsive" />
Pentru a explica:
$post_id = 8;
este numărul ID al paginii tale noi.
$src = wp_get_attachment_image_src(get_post_thumbnail_id($queried_post->ID), '') ;
găsește imaginea reprezentativă atașată acestei pagini
<img src="<?php echo $src[0]; ?>" class="img-responsive" />
afișează imaginea reprezentativă din pagina ta nouă.

poți face asta prin CSS definind o regiune pentru imaginea de antet în archive.php și setând o imagine de fundal în style.css
sau poți folosi plugin-ul Dynamic Headers http://wordpress.org/extend/plugins/dynamic-headers/ (funcționează excelent chiar dacă nu a fost actualizat din 2010)

Vin destul de târziu la această discuție, dar cred că acest plugin răspunde la întrebarea inițială: http://wordpress.org/plugins/categories-images/
Permite unui administrator să selecteze o 'imagine reprezentativă' pentru o anumită categorie / etichetă / taxonomie în panoul de editare al taxonomiei. Apoi, poate fi utilizată în archive.php al unui temă (de exemplu) prin afișarea z_taxonomy_image_url();
.
Dacă preferi să creezi propria soluție, poți verifica codul din acel plugin ca punct de plecare.

Cred că ar trebui să alegi metoda manuală, cam așa:
- intră pe pagina de "EDITARE" a fiecărei categorii, iar în descriere, pune astfel:
[image url="https://upload.wikimedia.org/wikipedia/commons/0/0c/Bunker_in_Albanian_Alps.jpg"]
- obține imaginea pentru categorie:
if (is_archive()) {
if (!empty($GLOBALS['wp_query']->queried_object->description) ) {
$cat_description =$GLOBALS['wp_query']->queried_object->description);
//notă: din alte pagini, poți obține descrierea categoriei cu: get_term('1533' , 'category')->description;
preg_match('/url\=\"(.*?)\"/si', $cat_description, $new);
if(!empty($new[1])) {
$found_image= $new[1];
}
}
}
acum, poți folosi acea imagine oriunde, în head
sau în pagină...

YOAST! Premium face asta din cutie.
Totuși, eu folosesc ACF, unde pot crea o pagină de opțiuni, unde am adăugat un câmp repeater unde pot seta o imagine reprezentativă pentru fiecare tip de postare.
Apoi, cu funcția de mai jos adăugată în functions.php, apelez meta tag-urile necesare pe arhivele tipurilor de postări pentru care am definit o imagine reprezentativă.
function custom_featured_archive_image() {
$o = get_field("featured_images", "option");
if (is_array($o)) {
foreach($o as $option) {
if (is_post_type_archive($option["post_type"])) {
$image_id = $option["image"];
$image_url = wp_get_attachment_image_src($image_id, "original");
$mime_type = get_post_mime_type($image_id);
echo '
<meta property="og:image" content="'.$image_url[0].'">
<meta property="og:image:width" content="'.$image_url[1].'">
<meta property="og:image:height" content="'.$image_url[2].'">
<meta property="og:image:type" content="'.$mime_type.'">
<meta name="twitter:image" content="'.$image_url[0].'">
';
}
}
}
}
add_action('wp_head', 'custom_featured_archive_image', 0);
