Ottenere l'immagine in evidenza nella pagina Blog Index
Sto cercando di utilizzare l'"immagine in evidenza" dalla home page (l'indice del blog) senza successo. Funziona per tutte le singole pagine, ma non per la home.
Il codice è simile a questo:
// Non usare nei singoli post
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) { ?>
// Molto codice...
<?php }
}
Ho già provato a ottenere l'anteprima usando il meta _thumbnail_id. Stesso risultato.
Questo codice si trova nel file functions.php, credo che il problema sia che sta cercando di ottenere l'immagine in evidenza del loop/dei post.
Grazie mille in anticipo.

se ti riferisci alla 'pagina per gli articoli', allora prova (mostrata solo la sezione rilevante del tuo codice):
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 {

Suggerirei a chiunque stia implementando questa soluzione di considerare i seguenti aggiustamenti:
- Ottenere l'ID della pagina/post/indice corrente utilizzando
get_queried_object()
. Per un indice del blog impostato su una pagina, questo restituirà l'ID corretto della pagina. - Se tutto ciò che ti serve è l'immagine a dimensione intera, usa
wp_get_attachment_url()
invece diwp_get_attachment_image_src()
Ecco una rapida funzione che utilizzerei per ottenere questo risultato in modo più semplice:
/**
* Immagine in evidenza personalizzata
*/
function custom_featured_image() {
$queried_obj = get_queried_object();
// Non utilizzare per i singoli post (SOLO PER QUESTO ESEMPIO)
if ( is_single() ) return;
// Ottieni l'ID dell'immagine in evidenza
$image_id = get_post_thumbnail_id( $queried_obj->ID );
// Ottieni l'URL per l'immagine a dimensione intera
$image_src = wp_get_attachment_url( $image_id );
return $image_src;
}
Personalmente preferisco evitare una logica condizionale eccessivamente annidata, l'uso di una funzione può aiutare in questo.

Questo funziona...
<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').')';
}
?>;">
Spero che questo ti sia utile!

Hai 2 opzioni rapide, tramite il file template usando the_post_thumbnail
per il loop. Presumo che tu stia visualizzando i dati in un tipico formato blog e quindi la tua funzione sopra non funzionerà o si comporterà in modo strano all'interno del loop.
Prova invece qualcosa come questo nel file template effettivo dove si trova il tuo loop principale (magari index.php o loop.php):
//inizio del loop
if ( has_post_thumbnail() ) {
the_post_thumbnail();
}
//the_content(); e altre cose
//fine del loop
Oppure se vuoi usare un'action per modificare il loop principale puoi usare pre_get_posts
, ad esempio nel tuo file functions.php.
Qualcosa come:
add_action( 'pre_get_posts', 'add_featured_image' );
function add_featured_image( $query ) {
if( $query->is_main_query() && $query->is_home() ) {
//il tuo codice per l'immagine
}
}
Nota che il codice sopra sta controllando 2 parametri, la query principale e la pagina home, è molto importante verificare se si tratta della query principale, altrimenti modificherà tutte le query.
Riferimento: http://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts

Non hai letto correttamente la domanda, l'utente non vuole ottenere i post del blog all'interno del loop, ma l'immagine in evidenza della pagina assegnata come pagina indice del Blog, che è esattamente ciò che voglio fare anche io. has_post_thumbnail()
sembra funzionare bene su page.php, ma restituisce false
quando viene usato in index.php

Quando ti trovi nella "pagina degli articoli" $post inizierà con il primo "post" nel loop. Un modo potrebbe essere utilizzando l'"oggetto della query".
Stampa $wp_query e vedrai: [queried_object] [posts] [post] -- nota: queried_object potrebbe essere vuoto in alcune pagine
// get_the_post_thumbnail_url( get_queried_object(), 'fullsize' );
// oppure
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';
// oppure da un'opzione predefinita
}
return $thumbnail_url;
}
