Tout savoir sur WordPress
Tutoriel WordPress

Afficher une image par défaut dans vos articles

Cette astuce montre la méthode à suivre pour appeler une image par défaut, si vous n’avez pas d’image à la une à mettre pour votre article.

Depuis sa version 2.9, WordPress fournit une option de “miniature” qui permet de lier une image principale à votre article. Sur la page d’administration, cette fonctionnalité s’appelle Image à la Une.

Cependant, si vous n’avez pas d’image particulière à associer à votre article, vous pouvez simplement appeler une image par défaut.

Copiez le code ci-dessous dans votre boucle :

[pastacode lang=”php” message=”” highlight=”” provider=”manual”]


// On vérifie si une "Image à la une" est lié à l'article
if( has_post_thumbnail() ) {
  
  // On affiche l'image à la Une
  the_post_thumbnail();

} else {
  
  // Sinon on affiche notre image par défaut
  echo '<img src="' .  get_bloginfo('template_directory') . '/images/default_post_thumb.jpg" alt="" />';

}

[/pastacode]

Qu’avons nous fait ?

  • on vérifie à l’aide de has_post_thumbnail() que l’article contient une Image à la Une
  • si oui, on affiche l’image grâce à la fonction the_post_thumbnail()
  • si non, on affiche notre image par défaut
Cet article a été mis à jour il y a 4697 jours - Il n'est peut être plus à jour !

Article écrit par Jonathan B.

Jonathan est le co-fondateur de WP Media, startup connue pour être l’auteur de WP Rocket et Imagify. Il est aussi co-organisateur du WordCamp Lyon et Paris.

23 Commentaires

  1. On peut également spécifier un thumbnail qu’au dernier article publié et non aux autres à l’aide d’un simple condition if (…){} :roll:

  2. @Naoneo : Pour un mettre en place cela dans un thème enfant, il faut copier le fichier du thème parent dans le thème enfant et faire les modifications dans le fichier placé dans le thème enfant.

  3. mais là c’est le fichier functions.php, on ne copie pas le fichier functions.php du thème parent dans le thème enfant.
    il me semble qu’il faut modifier ce code ‘template_directory’

  4. @ noaneo : Ce code n’est pas destiner à être dans le fichier functions.php, mais à l’intérieur d’un fichier de template dans une loop (je l’ai précisé dans l’article ^^).

  5. désolé j’ai pu vu la ligne indiqué boucle, j’ai vu le code et cela m’a fait penser à un code pour functions.php.
    si c’est pour une boucle, pas de souci, je sais le faire, mais j’ai un doute sur template_directory plus employé pour un thème parent qu’enfant

  6. c’est ce que je fais à chaque fois.

    c’est bien ce que je pensais le code est pour un thème parent, pour un thème enfant remplacer template_directory par stylesheet_directory
    ne voulant pas faire d’erreur, si je veux rajouter permalink , je mets où ? Merci

  7. Pour ajouter l’image d’un lien, il faut remplacer :

    echo '<img src="' .  get_bloginfo('template_directory') . '/images/default_post_thumb.jpg" alt="" />';
    

    par

    echo '<a href="' . get_permalink() . '">
             <img src="' .  get_bloginfo('template_directory') . '/images/default_post_thumb.jpg" alt="" />
         </a>';
    
  8. Il devrait également être possible de mettre une image spécifique pour chaque catégorie ou post-type (je veux dire dans le cas où il n’y en a pas dans l’article), via une condition du genre

    if( is_category('toto') ){ ... }

  9. Bonjour,

    Est-ce moi qui n’arrive pas à me faire avec la MAJ de wordpress 3.5.. mais on dirait que le lien ‘Ajouter l’image à la Une’ à disparu..

    La fonctionnalité est-elle toujours présente et fonctionne toujours avec la fonction the_post_thumbnail() sous 3.5 ?

    Merci de votre réponse.

    Cordialement.

  10. @Rom : La fonction existe toujours et celle là n’est pas prête de disparaître un jour :)

  11. @Noaneo : Il est vrai que l’encart “Image à la Une” est trop peu visible… J’espère que cela sera régler avec la prochaine version de WordPress.

  12. Bonjour,
    exactement ce que je cherchais ou presque. En effet, je suis en train de refaire un de mes sites et je me voyais mal reprendre chaque article pour y mettre une miniature. Par contre, est-ce qu’il serait possible de mettre plusieurs images dans le dossier et d’en attribuer une aléatoirement au post pour ne pas avoir de doublons sur une page où il y a plusieurs articles.
    Merci d’avance et bonne continuation.

  13. @Clicpartout: Tout est possible ;)

    Dans ce cas précis, il suffirait de stocker les URLs des images dans un array et de faire un random sur la clé à récupérer avec une adresse au hasard.

  14. Jonathan :)
    merci de m’avoir aiguillé, j’y suis arrivée. Comme je suis une bille en php, j’ai cherché sur le net et après avoir galéré 2 jours et passé par une flopée de Parse error, ça marche.

    A bientôt

  15. Bien cool, par contre je n’arrive pas à modifier pour SUPPRIMER l’image à la une après un certain temps de manière automatique.

    need help =)

    @++
    Seb

  16. Dans le cas où l’on part d’un thème from scratch, il faut au préalable activer cette fonction dans functions.php en rajoutant la ligne :

    add_theme_support( ‘post-thumbnails’ );

    Sinon l’option mettre une image à la une ne s’activera pas dans l’admin.

  17. Bonjour, comment peut-on rajouter une classe à the_post_thumbnail(); ? J’ai bien trouvé quelque chose avec un array et attribut mais j’ai une erreur de syntaxe… :-( . Si quelqu’un peut me donner la bonne syntaxe =).

  18. Je ne sais pas si je vais avoir une réponse mais je tente le coup.lol

    Ce tutoriel est-il toujours d’actualité ?

    Si oui, peut-on répondre à certaines de mes questions ?

    1). Il faut bien insérer ce code dans le fichier functions ? Ou ailleurs ?
    2). Mon rêve :
    Quand on voit mes derniers articles en ligne (en page d’accueil), que soit affiché un extrait de l’article et la première image (en miniature) que l’article contient. Mais si je n’ai pas d’image dans un article (ce qui peut arriver), avoir quand même une image, selon la catégorie où se place l’article.

    D’après ce que je lis, je vois que c’est possible…comment ? Pas trop compris. :S

    Merci par avance.