Obține imaginea reprezentativă pe pagina principală a blogului
Am încercat să utilizez "imaginea reprezentativă" de pe pagina principală (indexul blogului) fără succes. Funcționează pentru fiecare pagină individuală, dar nu și pentru pagina principală.
Codul arată cam așa:
// Nu utiliza pe postări individuale
if (!is_single()) {
if (is_home()) {
if (function_exists('wp_get_attachment_thumb_url')) {
$img = wp_get_attachment_image_src(get_post_thumbnail_id(),'full');
$featured_image = $img[0];
}
} else {
if (function_exists('wp_get_attachment_thumb_url') && has_post_thumbnail()) {
$img = wp_get_attachment_image_src(get_post_thumbnail_id($post->ID),'full');
$featured_image = $img[0];
}
}
if ($featured_image) { ?>
// Mult cod...
<?php }
}
Am încercat deja să obțin miniatura folosind metadatele _thumbnail_id. Același rezultat.
Acest cod este plasat în fișierul functions.php, cred că problema este că încearcă să obțină imaginea reprezentativă din bucla/postările.
Mulțumesc mult anticipat.

dacă te referi la „pagina pentru articole”, atunci încearcă (doar secțiunea relevantă din cod este afișată):
if (is_home() && get_option('page_for_posts') ) {
$img = wp_get_attachment_image_src(get_post_thumbnail_id(get_option('page_for_posts')),'full');
$featured_image = $img[0];
} else {

Aș sugera ca oricine face acest lucru să ia în considerare următoarele ajustări:
- Obține ID-ul paginii/postării/indexului curent folosind
get_queried_object()
. Pentru un index de blog setat pe o pagină, aceasta va returna ID-ul corect al paginii. - Dacă tot ce vrei este imaginea la dimensiunea maximă, folosește
wp_get_attachment_url()
în loc dewp_get_attachment_image_src()
Iată o funcție rapidă pe care aș folosi-o pentru a realiza acest lucru într-un mod mai simplu:
/**
* Imagine personalizată pentru articol
*/
function custom_featured_image() {
$queried_obj = get_queried_object();
// Nu folosi pe postări individuale (DOAR PENTRU ACEST DEMO)
if ( is_single() ) return;
// Obține ID-ul imaginii principale
$image_id = get_post_thumbnail_id( $queried_obj->ID );
// Obține URL-ul pentru imaginea la dimensiunea maximă
$image_src = wp_get_attachment_url( $image_id );
return $image_src;
}
Personal, prefer să evit logica condițională excesivă imbricată, iar folosirea unei funcții poate ajuta în acest sens.

Acest cod funcționează...
<section id="banner" style="background-image: <?php if (is_home() && get_option('page_for_posts') ) {
$blog_home_id = get_option( 'page_for_posts' );
echo 'url('.get_the_post_thumbnail_url($blog_home_id, 'full').')';
} else {
echo 'url('.get_the_post_thumbnail_url($post->ID, 'full').')';
}
?>;">
Sper că acest lucru vă ajută!

Aveți 2 opțiuni rapide, prin intermediul fișierului șablon folosind the_post_thumbnail
pentru buclă. Presupun că afișați datele într-un format tipic de blog, astfel încât funcția dumneavoastră de mai sus nu va funcționa sau se va comporta foarte ciudat în interiorul buclei.
În schimb, încercați ceva de genul acesta în fișierul șablon real unde se află bucla principală (poate index.php sau loop.php):
//început buclă
if ( has_post_thumbnail() ) {
the_post_thumbnail();
}
//the_content(); și alte elemente
//sfârșit buclă
Sau dacă doriți să utilizați o acțiune pentru a modifica bucla principală, puteți folosi pre_get_posts
, de exemplu în fișierul functions.php.
Ceva de genul:
add_action( 'pre_get_posts', 'add_featured_image' );
function add_featured_image( $query ) {
if( $query->is_main_query() && $query->is_home() ) {
//codul pentru imagine
}
}
Observați că codul de mai sus verifică 2 parametri: interogarea principală și pagina de start. Este foarte important să verificați dacă este vorba de interogarea principală, altfel va afecta toate interogările.
Referință: http://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts

Nu ai citit corect întrebarea, utilizatorul nu dorește să obțină postările de blog în interiorul loop-ului, ci vrea imaginea reprezentativă a paginii care este atribuită paginii de index a blogului, ceea ce vreau să fac și eu. has_post_thumbnail()
pare să funcționeze corect în page.php, dar returnează false
când este folosit în index.php

Când vă aflați pe "pagina de articole", variabila $post va începe cu primul "articol" din buclă. O metodă ar putea fi utilizarea "obiectului interogat".
Afișați $wp_query și veți vedea: [queried_object] [posts] [post] -- notă: queried_object poate fi gol pe unele pagini
// get_the_post_thumbnail_url( get_queried_object(), 'fullsize' );
// sau
function ABC_get_the_thumbnail_url() {
$queried_object = get_queried_object();
$thumbnail_url = get_the_post_thumbnail_url( $queried_object, 'fullsize' );
if ( ! $thumbnail_url ) {
return get_template_directory_uri() . '/your-path/default-image.jpg';
// sau dintr-o opțiune implicită
}
return $thumbnail_url;
}
