Ottenere l'immagine in evidenza nella pagina Blog Index

9 set 2012, 20:06:29
Visualizzazioni: 18.9K
Voti: 8

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.

0
Tutte le risposte alla domanda 5
0
15

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 { 
9 set 2012 20:52:01
0

Suggerirei a chiunque stia implementando questa soluzione di considerare i seguenti aggiustamenti:

  1. 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.
  2. Se tutto ciò che ti serve è l'immagine a dimensione intera, usa wp_get_attachment_url() invece di wp_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.

19 feb 2018 18:28:37
0

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!

8 giu 2017 00:45:32
1

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

9 set 2012 20:38:52
Commenti

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

Lee Lee
22 ago 2016 13:17:24
0

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;

}
2 apr 2020 16:11:20