J'ai essayé d'utiliser "l'image en vedette" de la maison (l'index des blogs) sans succès. Cela fonctionne pour chaque page, mais 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 }
}
J'ai déjà essayé d'obtenir la vignette à l'aide de _thumbnail_id meta. Même résultat.
Ce code est placé sur le fichier de fonctions, je pense que le problème est qu’il essaie d’obtenir la boucle/les messages en vedette.
Merci beaucoup d'avance.
si vous vous référez à la 'page pour les articles', essayez alors (seule la section pertinente de votre code est 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 {
Je suggérerais à quiconque de le faire de considérer les ajustements suivants:
get_queried_object()
. Pour un index de blog défini sur une page, l'ID de page correct sera renvoyé.wp_get_attachment_url()
au lieu de wp_get_attachment_image_src()
Voici une fonction rapide que j'utiliserais pour y parvenir d'une 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, j'aime éviter une logique conditionnelle imbriquée excessive, l'utilisation d'une fonction peut y contribuer.
Vous avez 2 options rapides, via le fichier modèle en utilisant the_post_thumbnail
pour la boucle. Je suppose que votre sortie des données dans un format de blog typique et que votre fonction ci-dessus ne fonctionnera pas ou ne sera pas très bizarre dans la boucle.
Essayez plutôt quelque chose comme ceci dans le fichier de modèle actuel 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 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 ce qui précède est en train de vérifier 2 paramètres, la requête principale et la page d’accueil, il est très important de vérifier s’il s’agit de la requête principale, sinon toutes les requêtes seront modifiées.
Référence: http://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts
Cela marche..
<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').')';
}
?>;">
J'espère que cela t'aides!