web-dev-qa-db-fra.com

L'image sélectionnée ne s'affichera pas sur la page des messages

J'espère que cela n'a pas déjà été couvert - je ne pouvais pas le trouver en utilisant mes mots clés. J'ai conçu un site avec une nouvelle image d'en-tête pour chaque page. Je l'appelle sur chaque page du fichier header.php comme ceci:

<img src="<?php echo the_post_thumbnail_url('full'); ?>" alt="Header Image">

J'ai activé les images en vedette dans functions.php (add_theme_support('post-thumbnails');) et cela fonctionne correctement sur toutes les autres pages du site.

Sous Paramètres> Lecture, j'ai remplacé l'option Front Page Displays: de Your latest posts par A static page et défini mes pages d'accueil et de publication sur Home et Blog (pages que j'ai créées dans le tableau de bord).

Lorsque je charge la page du blog, elle affiche un conteneur d'image vide. L'inspection des éléments montre qu'il n'y a pas de jeu de code src. Si je désactive la page/blog/en tant que page Messages sous Paramètres> Lecture, l'image apparaît. J'ai essayé ceci avec/blog/en utilisant index.php en tant que modèle et en utilisant home.php en tant que modèle. Aucune différence.

Si la page de blog me permet de définir une image en vedette dans le tableau de bord WordPress, pourquoi ne l'a-t-elle pas affichée?

EDIT: Je vois cette question , mais la réponse ne me dit pas réellement pourquoi ni ce qui se passe.

1
armadadrive

Lorsque vous avez défini le Posts Page: sur "Blog", puis que vous visitez directement la page (via le slug), l'image d'en-tête s'affiche-t-elle?

La définition de la page statique "Messages" sur votre page "Blog" annule le modèle. Wordpress utilisera la hiérarchie des modèles pour déterminer le fichier à utiliser pour afficher les articles du blog.

Le problème est que WP_Query contient la liste des publications à afficher car les paramètres lui indiquent que cette page est utilisée pour afficher des publications et non qu'il s'agit d'une page individuelle.

Cela signifie que le modèle ne tiendra pas nécessairement compte des paramètres de la page à partir de la modification de la page.

Nous devons examiner la documentation des balises conditionnelles pour trouver le bon modèle à utiliser:

if ( is_front_page() && is_home() ) {
  // Default homepage
} elseif ( is_front_page() ) {
  // static homepage
} elseif ( is_home() ) {
  // blog page
} else {
  //everything else
}

En utilisant ce modèle (ou quelque chose de similaire), vous pouvez mettre à jour votre code avec ceci:

// Use Conditional Tags to find out if you are on the header page
<?php if ( is_home() ) : ?>
<img src="<?php echo get_the_post_thumbnail_url(*BLOG PAGE ID HERE*,'full'); ?>" alt="header" />
<?php else  : ?>
<img src="<?php echo get_the_post_thumbnail_url('full'); ?>" alt="header" />
<?php endif; ?>

En utilisant quelque chose comme ça, WP va saisir l'URL de la vignette en fonction des paramètres de la page.

Notez mon utilisation de get_the_post_thumbnail_url(), y compris l'ID de page pour extraire l'image d'en-tête. De plus, votre utilisation de the_post_thumbnail_url() est incorrecte. La echo que vous avez utilisée est redondante car the_post_thumbnail_url() est utilisé pour imprimer l'URL de la vignette. Voir le source ici .

ÉDITÉ pour plus de clarté

2
David