{"id":2102,"date":"2012-02-27T08:57:44","date_gmt":"2012-02-27T07:57:44","guid":{"rendered":"https:\/\/www.creativejuiz.fr\/blog\/?p=2102"},"modified":"2015-01-18T16:12:07","modified_gmt":"2015-01-18T15:12:07","slug":"wordpress-transformer-code-caption-html5-figure-figcaption","status":"publish","type":"post","link":"https:\/\/www.creativejuiz.fr\/blog\/wordpress\/wordpress-transformer-code-caption-html5-figure-figcaption","title":{"rendered":"WordPress &#8211; Transformer le code d&rsquo;un [caption] pour obtenir du HTML5 avec figure et figcaption"},"content":{"rendered":"<p>WordPress propose dans ses outils de mise en page une mani\u00e8re d&rsquo;afficher vos l\u00e9gendes directement sous votre image. Une bonne solution pour afficher un court descriptif de votre photographie.<br \/>\nDans le cadre d&rsquo;un document en HTML5 (doctype par d\u00e9faut de WordPress depuis quelques versions maintenant) il peut \u00eatre int\u00e9ressant<!--more--> d&rsquo;utiliser autre chose que des simples <code class=\"element\">div<\/code> pour baliser le contenu.<\/p>\n<p>Justement, HTML5 pr\u00e9voit ce type de cas avec les \u00e9l\u00e9ments <code class=\"element\">figure<\/code> et <code class=\"element\">figcaption<\/code>. Je vous renvoie \u00e0 ce propos sur le tr\u00e8s bon <a href=\"http:\/\/www.alsacreations.com\/article\/lire\/1337-html5-elements-figure-et-figcaption.html\">article sur <code class=\"element\">figure<\/code> et <code class=\"element\">figcaption<\/code><\/a> de Okko sur Alsacr\u00e9ations.<\/p>\n<p>Nous allons donc simplement remplacer les <code class=\"element\">div<\/code> par des \u00e9l\u00e9ments dont la s\u00e9mantique est plus ad\u00e9quate. Pour cela nous allons utiliser le hook <code>img_caption_shortcode<\/code> qui permet d&rsquo;agir sur un shortcode enregistr\u00e9 par d\u00e9faut dans WordPress. <\/p>\n<pre class=\"code\"><code class=\"javascript\">add_filter('img_caption_shortcode', 'juiz_img_caption_shortcode_html5_compliant',10,3);\r\n\r\n\/**\r\n * Filtre sur le shortcode  pour un code \"HTML5 Compliant\"\r\n * @return text HTML d\u00e9crivant un contenu de type image\r\n **\/\r\nif ( !function_exists('juiz_img_caption_shortcode_html5_compliant')) {\r\n\tfunction juiz_img_caption_shortcode_html5_compliant($val, $attr, $content = null)\r\n\t{\r\n\t\textract(shortcode_atts(array(\r\n\t\t\t'id'\t=&gt; '',\r\n\t\t\t'align'\t=&gt; '',\r\n\t\t\t'width'\t=&gt; '',\r\n\t\t\t'caption' =&gt; ''\r\n\t\t), $attr));\r\n\r\n\t\tif ( &#0101;&#0109;pty ($caption) || 1 &gt; (int)$width )\r\n\t\t\treturn $val;\r\n\r\n\t\t$capid = '';\r\n\t\tif ( $id ) {\r\n\t\t\t$id = esc_attr($id);\r\n\t\t\t$capid = 'id=\"figcaption_'. $id . '\" ';\r\n\t\t\t$id = 'id=\"' . $id . '\" aria-labelledby=\"figcaption_' . $id . '\" ';\r\n\t\t}\r\n\r\n\t\treturn '&lt;figure ' . $id . 'class=\"wp-caption ' . esc_attr($align) . '\" style=\"width: '\r\n\t\t. (10 + (int) $width) . 'px\"&gt;' . do_shortcode( $content ) . '&lt;figcaption ' . $capid \r\n\t\t. 'class=\"wp-caption-text\"&gt;' . $caption . '&lt;\/figcaption&gt;&lt;\/figure&gt;';\r\n\t}\r\n} \/\/endif !function_exists<\/code><\/pre>\n<p>Nous avons globalement r\u00e9\u00e9crit le shortcode propos\u00e9 par WordPress.<\/p>\n<p>Ce shortcode, ins\u00e9r\u00e9 automatiquement par WordPress lorsque vous ajoutez une l\u00e9gende \u00e0 une photo, vous retournera d\u00e9sormais le code HTML5 suivant, avec un bout d&rsquo;ARIA pour y gouter :<\/p>\n<pre class=\"code\"><code class=\"html\">&lt;figure id=\"attachment-23\" aria-labelledby=\"figcaption_attachment-23\"\r\nclass=\"wp-caption alignright\" style=\"width: 210px\"&gt;\r\n\t&lt;img src=\"url-de-mon-image.jpg\" alt=\"\" \/&gt;\r\n\t&lt;figcaption id=\"figcaption_attachment-23\" \r\n\tclass=\"wp-caption-text\"&gt;\r\n\t\tTexte de description de l'image\r\n\t&lt;\/figcaption&gt;\r\n&lt;\/figure&gt;<\/code><\/pre>\n<p>D&rsquo;ailleurs ce code est directement pr\u00e9sent\u00e9 dans le <a href=\"http:\/\/codex.wordpress.org\/Function_Reference\/add_filter\" hreflang=\"en\">codex de WordPress<\/a> pour illustrer la fonction <code>add_filter<\/code>.<\/p>\n<p>Il est peut-\u00eatre possible d&rsquo;aller encore plus loin en utilisant les microformats. Je me penche sur la question et ne manquerai pas de vous tenir au jus.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>WordPress propose dans ses outils de mise en page une mani\u00e8re d&rsquo;afficher vos l\u00e9gendes directement sous votre image. Une bonne solution pour afficher un court descriptif de votre photographie. Dans le cadre d&rsquo;un document en HTML5 (doctype par d\u00e9faut de WordPress depuis quelques versions maintenant) il peut \u00eatre int\u00e9ressant<\/p>\n","protected":false},"author":4,"featured_media":2116,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_bluesky_dont_syndicate":"","_bluesky_syndication_accounts":"","_bluesky_syndication_text":"","footnotes":""},"categories":[13],"tags":[442,228,434,16,256,444,446],"coauthors":[597],"class_list":["post-2102","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-wordpress","tag-add_filter","tag-astuce","tag-hook","tag-html5","tag-image","tag-legende","tag-shortcode"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/posts\/2102","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/comments?post=2102"}],"version-history":[{"count":0,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/posts\/2102\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/media\/2116"}],"wp:attachment":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/media?parent=2102"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/categories?post=2102"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/tags?post=2102"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/coauthors?post=2102"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}