Obține imaginea reprezentativă pe pagina principală a blogului

9 sept. 2012, 20:06:29
Vizualizări: 18.9K
Voturi: 8

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.

0
Toate răspunsurile la întrebare 5
0
15

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

Aș sugera ca oricine face acest lucru să ia în considerare următoarele ajustări:

  1. 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.
  2. Dacă tot ce vrei este imaginea la dimensiunea maximă, folosește wp_get_attachment_url() în loc de wp_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.

19 feb. 2018 18:28:37
0

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

8 iun. 2017 00:45:32
1

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

9 sept. 2012 20:38:52
Comentarii

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

Lee Lee
22 aug. 2016 13:17:24
0

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;

}
2 apr. 2020 16:11:20