{"id":234258,"date":"2023-02-23T19:35:00","date_gmt":"2023-02-23T16:35:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=234258"},"modified":"2022-11-12T02:31:25","modified_gmt":"2022-11-11T23:31:25","slug":"tutoriel-creer-un-widget-de-microdonnees-pour-votre-entreprise-dans-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/tutoriel-creer-un-widget-de-microdonnees-pour-votre-entreprise-dans-wordpress\/","title":{"rendered":"Tutoriel\u00a0: Cr\u00e9er un widget de microdonn\u00e9es pour votre entreprise dans WordPress"},"content":{"rendered":"\n<p>Dans ce didacticiel, nous allons apprendre \u00e0 cr\u00e9er un widget personnalis\u00e9 qui affiche les informations sur votre entreprise, telles que son nom officiel, son adresse, son num\u00e9ro de t\u00e9l\u00e9phone et son adresse e-mail. Mais nous allons aller plus loin en le produisant avec des <a href=\"https:\/\/schema.org\/docs\/gs.html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">microdonn\u00e9es<\/a> ou un balisage de sch\u00e9ma, ce qui permettra aux moteurs de recherche de comprendre votre contenu.<\/p>\n<p>Les widgets sont des blocs dynamiques qui peuvent \u00eatre plac\u00e9s dans les zones disponibles de votre th\u00e8me. Habituellement, votre th\u00e8me aurait au minimum une barre lat\u00e9rale et une ou plusieurs zones en pied de page. Avoir les informations sur votre entreprise sous forme de widget dans le pied de page est courant et assez intelligent, car le pied de page appara\u00eet sur toutes les pages de votre site.<\/p>\n<p>Les microdonn\u00e9es sont des attributs HTML suppl\u00e9mentaires qui expliquent ce que contient une balise HTML sp\u00e9cifique afin qu&rsquo;une machine puisse comprendre ce qu&rsquo;elles sont (par exemple, nom commercial, num\u00e9ro de t\u00e9l\u00e9phone, adresse professionnelle, adresse e-mail professionnelle, etc.). Cela permet aux moteurs de recherche tels que Google d&rsquo;extraire des informations sur votre entreprise \u00e0 partir de votre code HTML.<\/p>\n<h2>Ce que nous allons cr\u00e9er<\/h2>\n<p>Notre widget affichera des informations \u00e0 l&rsquo;aide du sch\u00e9ma de microdonn\u00e9es <a href=\"https:\/\/schema.org\/LocalBusiness\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">LocalBusiness<\/a>, ce qui est parfait pour une organisation ou une entreprise. C&rsquo;est \u00e0 vous de d\u00e9cider quelles propri\u00e9t\u00e9s vous souhaitez afficher, cliquez simplement sur le lien ci-dessus pour lire toutes les propri\u00e9t\u00e9s possibles dans LocalBusiness (y compris h\u00e9rit\u00e9es). Votre entreprise ou votre pays peut pr\u00e9f\u00e9rer diff\u00e9rents types d&rsquo;informations.<\/p>\n<p>Le widget de ce didacticiel affichera les informations facultatives suivantes\u00a0:<\/p>\n<ul>\n<li>Nom de l&rsquo;entreprise (propri\u00e9t\u00e9 des microdonn\u00e9es\u00a0: <code>legalName<\/code>)<\/li>\n<li>ID de TVA ou num\u00e9ro d&rsquo;organisation (propri\u00e9t\u00e9 des microdonn\u00e9es\u00a0: <code>vatID<\/code>)<\/li>\n<li>Adresse postale (balise de microdonn\u00e9es\u00a0: <code>PostalAddress<\/code>avec les propri\u00e9t\u00e9s pour <code>streetAddress<\/code>, <code>postalCode<\/code>et <code>addressLocality<\/code>)<\/li>\n<li>Adresse e-mail de l&rsquo;entreprise (propri\u00e9t\u00e9 des microdonn\u00e9es\u00a0: <code>email<\/code>)<\/li>\n<li>Num\u00e9ro de t\u00e9l\u00e9phone (propri\u00e9t\u00e9 des microdonn\u00e9es\u00a0: <code>telephone<\/code>)<\/li>\n<\/ul>\n<p>Ce didacticiel ne vous guidera pas \u00e0 travers le style du widget, car cela devrait \u00eatre assez simple. En frontend, notre widget ressemblera \u00e0 un widget texte normal. Mais bien s\u00fbr, sous le capot, il y a un balisage de sch\u00e9ma qui aide Google.<\/p>\n<h2>Les bases de la cr\u00e9ation d&rsquo;un widget personnalis\u00e9<\/h2>\n<p>Vous pouvez mettre votre code dans votre th\u00e8me <code>functions.php<\/code>ou cr\u00e9er un plugin personnalis\u00e9. N&rsquo;oubliez pas que si vous le conservez dans un plugin, vous perdrez le widget lors de la d\u00e9sactivation du plugin ; et de m\u00eame le garder dans le th\u00e8me vous fera perdre le widget si vous passez \u00e0 un autre th\u00e8me. Dans cet exemple, je vais ajouter le code dans le fichier <code>functions.php<\/code>.<\/p>\n<p>La cr\u00e9ation d&rsquo;un widget se fait avec du code PHP orient\u00e9 objet. Vous \u00e9crivez une classe PHP qui \u00e9tend la classe de widgets de WordPress et l&rsquo;initialisez en appelant <code>register_widget()<\/code>et en fournissant le nom de votre classe. Dans ce tutoriel, j&rsquo;ai nomm\u00e9 ma classe widget <code>LocalBusiness<\/code>.<\/p>\n<p>Commen\u00e7ons par appeler \u00e0 l&rsquo; <code>register_widget()<\/code>int\u00e9rieur d&rsquo;une fonction accroch\u00e9e \u00e0 l&rsquo;action <code>widgets_init<\/code>.<\/p>\n<pre><code>add_action('widgets_init', function() {\n    register_widget('LocalBusiness');\n});<\/code><\/pre>\n<p>Examinons rapidement le squelette d&rsquo;une classe de widget personnalis\u00e9e\u00a0:<\/p>\n<pre><code>class LocalBusiness extends WP_Widget {\n\u00a0\n    \/\/ Initialize your widget in the class constructor\n    public function __construct() { }\n\u00a0\n    \/\/ Responsible for outputting the widget in frontend\n    public function widget($args, $instance) { }\n\u00a0\n    \/\/ Responsible for outputting the widget settings in admin\n    public function form($instance) { }\n\u00a0\n    \/\/ Responsible for saving settings in admin\n    public function update($new_instance, $old_instance) { }\n}<\/code><\/pre>\n<p>Comme vous pouvez le voir ci-dessus, vous aurez besoin de quatre fonctions dans votre classe. Passons en revue chaque fonction une par une et remplissons-les.<\/p>\n<h2>Cr\u00e9ation d&rsquo;un widget de microdonn\u00e9es d&rsquo;entreprise locale<\/h2>\n<p>L&rsquo;endroit le plus logique pour commencer est le constructeur, qui est responsable de la configuration de votre widget.<\/p>\n<h3>La fonction __construct()<\/h3>\n<p>Dans le constructeur, vous devez configurer certaines variables, telles que le nom du widget, et appeler la fonction constructeur du parent (la classe parent est celle que vous \u00e9tendez\u00a0; <code>WP_Widget<\/code>). En savoir plus sur <a href=\"https:\/\/developer.wordpress.org\/reference\/classes\/wp_widget\/__construct\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">les options possibles dans le constructeur ici<\/a>. Je fournirai un ID de base, un titre et une description, comme ceci\u00a0:<\/p>\n<pre><code>\/\/ Initialize your widget in the class constructor\npublic function __construct() {\n    $widget_ops = [\n        'description' =&gt; __('Outputs business information with Microdata', 'txtdomain')\n    ];\n    parent::__construct('local_business', __('Local Business Information', 'txtdomain'), $widget_ops);\n}<\/code><\/pre>\n<p>Vous pouvez faire plus dans <code>__construct<\/code>la m\u00e9thode, comme mettre des scripts en file d&rsquo;attente ou d\u00e9finir plus de param\u00e8tres de widget. Mais ce qui pr\u00e9c\u00e8de est g\u00e9n\u00e9ralement suffisant dans la plupart des cas.<\/p>\n<h3>La fonction formulaire()<\/h3>\n<p>L&rsquo;\u00e9tape suivante consiste \u00e0 cr\u00e9er tous les param\u00e8tres et entr\u00e9es que votre widget accepte dans l&rsquo;administration. Pour envoyer les param\u00e8tres \u00e0 l&rsquo;administrateur du Widget, nous utilisons la fonction <code>form()<\/code>qui vous donne un param\u00e8tre\u00a0; un tableau qui contient toutes vos options de widget \u00e9ventuellement enregistr\u00e9es. Il est important que vous produisiez le param\u00e8tre enregistr\u00e9 correspondant dans toutes vos entr\u00e9es afin que les donn\u00e9es soient conserv\u00e9es. (Nous verrons comment enregistrer les param\u00e8tres \u00e0 l&rsquo;\u00e9tape suivante).<\/p>\n<p>Il y a beaucoup de choses \u00e0 suivre dans la fonction de formulaire, alors ajoutons d&rsquo;abord une entr\u00e9e, pour le nom l\u00e9gal, et assurons-nous de comprendre ce que nous devons faire\u00a0:<\/p>\n<pre><code>\/\/ Responsible for outputting the widget settings in admin\npublic function form($instance) { \n    ?&gt;\n    &lt;p&gt;\n        &lt;label for=\"&lt;?php echo $this-&gt;get_field_id('legal_name'); ?&gt;\"&gt;&lt;?php _e('Legal name:', 'txtdomain'); ?&gt;&lt;\/label&gt;\n        &lt;input \n            type=\"text\" \n            class=\"widefat\" \n            id=\"&lt;?php echo esc_attr($this-&gt;get_field_id('legal_name')); ?&gt;\"\n            name=\"&lt;?php echo esc_attr($this-&gt;get_field_name('legal_name')); ?&gt;\"\n            value=\"&lt;?php echo esc_attr($instance['legal_name']); ?&gt;\"\n        \/&gt;\n    &lt;\/p&gt;\n    &lt;?php\n}<\/code><\/pre>\n<p>Tout d&rsquo;abord, le code ci-dessus g\u00e9n\u00e8re des wrappers HTML et des classes sous la forme sous laquelle WordPress g\u00e9n\u00e8re ses formulaires de widgets &#8211; nous le faisons pour que le formulaire soit agr\u00e9able.<\/p>\n<p>Il y a deux fonctions avec lesquelles vous devez vous familiariser ; <code>get_field_id()<\/code>et <code>get_field_name()<\/code>et ils sont tous les deux des fonctions \u00e0 l&rsquo;int\u00e9rieur <code>WP_Widget<\/code>(c&rsquo;est pourquoi vous appelez &quot; <code>$this-&gt;<\/code>&quot; devant &#8211; alors que <code>$this<\/code>fait r\u00e9f\u00e9rence \u00e0 l&rsquo;instance de la classe). Les fonctions renvoient respectivement l&rsquo;ID et le nom d&rsquo;un champ fourni, \u00e0 utiliser dans vos entr\u00e9es <code>id<\/code>et <code>name<\/code>attributs. C&rsquo;est tr\u00e8s important de ne pas oublier d&rsquo;ajouter un <code>name<\/code>attribut sur votre entr\u00e9e, sinon vous ne saisirez jamais sa valeur lors de l&rsquo;enregistrement.<\/p>\n<p>Et enfin, nous produisons la valeur enregistr\u00e9e actuelle comme <code>value<\/code>pour notre entr\u00e9e en r\u00e9f\u00e9ren\u00e7ant l&rsquo;argument pass\u00e9 <code>$instance<\/code>. Sans le faire pour votre valeur, l&rsquo;entr\u00e9e ne sera jamais remplie avec tout ce qui est enregistr\u00e9 dans la base de donn\u00e9es et appara\u00eetra vide \u00e0 chaque fois, ce qui peut d\u00e9router les utilisateurs.<\/p>\n<p>Si vous souhaitez diff\u00e9rentes entr\u00e9es de formulaire, telles que des cases \u00e0 cocher ou des listes d\u00e9roulantes, vous devriez pouvoir les ajouter facilement en suivant les r\u00e8gles mentionn\u00e9es ci-dessus. Ajoutons le reste de nos param\u00e8tres de widget. Ce sont toutes des entr\u00e9es de texte, c&rsquo;est donc le m\u00eame code que ci-dessus r\u00e9p\u00e9t\u00e9, \u00e0 l&rsquo;exception de leurs ID de champ. Notre <code>form()<\/code>m\u00e9thode finit par ressembler \u00e0 ceci :<\/p>\n<pre><code>\/\/ Responsible for outputting the widget settings in admin\npublic function form($instance) { \n    ?&gt;\n    &lt;p&gt;\n        &lt;label for=\"&lt;?php echo $this-&gt;get_field_id('legal_name'); ?&gt;\"&gt;&lt;?php _e('Legal name:', 'txtdomain'); ?&gt;&lt;\/label&gt;\n        &lt;input type=\"text\" class=\"widefat\" id=\"&lt;?php echo esc_attr($this-&gt;get_field_id('legal_name')); ?&gt;\" name=\"&lt;?php echo esc_attr($this-&gt;get_field_name('legal_name')); ?&gt;\" value=\"&lt;?php echo esc_attr($instance['legal_name']); ?&gt;\" \/&gt;\n    &lt;\/p&gt;\n    &lt;p&gt;\n        &lt;label for=\"&lt;?php echo $this-&gt;get_field_id('vat_id'); ?&gt;\"&gt;&lt;?php _e('Vat ID\/Organization number:', 'txtdomain'); ?&gt;&lt;\/label&gt;\n        &lt;input type=\"text\" class=\"widefat\" id=\"&lt;?php echo esc_attr($this-&gt;get_field_id('vat_id')); ?&gt;\" name=\"&lt;?php echo esc_attr($this-&gt;get_field_name('vat_id')); ?&gt;\" value=\"&lt;?php echo esc_attr($instance['vat_id']); ?&gt;\" \/&gt;\n    &lt;\/p&gt;\n    &lt;p&gt;\n        &lt;label for=\"&lt;?php echo $this-&gt;get_field_id('street_address'); ?&gt;\"&gt;&lt;?php _e('Street address:', 'txtdomain'); ?&gt;&lt;\/label&gt;\n        &lt;input type=\"text\" class=\"widefat\" id=\"&lt;?php echo esc_attr($this-&gt;get_field_id('street_address')); ?&gt;\" name=\"&lt;?php echo esc_attr($this-&gt;get_field_name('street_address')); ?&gt;\" value=\"&lt;?php echo esc_attr($instance['street_address']); ?&gt;\" \/&gt;\n    &lt;\/p&gt;\n    &lt;p&gt;\n        &lt;label for=\"&lt;?php echo $this-&gt;get_field_id('postal_code'); ?&gt;\"&gt;&lt;?php _e('Postal code:', 'txtdomain'); ?&gt;&lt;\/label&gt;\n        &lt;input type=\"text\" class=\"widefat\" id=\"&lt;?php echo esc_attr($this-&gt;get_field_id('postal_code')); ?&gt;\" name=\"&lt;?php echo esc_attr($this-&gt;get_field_name('postal_code')); ?&gt;\" value=\"&lt;?php echo esc_attr($instance['postal_code']); ?&gt;\" \/&gt;\n    &lt;\/p&gt;\n    &lt;p&gt;\n        &lt;label for=\"&lt;?php echo $this-&gt;get_field_id('postal_city'); ?&gt;\"&gt;&lt;?php _e('City:', 'txtdomain'); ?&gt;&lt;\/label&gt;\n        &lt;input type=\"text\" class=\"widefat\" id=\"&lt;?php echo esc_attr($this-&gt;get_field_id('postal_city')); ?&gt;\" name=\"&lt;?php echo esc_attr($this-&gt;get_field_name('postal_city')); ?&gt;\" value=\"&lt;?php echo esc_attr($instance['postal_city']); ?&gt;\" \/&gt;\n    &lt;\/p&gt;\n    &lt;p&gt;\n        &lt;label for=\"&lt;?php echo $this-&gt;get_field_id('email_address'); ?&gt;\"&gt;&lt;?php _e('E-mail address:', 'txtdomain'); ?&gt;&lt;\/label&gt;\n        &lt;input type=\"text\" class=\"widefat\" id=\"&lt;?php echo esc_attr($this-&gt;get_field_id('email_address')); ?&gt;\" name=\"&lt;?php echo esc_attr($this-&gt;get_field_name('email_address')); ?&gt;\" value=\"&lt;?php echo esc_attr($instance['email_address']); ?&gt;\" \/&gt;\n    &lt;\/p&gt;\n    &lt;p&gt;\n        &lt;label for=\"&lt;?php echo $this-&gt;get_field_id('phone_number'); ?&gt;\"&gt;&lt;?php _e('Phone number:', 'txtdomain'); ?&gt;&lt;\/label&gt;\n        &lt;input type=\"text\" class=\"widefat\" id=\"&lt;?php echo esc_attr($this-&gt;get_field_id('phone_number')); ?&gt;\" name=\"&lt;?php echo esc_attr($this-&gt;get_field_name('phone_number')); ?&gt;\" value=\"&lt;?php echo esc_attr($instance['phone_number']); ?&gt;\" \/&gt;\n    &lt;\/p&gt;\n    &lt;?php\n}<\/code><\/pre>\n<p>Si vous ajoutez votre widget dans une zone de widget disponible, il devrait ressembler \u00e0 ceci\u00a0:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152019-61e4d2d64b664.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152019-61e4d2d64b664.png\" alt=\"Tutoriel\u00a0: Cr\u00e9er un widget de microdonn\u00e9es pour votre entreprise dans WordPress\" ><\/a><\/p>\n<h3>La fonction mise \u00e0 jour()<\/h3>\n<p>La <code>update()<\/code>fonction est charg\u00e9e de sauvegarder r\u00e9ellement vos valeurs saisies dans admin. Malheureusement, WordPress ne le fait pas automatiquement pour vous. Fournis dans cette fonction sont deux param\u00e8tres\u00a0; g\u00e9n\u00e9ralement nomm\u00e9 <code>$new_instance<\/code>et <code>$old_instance<\/code>. Dans le premier param\u00e8tre, <code>$new_instance<\/code>, vous trouverez toutes les valeurs qui ont \u00e9t\u00e9 soumises, et dans le second, <code>$old_instance<\/code>, vous trouverez les valeurs actuellement enregistr\u00e9es dans la base de donn\u00e9es. Cela vous permet de faire des comparaisons intelligentes si n\u00e9cessaire.<\/p>\n<p>Habituellement, vous cr\u00e9ez simplement un nouveau tableau de tous vos param\u00e8tres de widget et enregistrez tout ce qui est d\u00e9fini \u00e0 l&rsquo;int\u00e9rieur <code>$new_instance<\/code>. Nous nous occupons \u00e9galement de certaines d\u00e9sinfections. Enfin, nous renvoyons simplement ce tableau, qui indiquera \u00e0 WordPress ce qu&rsquo;il faut enregistrer.<\/p>\n<pre><code>\/\/ Responsible for saving settings in admin\npublic function update($new_instance, $old_instance) {\n    $instance = [];\n    $instance['legal_name'] = (!empty($new_instance['legal_name']))? strip_tags($new_instance['legal_name']): '';\n    $instance['vat_id'] = (!empty($new_instance['vat_id']))? strip_tags($new_instance['vat_id']): '';\n    $instance['street_address'] = (!empty($new_instance['street_address']))? strip_tags($new_instance['street_address']): '';\n    $instance['postal_code'] = (!empty($new_instance['postal_code']))? strip_tags($new_instance['postal_code']): '';\n    $instance['postal_city'] = (!empty($new_instance['postal_city']))? strip_tags($new_instance['postal_city']): '';\n    $instance['email_address'] = (!empty($new_instance['email_address']))? strip_tags($new_instance['email_address']): '';\n    $instance['phone_number'] = (!empty($new_instance['phone_number']))? strip_tags($new_instance['phone_number']): '';\n    return $instance;\n}<\/code><\/pre>\n<p>Vous pouvez maintenant tester votre widget si vous le souhaitez et v\u00e9rifier que vos valeurs saisies sont enregistr\u00e9es. Et si vous vous souvenez de d\u00e9finir <code>value<\/code>correctement l&rsquo;attribut dans <code>form()<\/code>, lorsque vous enregistrez et appuyez sur Actualiser, les valeurs doivent \u00eatre conserv\u00e9es. Super! Passons maintenant \u00e0 la derni\u00e8re \u00e9tape, et certes la plus amusante, \u00e0 savoir la sortie du bit frontal.<\/p>\n<h3>La fonction widget()<\/h3>\n<p>La <code>widget()<\/code>fonction est responsable de la sortie de votre widget en frontend. Nous aurons deux arguments pour la fonction\u00a0; premi\u00e8rement un tableau avec des informations utiles telles que les wrappers de zone de widget d\u00e9finis du th\u00e8me, et deuxi\u00e8mement vos valeurs de param\u00e8tres de widget enregistr\u00e9es.<\/p>\n<p>La sortie de votre widget doit toujours commencer par echoing <code>$args['before_widget']<\/code>et toujours se terminer par echoing <code>$args['after_widget']<\/code>. Cela garantit que votre widget est envelopp\u00e9 dans les m\u00eames wrappers HTML de widget que ceux d\u00e9finis par le th\u00e8me. Sur les m\u00eames pistes, vous pouvez faire \u00e9cho <code>$args['before_title']<\/code>et <code>$args['after_title']<\/code>pour g\u00e9n\u00e9rer des wrappers HTML corrects autour du titre du widget. Nous n&rsquo;avons pas de v\u00e9ritable titre de widget en soi, mais nous allons envelopper le nom l\u00e9gal de l&rsquo;entreprise en tant que titre de widget.<\/p>\n<p>Sinon, vous obtenez vos valeurs enregistr\u00e9es en r\u00e9f\u00e9ren\u00e7ant le deuxi\u00e8me argument, <code>$instance<\/code>, par vos noms de cl\u00e9 d\u00e9finis dans <code>form()<\/code>et <code>update()<\/code>. Il est recommand\u00e9 de n&rsquo;afficher que les param\u00e8tres qui ont \u00e9t\u00e9 d\u00e9finis et d&rsquo;ignorer ceux qui sont vides.<\/p>\n<p>\u00c9tant donn\u00e9 que nous produisons \u00e9galement des microdonn\u00e9es, nous devons ajouter les propri\u00e9t\u00e9s correspondantes en suivant les r\u00e8gles de schema.org.<\/p>\n<p>C&rsquo;est \u00e0 vous de d\u00e9cider comment vous voulez afficher votre widget\u00a0; vous pourriez probablement envisager d&rsquo;ajouter plus de wrappers HTML pour un style plus facile.<\/p>\n<pre><code>\/\/ Responsible for outputting the widget in frontend\npublic function widget($args, $instance) {\n    echo $args['before_widget'];\n\u00a0\n    ?&gt;&lt;div itemscope itemtype=\"https:\/\/schema.org\/LocalBusiness\"&gt;&lt;?php\n\u00a0\n    if (!empty($instance['legal_name'])) {\n        echo $args['before_title'];\n        ?&gt;&lt;span itemprop=\"legalName\"&gt;&lt;?php echo $instance['legal_name']; ?&gt;&lt;\/span&gt;&lt;?php\n\u00a0\n        echo $args['after_title'];\n    }\n\u00a0\n    if (!empty($instance['vat_id'])) {\n        ?&gt;&lt;span itemprop=\"vatID\" class=\"business-vatid\"&gt;&lt;?php printf(__('Vat: %s', 'txtdomain'), $instance['vat_id']); ?&gt;&lt;\/span&gt;&lt;?php\n    }\n\u00a0\n    if (!empty($instance['street_address'])) {\n        ?&gt;&lt;div itemprop=\"address\" itemscope itemtype=\"https:\/\/schema.org\/PostalAddress\" class=\"business-address\"&gt;&lt;?php\n\u00a0\n            ?&gt;&lt;span itemprop=\"streetAddress\"&gt;&lt;?php echo $instance['street_address']; ?&gt;&lt;\/span&gt;&lt;?php\n\u00a0\n            if (!empty($instance['postal_code'])) {\n                ?&gt;&lt;span itemprop=\"postalCode\"&gt;&lt;?php echo $instance['postal_code']; ?&gt;&lt;\/span&gt;&lt;?php\n            }\n            if (!empty($instance['postal_city'])) {\n                ?&gt;&lt;span itemprop=\"addressLocality\"&gt;&lt;?php echo $instance['postal_city']; ?&gt;&lt;\/span&gt;&lt;?php\n            }               \n\u00a0\n        ?&gt;&lt;\/div&gt;&lt;?php\n    }\n\u00a0\n    if (!empty($instance['email_address'])) {\n        ?&gt;&lt;a href=\"mailto:&lt;?php echo $instance['email_address']; ?&gt;\" title=\"&lt;?php _e('Send email', 'txtdomain'); ?&gt;\" class=\"business-email\"&gt;\n            &lt;span itemprop=\"email\"&gt;&lt;?php echo $instance['email_address']; ?&gt;&lt;\/span&gt;\n        &lt;\/a&gt;&lt;?php\n    }\n\u00a0\n    if (!empty($instance['phone_number'])) {\n        ?&gt;&lt;a href=\"tel:&lt;?php echo $instance['phone_number']; ?&gt;\" title=\"&lt;?php _e('Call us', 'txtdomain'); ?&gt;\" class=\"business-phone\"&gt;\n            &lt;span itemprop=\"telephone\"&gt;&lt;?php echo $instance['phone_number']; ?&gt;&lt;\/span&gt;\n        &lt;\/a&gt;&lt;?php\n    }\n\u00a0\n    ?&gt;&lt;\/div&gt;&lt;?php\n\u00a0\n    echo $args['after_widget'];\n}<\/code><\/pre>\n<p>Personnalisez la sortie, ajoutez du style et c&rsquo;est tout\u00a0!<\/p>\n<p>Pour votre information\u00a0: votre widget obtiendra le nom de la classe d&#8217;emballage &quot;<code>widget_&lt;base ID&gt;<\/code>&quot; (l&rsquo;ID de base est celui que vous avez fourni dans le constructeur). Dans notre cas, notre widget obtiendra la classe &quot; <code>widget_local_business<\/code>&quot;. Cela pourrait vous aider \u00e0 ajouter un style cibl\u00e9.<\/p>\n<h2>Conclusion et code final<\/h2>\n<p>Dans ce didacticiel, nous avons appris \u00e0 cr\u00e9er un widget personnalis\u00e9 et \u00e0 rendre une sortie au format Microdata \u00e0 partir de ses param\u00e8tres. Vous devriez pouvoir cr\u00e9er vos propres widgets, en suivant les bases d&rsquo;une classe de widgets\u00a0!<\/p>\n<p>Pour r\u00e9f\u00e9rence, voici le code complet, tous ensemble.<\/p>\n<pre><code>add_action('widgets_init', function() {\n    register_widget('LocalBusiness');\n});\n\u00a0\nclass LocalBusiness extends WP_Widget {\n\u00a0\n    \/\/ Initialize your widget in the class constructor\n    public function __construct() {\n        $widget_ops = [\n            'description' =&gt; __('Outputs business information with Microdata', 'txtdomain')\n        ];\n        parent::__construct('local_business', __('Local Business Information', 'txtdomain'), $widget_ops);\n    }\n\u00a0\n    \/\/ Responsible for outputting the widget in frontend\n    public function widget($args, $instance) {\n        echo $args['before_widget'];\n\u00a0\n        ?&gt;&lt;div itemscope itemtype=\"https:\/\/schema.org\/LocalBusiness\"&gt;&lt;?php\n\u00a0\n        if (!empty($instance['legal_name'])) {\n            echo $args['before_title'];\n            ?&gt;&lt;span itemprop=\"legalName\"&gt;&lt;?php echo $instance['legal_name']; ?&gt;&lt;\/span&gt;&lt;?php\n\u00a0\n            echo $args['after_title'];\n        }\n\u00a0\n        if (!empty($instance['vat_id'])) {\n            ?&gt;&lt;span itemprop=\"vatID\" class=\"business-vatid\"&gt;&lt;?php printf(__('Vat: %s', 'txtdomain'), $instance['vat_id']); ?&gt;&lt;\/span&gt;&lt;?php\n        }\n\u00a0\n        if (!empty($instance['street_address'])) {\n            ?&gt;&lt;div itemprop=\"address\" itemscope itemtype=\"https:\/\/schema.org\/PostalAddress\" class=\"business-address\"&gt;&lt;?php\n\u00a0\n                ?&gt;&lt;span itemprop=\"streetAddress\"&gt;&lt;?php echo $instance['street_address']; ?&gt;&lt;\/span&gt;&lt;?php\n\u00a0\n                if (!empty($instance['postal_code'])) {\n                    ?&gt;&lt;span itemprop=\"postalCode\"&gt;&lt;?php echo $instance['postal_code']; ?&gt;&lt;\/span&gt;&lt;?php\n                }\n                if (!empty($instance['postal_city'])) {\n                    ?&gt;&lt;span itemprop=\"addressLocality\"&gt;&lt;?php echo $instance['postal_city']; ?&gt;&lt;\/span&gt;&lt;?php\n                }               \n\u00a0\n            ?&gt;&lt;\/div&gt;&lt;?php\n        }\n\u00a0\n        if (!empty($instance['email_address'])) {\n            ?&gt;&lt;a href=\"mailto:&lt;?php echo $instance['email_address']; ?&gt;\" title=\"&lt;?php _e('Send email', 'txtdomain'); ?&gt;\" class=\"business-email\"&gt;\n                &lt;span itemprop=\"email\"&gt;&lt;?php echo $instance['email_address']; ?&gt;&lt;\/span&gt;\n            &lt;\/a&gt;&lt;?php\n        }\n\u00a0\n        if (!empty($instance['phone_number'])) {\n            ?&gt;&lt;a href=\"tel:&lt;?php echo $instance['phone_number']; ?&gt;\" title=\"&lt;?php _e('Call us', 'txtdomain'); ?&gt;\" class=\"business-phone\"&gt;\n                &lt;span itemprop=\"telephone\"&gt;&lt;?php echo $instance['phone_number']; ?&gt;&lt;\/span&gt;\n            &lt;\/a&gt;&lt;?php\n        }\n        ?&gt;&lt;\/div&gt;&lt;?php\n\u00a0\n        echo $args['after_widget'];\n    }\n\u00a0\n    \/\/ Responsible for outputting the widget settings in admin\n    public function form($instance) { \n        ?&gt;\n        &lt;p&gt;\n            &lt;label for=\"&lt;?php echo $this-&gt;get_field_id('legal_name'); ?&gt;\"&gt;&lt;?php _e('Legal name:', 'txtdomain'); ?&gt;&lt;\/label&gt;\n            &lt;input type=\"text\" class=\"widefat\" id=\"&lt;?php echo esc_attr($this-&gt;get_field_id('legal_name')); ?&gt;\" name=\"&lt;?php echo esc_attr($this-&gt;get_field_name('legal_name')); ?&gt;\" value=\"&lt;?php echo esc_attr($instance['legal_name']); ?&gt;\" \/&gt;\n        &lt;\/p&gt;\n        &lt;p&gt;\n            &lt;label for=\"&lt;?php echo $this-&gt;get_field_id('vat_id'); ?&gt;\"&gt;&lt;?php _e('Vat ID\/Organization number:', 'txtdomain'); ?&gt;&lt;\/label&gt;\n            &lt;input type=\"text\" class=\"widefat\" id=\"&lt;?php echo esc_attr($this-&gt;get_field_id('vat_id')); ?&gt;\" name=\"&lt;?php echo esc_attr($this-&gt;get_field_name('vat_id')); ?&gt;\" value=\"&lt;?php echo esc_attr($instance['vat_id']); ?&gt;\" \/&gt;\n        &lt;\/p&gt;\n        &lt;p&gt;\n            &lt;label for=\"&lt;?php echo $this-&gt;get_field_id('street_address'); ?&gt;\"&gt;&lt;?php _e('Street address:', 'txtdomain'); ?&gt;&lt;\/label&gt;\n            &lt;input type=\"text\" class=\"widefat\" id=\"&lt;?php echo esc_attr($this-&gt;get_field_id('street_address')); ?&gt;\" name=\"&lt;?php echo esc_attr($this-&gt;get_field_name('street_address')); ?&gt;\" value=\"&lt;?php echo esc_attr($instance['street_address']); ?&gt;\" \/&gt;\n        &lt;\/p&gt;\n        &lt;p&gt;\n            &lt;label for=\"&lt;?php echo $this-&gt;get_field_id('postal_code'); ?&gt;\"&gt;&lt;?php _e('Postal code:', 'txtdomain'); ?&gt;&lt;\/label&gt;\n            &lt;input type=\"text\" class=\"widefat\" id=\"&lt;?php echo esc_attr($this-&gt;get_field_id('postal_code')); ?&gt;\" name=\"&lt;?php echo esc_attr($this-&gt;get_field_name('postal_code')); ?&gt;\" value=\"&lt;?php echo esc_attr($instance['postal_code']); ?&gt;\" \/&gt;\n        &lt;\/p&gt;\n        &lt;p&gt;\n            &lt;label for=\"&lt;?php echo $this-&gt;get_field_id('postal_city'); ?&gt;\"&gt;&lt;?php _e('City:', 'txtdomain'); ?&gt;&lt;\/label&gt;\n            &lt;input type=\"text\" class=\"widefat\" id=\"&lt;?php echo esc_attr($this-&gt;get_field_id('postal_city')); ?&gt;\" name=\"&lt;?php echo esc_attr($this-&gt;get_field_name('postal_city')); ?&gt;\" value=\"&lt;?php echo esc_attr($instance['postal_city']); ?&gt;\" \/&gt;\n        &lt;\/p&gt;\n        &lt;p&gt;\n            &lt;label for=\"&lt;?php echo $this-&gt;get_field_id('email_address'); ?&gt;\"&gt;&lt;?php _e('E-mail address:', 'txtdomain'); ?&gt;&lt;\/label&gt;\n            &lt;input type=\"text\" class=\"widefat\" id=\"&lt;?php echo esc_attr($this-&gt;get_field_id('email_address')); ?&gt;\" name=\"&lt;?php echo esc_attr($this-&gt;get_field_name('email_address')); ?&gt;\" value=\"&lt;?php echo esc_attr($instance['email_address']); ?&gt;\" \/&gt;\n        &lt;\/p&gt;\n        &lt;p&gt;\n            &lt;label for=\"&lt;?php echo $this-&gt;get_field_id('phone_number'); ?&gt;\"&gt;&lt;?php _e('Phone number:', 'txtdomain'); ?&gt;&lt;\/label&gt;\n            &lt;input type=\"text\" class=\"widefat\" id=\"&lt;?php echo esc_attr($this-&gt;get_field_id('phone_number')); ?&gt;\" name=\"&lt;?php echo esc_attr($this-&gt;get_field_name('phone_number')); ?&gt;\" value=\"&lt;?php echo esc_attr($instance['phone_number']); ?&gt;\" \/&gt;\n        &lt;\/p&gt;\n        &lt;?php\n    }\n\u00a0\n    \/\/ Responsible for saving settings in admin\n    public function update($new_instance, $old_instance) {\n        $instance = [];\n        $instance['legal_name'] = (!empty($new_instance['legal_name']))? strip_tags($new_instance['legal_name']): '';\n        $instance['vat_id'] = (!empty($new_instance['vat_id']))? strip_tags($new_instance['vat_id']): '';\n        $instance['street_address'] = (!empty($new_instance['street_address']))? strip_tags($new_instance['street_address']): '';\n        $instance['postal_code'] = (!empty($new_instance['postal_code']))? strip_tags($new_instance['postal_code']): '';\n        $instance['postal_city'] = (!empty($new_instance['postal_city']))? strip_tags($new_instance['postal_city']): '';\n        $instance['email_address'] = (!empty($new_instance['email_address']))? strip_tags($new_instance['email_address']): '';\n        $instance['phone_number'] = (!empty($new_instance['phone_number']))? strip_tags($new_instance['phone_number']): '';\n        return $instance;\n    }\n}<\/code><\/pre>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Source d&rsquo;enregistrement:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ce didacticiel explique comment cr\u00e9er un widget personnalis\u00e9 qui g\u00e9n\u00e8re des informations commerciales avec un balisage de sch\u00e9ma de microdonn\u00e9es pour LocalBusiness.<\/p>\n","protected":false},"author":1,"featured_media":223853,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[983,893,893,717,717,983,832,993,993,1110,832,1004,1004,925,925,841,841,862,862],"tags":[1167],"class_list":["post-234258","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-affaire","category-code-2","category-developpeur","category-guide-pour-les-debutants","category-marketing-de-contenu","category-n-a","category-seo-4","category-sujets","category-tutoriels","category-wordpress-3","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/234258","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/comments?post=234258"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/234258\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/223853"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=234258"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=234258"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=234258"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}