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:
- 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. - Si vous ne voulez que limage en taille réelle, utilisez
wp_get_attachment_url()
au lieu dewp_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 renvoiefalse
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; }