Ich habe versucht, das „vorgestellte Bild“ von zu Hause (dem 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 Miniaturbild mit dem Meta _thumbnail_id zu erhalten. Gleiches Ergebnis.
Dieser Code wird platziert Ich glaube, dass das Problem in der Funktionsdatei darin besteht, dass versucht wird, das Bild mit der Schleife / den Posts zu erhalten.
Vielen Dank im Voraus.
Antwort
Wenn Sie sich auf die „Seite für Beiträge“ beziehen, versuchen Sie (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 {
Antwort
Ich würde jedem empfehlen, der dies tut, die folgenden Anpassungen zu berücksichtigen:
- Rufen Sie die ID der aktuellen Seite / des aktuellen Beitrags / Index mit
get_queried_object()
ab Blog-Index, der auf eine Seite festgelegt ist, gibt die richtige Seiten-ID zurück. - Wenn Sie nur das Bild in voller Größe wünschen, verwenden Sie
wp_get_attachment_url()
anstelle vonwp_get_attachment_image_src()
Hier „eine schnelle Funktion, die ich verwenden würde, um dies auf einfachere Weise zu erreichen:
/** * 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 möchte übermäßige verschachtelte bedingte Logik vermeiden. Die Verwendung einer Funktion kann dabei helfen.
Antwort
Sie haben zwei schnelle Optionen über die Vorlagendatei, indem Sie the_post_thumbnail
für die Schleife verwenden. Ich gehe davon aus, dass Sie die Daten in einem typischen Blog-Format ausgeben und daher Ihre obige Funktion innerhalb der Schleife nicht funktioniert oder sehr seltsam wirkt.
Versuchen Sie stattdessen so etwas in der eigentlichen Vorlagendatei, in der sich Ihre Hauptschleife befindet (möglicherweise index.php oder loop.php):
//loop starts if ( has_post_thumbnail() ) { the_post_thumbnail(); } //the_content(); and other stuff //loop ends
Wenn Sie stattdessen eine Aktion zum Ändern der Hauptschleife verwenden möchten, können Sie pre_get_posts
, zum Beispiel 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 dies Bei der obigen Überprüfung werden zwei Parameter überprüft, die Hauptabfrage und die Startseite. Es ist sehr wichtig zu überprüfen, ob es sich um die Hauptabfrage handelt. Andernfalls werden alle Abfragen geändert.
Referenz: http://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts
Kommentare
- Sie haben ' Lesen Sie die Frage nicht richtig, der Benutzer ' möchte die Blog-Beiträge nicht in der Schleife erhalten, sondern das vorgestellte Bild der Seite, die ist der Blog-Indexseite zugeordnet, was ich auch tun möchte.
has_post_thumbnail()
scheint auf page.php einwandfrei zu funktionieren, gibt jedochfalse
zurück, wenn es in index.php
Antwort
Dies funktioniert ..
<section 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!
Antwort
Wenn Sie sich auf der „Posts-Seite“ befinden, beginnt $ post mit dem ersten „Post“ in der Schleife. Eine Möglichkeit könnte die Verwendung des „abgefragten Objekts“ sein.
Drucken Sie $ wp_query und Sie werden sehen: [abgefragtes Objekt] [Beiträge] [Beitrag] – Hinweis: Das abgefragte Objekt wird / könnte auf einigen Seiten leer sein
// get_the_post_thumbnail_url( get_queried_object(), "fullsize" ); // or 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"; // or from a default option } return $thumbnail_url; }