it-swarm.com.de

Holen Sie sich ein Bild im Blog-Index

Ich habe versucht, das "vorgestellte Bild" von zu Hause (der Blog-Index) ohne Glück zu verwenden. Es funktioniert für jede einzelne Seite, aber nicht für zu Hause.

Der Code sieht ungefähr so ​​aus:

// Don't use on single posts
    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) { ?>
            // A lot of code...
        <?php }
    }

Ich habe bereits versucht, das Thumbnail mit der _thumbnail_id meta zu erhalten. Gleiches Ergebnis.

Dieser Code befindet sich in der Funktionsdatei. Ich glaube, das Problem besteht darin, dass versucht wird, das mit loop/posts gekennzeichnete Bild zu erhalten.

Vielen Dank im Voraus.

6
demogar

wenn Sie auf die Seite für Posts verweisen, versuchen Sie Folgendes (nur der relevante Abschnitt Ihres Codes wird angezeigt):

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 { 
13
Michael

Ich würde jedem empfehlen, der dies tut, die folgenden Anpassungen in Betracht zu ziehen:

  1. Rufen Sie mit get_queried_object() die ID der aktuellen Seite/des aktuellen Beitrags/Index ab. Für einen Blog-Index, der auf eine Seite festgelegt ist, wird die richtige Seiten-ID zurückgegeben.
  2. Wenn Sie nur ein Bild in voller Größe wünschen, verwenden Sie wp_get_attachment_url() anstelle von wp_get_attachment_image_src()

Hier ist eine kurze Funktion, mit der ich dies auf einfachere Weise erreichen würde:

/**
 * Custom Featured Image
 */
function custom_featured_image() {
    $queried_obj = get_queried_object();

    // Don't use on single posts (JUST FOR THIS DEMO)
    if ( is_single() ) return;

    // Get the featured image ID
    $image_id = get_post_thumbnail_id( $queried_obj->ID );

    // Get the URL for the full sized image
    $image_src = wp_get_attachment_url( $image_id );

    return $image_src;
}

Ich persönlich mag es, übermäßig verschachtelte bedingte Logik zu vermeiden. Die Verwendung einer Funktion kann dabei helfen.

0
Kevin Leary

Sie haben 2 schnelle Optionen über die Vorlagendatei mit the_post_thumbnail für die Schleife. Ich gehe davon aus, dass Sie die Daten in einem typischen Blog-Format ausgeben und daher Ihre obige Funktion nicht funktioniert oder sich in der Schleife sehr seltsam verhält.

Versuchen Sie stattdessen etwas in der eigentlichen Vorlagendatei, in der sich Ihre Hauptschleife befindet (vielleicht index.php oder loop.php):

  //loop starts
   if ( has_post_thumbnail() ) { 
   the_post_thumbnail();
   }
   //the_content(); and other stuff
   //loop ends

Oder wenn Sie stattdessen eine Aktion verwenden möchten, um die Hauptschleife zu ändern, können Sie pre_get_posts verwenden, z. B. in Ihrer Datei functions.php.

So etwas wie:

add_action( 'pre_get_posts', 'add_featured_image' );

function add_featured_image( $query ) {

    if( $query->is_main_query() && $query->is_home() ) {
        //your image code
    }

}

Beachten Sie, dass oben 2 Parameter überprüft werden, die Hauptabfrage und die Homepage. Es ist sehr wichtig zu überprüfen, ob es sich um die Hauptabfrage handelt, da sonst alle Abfragen geändert werden.

Referenz: http://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts

0
Wyck

Das funktioniert..

<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').')';
}
?>;">

Hoffe das hilft!

0
troychroi