Formation WordPress

Ajouter les balises meta open graph de Facebook sur votre thème WordPress

Les balises open graph de Facebook permettent de préciser des indications sur la page que l’on « like » (miniature, titre, contenu, etc…). Par exemple, nous pouvons préciser l’url de l’image qui doit être affichée lors du « like » car si on il n’est pas précisé, Facebook choisira la première image qu’il trouvera dans la page.

Ce tutoriel a pour but de vous faire connaître l’intégralité de balises open graph de Facebook et de voir comment les ajouter automatiquement sur votre thème WordPress.

Modification de la balise HTML pour introduire les open graph Facebook

Pour implanter les balises open graph de Facebook, nous commençons par modifier la balise HTML afin que les navigateurs interprètent les nouvelles balises que nous allons ajouter.

Nous avons deux étapes à faire :

  • ajouter la fonction language_attributes() sur le balise HTML (dans le fichier header.php)
  • modifier le filtre language_attributes

Ajout de language_attributes() dans le fichier header.php

<html <?php language_attributes(); ?>>

Modification du filtre language_attributes dans le fichier functions.php

// Ajout d'Open Graph pour le Doctype
function add_opengraph_doctype( $output ) {
		return $output . ' xmlns:og="http://opengraphprotocol.org/schema/" xmlns:fb="http://www.facebook.com/2008/fbml"';
	}
add_filter('language_attributes', 'add_opengraph_doctype');

Et voilà ! Regardez le code source de votre site Internet et vous devriez voir que la balise HTML a été modifiée. Elle doit ressembler à ceci :

<html dir="ltr" lang="fr-FR" xmlns:og="http://opengraphprotocol.org/schema/" xmlns:fb="http://www.facebook.com/2008/fbml">

Ajout des balises meta d’Open Graph sur les articles

Maintenant que nous avons modifier notre balise HTML et que le navigateur est apte à reconnaître les balises meta d’Open Graph, nous devons ajouter les différentes balises dans le header.

Déclaration du hook wp_head

Comment faire pour ajouter ces balises dans le header ?
Tout simplement grâce au hook wp_head qui permet d’ajouter le contenu présent dans la fonction entre la balise

On commence par déclarer notre hook dans le fichier functions.php :

function insert_opengraph_in_head() {
}
add_action( 'wp_head', 'insert_opengraph_in_head', 5 );

Ajout des balises meta Open Graph dans le header

Avant de commencer à ajouter les balises meta, on vérifie si nous sommes bien sur la page d’un article ou d’une page. Dans le cas contraire, on ajoute rien car les balises ne seront pas utiles.

Ensuite nous ajoutons 5 balises :

  • og:title : affiche le titre de l’article ou de la page
  • og:type : précise le type de contenu partagé
  • og:url :  affiche l’adresse url de l’article ou de la page
  • og:description : affiche un résumé de l’article
  • og:site_name : affiche le nom du site Internet
  • og:image : affiche l’image indiqué dans la balise

Le titre est indiqué avec la fonction get_the_title() tandis que l’adresse url est indiqué à l’aide de la fonction get_permalink().

En ce qui concerne l’adresse url de la miniature, on utilise la fonction wp_get_attachment_image_src() qui permet de récupérer un tableau contenant plusieurs informations dont l’adresse de l’image en index 0 du tableau que retourne la fonction.
En plus de la meta og:image, on ajoute un supplément « link » content l’attribut « rel » avec la valeur « image_src ».

function insert_opengraph_in_head() {
         global $post;
	if ( !is_singular()) // On vérifie si nous somme dans un article ou une page
		return;
        echo '<meta property="og:title" content="' . get_the_title() . '"/>';
        echo '<meta property="og:type" content="article"/>';
        echo '<meta property="og:url" content="' . get_permalink() . '"/>';
        echo '<meta property="og:description" content="' .strip_tags(get_the_excerpt()) . '" />';
        echo '<meta property="og:site_name" content="NOM DE MON SITE"/>';

	$thumbnail_src = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ) );
	echo '<meta property="og:image" content="' . esc_attr( $thumbnail_src[0] ) . '"/>';
        echo '<link rel="image_src" href="'. esc_attr( $thumbnail_src[0] ) . '" />';
}
add_action( 'wp_head', 'insert_opengraph_in_head', 5 );

Et voilà, votre site Internet est maintenant parfaitement configurer pour les partages d’article sur Facebook :)

Remarque : Il faut laisser un peu de temps à Facebook afin qu’il puisse analyser notre site. En attendant, vous pouvez tester votre script avec le lien suivant : http://developers.facebook.com/tools/debug

Tags :
Auteur : Jonathan
Actuellement en Master 1 Information Communication à Ingémédia, je m’intéresse depuis quelques années à différents aspects du milieu informatique qui m’ont vraiment séduits tels que la gestion de projet et la création de sites Internet.
Avatar de jonathan
Les commentaires 48 commentaires sur cet article
  1. Stephane le

    On est d’accord c’est pour le nouveau Open Graph présenté récemment ?!

    Avatar de
  2. jonathan le

    Ce sont celles qui sont recommandées par Facebook sur la page développeur.

    http://developers.facebook.com/docs/opengraph/

    Avatar de
  3. erhan le

    merci pour ces explication mais j’avoue ne pas avoir bien compris, je m’explique.
    1-tu dit d’ajouter <html > dans header.php. dans mon header j’ai <html xmlns="http://www.w3.org/1999/xhtml&quot; > . question :dois-je le remplacer ?
    2- Modification du filtre language_attributes dans le fichier functions.php > question : je ne trouve pas d’élément qui contient language_attributes !!!

    merci pour tes réponses

    Avatar de
    • erhan le

      oups les balise ne s’affiche pas dans mon premier poste…

      = html <?php language_attributes(); ?
      = html xmlns= »http://www.w3.org/1999/xhtml » ?php language_attributes(); ?

      Avatar de
      • jonathan le

        Cela dépend de ton Doctype !

        Si tu es en HTML5, c’est la première solution, sinon c’est celle que tu proposes :)

        Avatar de
  4. darknote le

    il n’y a pas de if à rajouter au code pour functions.php ?

    Avatar de
    • jonathan le

      Je ne comprends pas votre question :/

      Avatar de
      • darknote le

        simple pourtant ma question,si je met votre code ainsi,il reste inerte,que je le mette avant ou après ?> dans functions.php de mon thème.
        donc je demande si il ne manque pas quelque chose dans le code par exemple if ( au début0

        Avatar de
        • jonathan le

          Oui, mais if quoi ? « if » ça ne veut pas dire grand chose :)

          A savoir que l’astuce fonctionne uniquement sur les articles.

          Il y a aucun effet sur la page index ou des pages par exemple, uniquement les articles !

          Avatar de
          • darknote le

            je ne sus pas codeur,je posais juste une question,je vois par if{ plus un tas de code,je demandais juste si il suffit de mettre le code comment vous le présentez ou si il fallait rajouter if{ ou autre chose,c’est tout,c’est simple comme question,non ?

            Avatar de
  5. jonathan le

    Tout le code est là, si il faudrait quelque chose en plus, je l’aurai mentionné :smile:

    Avatar de
  6. darknote le

    si j’ai demandais c’est que le oode coller dans functions.php par l’éditeur de texte de texte NotePad++ reste en texte noire,alors qui devrait prendre des « couleurs » faut-il le coller avant quelque chose ?Ou après ?

    Avatar de
  7. darknote le

    bon,j’ai changé de thème et là le code est passé,il a pris de la couleur.
    Le hook on le met entre les parenthèse après head de ?

    les balises meta open graph dans single.php ou header.php ?

    Avatar de
    • jonathan le

      Tout est indiqué dans l’article, la chose à mettre dans le fichier header.php est la première ligne de code que j’indique en début d’article.

      Le reste se met dans le fichier functions.php

      Avatar de
  8. Louis_marie_c le

    Bonjour,

    désolé de déterré le topic mais j’ai un soucis j’ai le code qui est visible sur ma page « article » dès que je tente d’utiliser les bouts de code

    exemple sur cette page entre la navbar et le début de l’article

    http://bit.ly/tuqsbT

    une idée de comment je peux régler le soucis ? merci

    Avatar de
    • jonathan le

      Je n’ai pas saisi la demande votre problème !

      A savoir que ce code ne permet pas d’ajouter un bouton de partage Facebook, mais qu’il permet d’afficher les bonnes informations + images lors d’un partage sur Facebook.

      Avatar de
      • Louis_marie_c le

        Euh ça j’avais bien compris, j’ai juste un soucis le code s’affichait en clair au dessus de l’article on voyait ça de marqué

        « function insert_opengraph_in_head() {
        global $post;
        if ( !is_singular()) // On vérifie si nous somme dans un article ou une page
        return;
        echo  »;
        echo  »;
        echo  »;
        echo  »;

        $thumbnail_src = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ) );
        echo  »;
        echo  »;
        }
        add_action( ‘wp_head’, ‘insert_opengraph_in_head’, 5 );  »

        J’ai donc enlevé le code et mis un autre en attendant de trouver une solution pour régler le problème

        Avatar de
        • jonathan le

          Avez-vous bien mis ce code dans votre fichier functions.php ?

          Avatar de
  9. Aurélien Denis le

    Salut,

    je viens d’appliquer ta méthode sur Protuts.net mais quand je cliques sur J’aime la miniature n’est pas celle définie dans les meta du code source, normal ?

    Il y a un délai d’attente ?

    En tout cas, bonne astuce !

    Avatar de
    • jonathan le

      Bonsoir Aurélien,

      Alors non, il n’y a pas de délai d’attente, ça doit être instantané si il n’y a pas de système de cache !

      Je n’arrive pas à accéder à Protuts, c’est normal ?
      Je voulais jetté un oeil sur le code source

      Avatar de
      • Aurélien Denis le

        Euh le site devrait revenir bientôt… pour le code source, les liens vers les images fonctionnent…

        Avatar de
        • jonathan le

          Je viens de me rendre compte qu’il y a peut être un conflit dans le code que j’ai mis.

          Après une mise à jour de l’article j’ai ajouté la ligne avec la balise link rel= »image_src »

          Essayez après avoir supprimer la balise link rel= »image_src », il y a peut être un conflit entre cette balise et la meta og:image.

          Je ne suis vraiment pas sûr de la solution, mais ça ne compte rien de tester :)

          Avatar de
          • Aurélien Denis le

            Merci de ta réponse ! J’ai essayé mais visiblement cela ne change rien…

            L’image affichée sur mon profil Facebook quand je cliques J’aime n’est pas la bonne…

            Est-ce que tu confirmes que cette technique fonctionne de ton côté ?

            P.S : ce serait cool si on pouvait répondre directement dans le corps des commentaires pour relire le commentaire précédent. Simple suggestion ;)

            Avatar de
  10. jonathan le

    Oui, je confirme que le tuto fonctionne.

    Je l’ai mise en place sur le site d’un client. Tu peux faire un essai ici => http://www.crazyjack.fr/agenda/nocturne-n%C2%B010-que-la-lumiere-soit-441/

    Je prends note de ta suggestion concernant les commentaires pour la nouvelle version de GeekPress qui doit sortir avant la fin du mois ;)

    Avatar de
    • Aurélien Denis le

      OK super ! Je vais refaire des tests de mon côté. Dans ton exemple, effectivement l’image affichée dans le J’aime est bien celle spécifiée dans les URLs (et je suppose que cela n’est pas liée au fait que c’est la première image de la page ?).

      Bientôt une nouvelle version ? Nice ! :cool:

      Avatar de
  11. Alex le

    Merci pour cet article.

    J’ai bien suivi ton tuto, on peut apercevoir les différents open graph dans mon code source d’un article. Cependant, mon bouton j’aime/envoyer qui se situe dans un article ne fonctionne pas. Je ne comprends pas pourquoi (Le titre reprend l’url) et pas d’image associée.

    Si tu pouvais m’aider ça serait top.

    Merci

    Avatar de
  12. Alex le

    J’ai trouvé la solution si ça ne fonctionne pas automatiquement, il faut laisser un peu de temps à Facebook afin qu’il scrape votre site. Et ensuite tout re-fonctionne.

    Avatar de
  13. jonathan le

    @Alex : Merci de la précision, je vais l’ajouter sur l’article ;)

    Avatar de
  14. Alex le

    Tu peux même ajouter ce lien pour pouvoir tester nos liens :) :

    http://developers.facebook.com/tools/debug

    Merci à toi pour l’article.

    Avatar de
  15. britain le

    j’ai erreur dans functions.php à cause de cette ligne $thumbnail_src = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID )

    Avatar de
  16. jonathan le

    @BRITAIN : Elle dit quoi l’erreur ? ;)

    Avatar de
  17. britain le

    simplement
    Fatal error: Call to undefined function get_post_thumbnail_id()

    Avatar de
  18. britain le

    est ce que le code peut être en conflit avec un autre code dans mon fichier functions.php ?
    j’ai suivit cet article,
    http://wpchannel.com/recuperer-premiere-image-article-php-wordpress/
    pour récupérer la 1ère image d’un article.

    Avatar de
  19. jonathan le

    @Britain : Ca ne peut pas provenir d’un conflit puisque c’est une fonction native de WordPress http://codex.wordpress.org/Function_Reference/get_post_thumbnail_id

    Quelle est la version de votre WordPress ?

    Avatar de
  20. Aurelien Denis le

    @Britain : je ne me rappelle plus avec certitude, mais il me semble avoir tenté de mixer les 2 tutoriels et que cela fonctionnait. Maintenant ce n’est pas facile…

    Avatar de
  21. Amaury Balmer le

    La solution la plus simple à ce sujet est d’utiliser un plugin dédié :
    http://wordpress.org/extend/plugins/wonderm00ns-simple-facebook-open-graph-tags/

    Ou idéalement utiliser le plugin WordPress SEO, qui gère très bien cette fonctionnalité.

    Avatar de
  22. Eric Ciechanowicz le

    je suis en WordPress 2.9.2. pour http://www.chambrescarnac.com je voudrais upgrader WP à la dernière version de WP avant de mettre tous les boutons de partage possibles
    Si j’ai bien compris http://codex.wordpress.org/fr:Mettre_a_Jour_WordPress

    « Depuis la version 2.7, WordPress dispose d’un outil interne de mise à jour automatique » MAIS ? il faut enregistrer la nouvelle version de WP en local ? puis lancer la procédure ?

    Parce que je n’ai pas dans mon admin la possibilité de « lancer cette mise à jour en vous rendant sur la page Outils > Mettre à jour (versions pré-3.0) »
    et pourquoi ?
    et comment je fais alors un bckup sql puis je dézipe wordpress-3.3.1-fr_FR.zip
    sur mon dd local et je lance Mise à jour manuelle ?

    Avatar de
  23. jonathan le

    Allez voir ce tuto vidéo ;)

    http://www.dailymotion.com/video/xo2pp6_comment-faire-une-mise-a-jour-manuelle-de-wordpress_tech

    Avatar de
  24. Eric Ciechanowicz le

    à ce sujet on trouve juste ça Dans la readme de la wordpress-3.3.1-fr_FR.zip

    « A l’aide de l’outil de mise à jour automatique

    Si votre version de WordPress est égale ou supérieure à 2.7, vous pouvez utiliser l’outil de mise à jour automatique :

    Ouvrez la page wp-admin/update-core.php dans votre navigateur, et suivez les instructions ;
    Vous pensiez qu’il y aurai d’autres étapes ? C’est tout ! »

    mais je suppose qu’il faut avant dezipper wordpress-3.3.1-fr_FR.zip en local ?

    Avatar de
  25. Eric Ciechanowicz le

    Merci !! comme ça c’est encore plus clair :-) tu viens de gagner une tournée à La Tonnelle le bar de http://www.chambrescarnac.com
    :-)

    Avatar de
  26. jonathan le

    @Eric :Haha merci:) Dommage que ça ne soit pas à côté de chez moi :/

    Avatar de
  27. mike le

    bonjour,

    j’ai un souci que j’arrive pas à règler.
    Quand je like une page sur mon site, l’info apparait bien sur facebook mais avec pas avec la bonne image.
    comment puis je lui imposé de prendre l’image de mon produit (prestashop)
    merci

    Avatar de
  28. jonathan le

    @Mike : GeekPress est un site dédié à WordPress. Si votre site est sous Prestashop, vous n’êtes pas au bon endroit ^^

    Avatar de
  29. mike le

    oups… merci bcp.
    si par hasard vous aviez la solution… welcome :)
    à bientôt

    Avatar de
  30. Léonard Rodriguez le

    Merci pour avoir citer mon article dans les commentaires :-)

    Avatar de
  31. noaneo le

    donnant souvent l’adresse de votre article sur le forum de wordpress-fr.net,je remarque les gens ont un doute à cause de ce titre « Ajout des balises meta Open Graph dans le header » cela porte à confusion avec header.php,peut être que « Ajout des balises meta Open Graph dans l’en-tête de votre site » serait mieux,bonne continuation.

    Avatar de
Laisser un commentaire
Balises autorisées dans les commentaires: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Suivre les commentaires de cet article par E-mail