Jai « essayé dutiliser » limage sélectionnée « de la maison (lindex du blog) sans succès. fonctionne pour chaque page, mais cela ne fonctionne pas pour la maison.

Le code ressemble à ceci:

// 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 } } 

Jai déjà essayé dobtenir la vignette en utilisant la méta _thumbnail_id . Même résultat.

Ce code est placé sur le fichier de fonctions, je pense que le problème est quil essaie dobtenir limage en vedette de la boucle / des publications.

Merci beaucoup à lavance.

Réponse

si vous faites référence à la « page pour les articles », alors essayez (seule la section pertinente de votre code affichée):

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 { 

Réponse

Je « suggérerais à quiconque faisant cela denvisager les ajustements suivants:

  1. Obtenez lID de la page / publication / index en cours à laide de get_queried_object(). Pour un index de blog défini sur une page, cela renverra lID de page correct.
  2. Si vous ne voulez que limage en taille réelle, utilisez wp_get_attachment_url() au lieu de wp_get_attachment_image_src()

Voici « une fonction rapide que jutiliserais pour y parvenir de manière plus simple:

/** * 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; } 

Personnellement, jaime éviter une logique conditionnelle imbriquée excessive, lutilisation dune fonction peut vous aider.

Réponse

Vous avez 2 options rapides, via le fichier modèle en utilisant the_post_thumbnail pour la boucle. Je suppose que vous sortez les données dans un format de blog typique et que votre fonction ci-dessus ne fonctionnera pas ou nagira pas de manière très étrange à lintérieur de la boucle.

Essayez plutôt quelque chose comme ça dans le fichier modèle réel où se trouve votre boucle principale (peut-être index.php ou loop.php):

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

Ou si vous souhaitez utiliser une action à la place pour modifier la boucle principale, vous pouvez utiliser pre_get_posts, par exemple dans votre fichier functions.php.

Quelque chose comme:

add_action( "pre_get_posts", "add_featured_image" ); function add_featured_image( $query ) { if( $query->is_main_query() && $query->is_home() ) { //your image code } } 

Notez que ci-dessus vérifie 2 paramètres, la requête principale et la page daccueil, il est très important de vérifier si cest la requête principale, sinon cela modifiera toutes les requêtes.

Référence: http://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts

Commentaires

  • Vous navez ' t lire la question correctement, lutilisateur ne ' ne veut pas obtenir les articles de blog à lintérieur de la boucle, il veut limage en vedette de la page qui est assigné à la page dindex du blog, ce que je veux faire aussi. has_post_thumbnail() semble fonctionner correctement sur page.php, mais renvoie false lorsquil est utilisé dans index.php

Réponse

Cela fonctionne ..

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

Jespère que cela vous aidera!

Réponse

Lorsque vous êtes dans la « page des articles », $ post commencera par le premier « message » de la boucle. Une solution pourrait être dutiliser l « objet interrogé ».

Imprimez $ wp_query et vous verrez: [queried_object] [posts] [post] – note: queried_object sera / pourrait être vide dans certaines pages

// 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; } 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *