{"id":909,"date":"2009-11-23T13:30:40","date_gmt":"2009-11-23T12:30:40","guid":{"rendered":"http:\/\/blogs.wittwer.fr\/whiler\/?p=909"},"modified":"2023-03-12T15:06:16","modified_gmt":"2023-03-12T14:06:16","slug":"exemple-complet-extension-wordpress","status":"publish","type":"post","link":"https:\/\/blogs.wittwer.fr\/whiler\/2009\/11\/23\/exemple-complet-extension-wordpress\/","title":{"rendered":"Exemple concret &#038; complet d\u2019impl\u00e9mentation d\u2019une extension WordPress"},"content":{"rendered":"<p>Dans cet article, je vous propose de voir comment coder une nouvelle extension WordPress, en partant de rien&#8230;<\/p>\n<p>Cette extension pourra elle-m\u00eame servir de base pour la cr\u00e9ation de nouvelles extensions. Elle met en \u0153uvre les fonctionnalit\u00e9s suivantes&nbsp;:<\/p>\n<ul>\n<li>D\u00e9tection d&rsquo;un mot-cl\u00e9 dans un article afin de le remplacer par une valeur choisie<\/li>\n<li>Interface multilingue<\/li>\n<li>Utilisation d&rsquo;options sp\u00e9cifiques \u00e0 l&rsquo;extension<\/li>\n<li>Interface pour le r\u00e9glage de ces options<\/li>\n<li>Ajout d&rsquo;un sous-menu pour acc\u00e9der \u00e0 la page de r\u00e9glages<\/li>\n<li>Ajout d&rsquo;une nouvelle action pour l&rsquo;extension dans la page des extensions install\u00e9es pour \u00e9galement acc\u00e9der \u00e0 la page des r\u00e9glages<\/li>\n<li>Utilisation de JavaScript<\/li>\n<\/ul>\n<p>Concr\u00e8tement, cot\u00e9 utilisateur final, le tag utilis\u00e9 sera remplac\u00e9 par un nombre al\u00e9atoire&#8230; Libre \u00e0 vous d&rsquo;imaginer des extensions pouvant faire des traitements bien plus cons\u00e9quents. <img src=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-includes\/images\/smilies\/skype\/\/wink.gif\" alt=\";)\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/> <\/p>\n<p>Cet exemple est fonctionnel, \u00e0 partir des version 2.7 (j&rsquo;utilise des options qui n&rsquo;existaient pas avant) de WordPress. Il fonctionne \u00e9galement avec WordPress MU.<\/p>\n<p>On commence par cr\u00e9er l&rsquo;arborescence&nbsp;:<\/p>\n<ol>\n<li>Dans le r\u00e9pertoire des extensions (<code class=\"codecolorer text dawn\"><span class=\"text\">&lt;WP&gt;\/wp-content\/plugins\/<\/span><\/code>), cr\u00e9ation d&rsquo;un r\u00e9pertoire qui h\u00e9bergera notre extension&nbsp;: <code class=\"codecolorer text dawn\"><span class=\"text\">random_number_generator<\/span><\/code><\/li>\n<li>Cr\u00e9ation d&rsquo;un sous-r\u00e9pertoire qui h\u00e9bergera nos fichiers de traduction&nbsp;: <code class=\"codecolorer text dawn\"><span class=\"text\">languages<\/span><\/code><\/li>\n<\/ol>\n<p>Puis on cr\u00e9e les premiers fichiers qui nous seront n\u00e9cessaires&nbsp;:<br \/>\nDans le r\u00e9pertoire de notre extension&nbsp;:<br \/>\n<center><code class=\"codecolorer text dawn\"><span class=\"text\">&lt;WP&gt;\/wp-content\/plugins\/random_number_generator\/<\/span><\/code><\/center><\/p>\n<ol start=\"3\">\n<li>cr\u00e9ation d&rsquo;un fichier texte dans lequel on va coder notre extension&nbsp;:<br \/>\n<center><code class=\"codecolorer text dawn\"><span class=\"text\">random_number_generator.php<\/span><\/code><br \/>\n (!!) Assurez-vous de ne pas laisser l&rsquo;extension <em>.txt<\/em><\/center><\/li>\n<li>cr\u00e9ation d&rsquo;un fichier texte dans lequel on mettra du JavaScript&nbsp;:<br \/>\n<center><code class=\"codecolorer text dawn\"><span class=\"text\">random_number_generator.js<\/span><\/code><\/li>\n<\/ol>\n<p>On a donc ceci&nbsp;:<br \/>\n<center><\/p>\n<div class=\"codecolorer-container text dawn\" style=\"overflow:auto;white-space:nowrap;width:480px;\"><div class=\"text codecolorer\">+---plugins<br \/>\n| &nbsp; |<br \/>\n| &nbsp; [...]<br \/>\n| &nbsp; |<br \/>\n| &nbsp; +---random_number_generator<br \/>\n| &nbsp; | &nbsp; | &nbsp; &nbsp;random_number_generator.js<br \/>\n| &nbsp; | &nbsp; | &nbsp; &nbsp;random_number_generator.php<br \/>\n| &nbsp; | &nbsp; |<br \/>\n| &nbsp; | &nbsp; \\---languages<br \/>\n| &nbsp; |<br \/>\n| &nbsp; [...]<\/div><\/div>\n<p><\/center><\/p>\n<p>Il ne reste plus qu&rsquo;\u00e0 coder toutes les fonctionnalit\u00e9s pr\u00e9c\u00e9demment cit\u00e9es&#8230;<br \/>\n<!--nextpage--><br \/>\nCommen\u00e7ons par le plus simple, dans le fichier JavaScript, j&rsquo;ajoute le code suivant qui va permettre d&rsquo;afficher ou de masquer un \u00e9l\u00e9ment HTML (une aide contextuelle dans la page des options que nous cr\u00e9erons ensuite)&nbsp;:<\/p>\n<div class=\"codecolorer-container javascript dawn\" style=\"overflow:auto;white-space:nowrap;width:480px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/><\/div><\/td><td><div class=\"javascript codecolorer\"><span class=\"co1\">\/\/ To show\/hide an additional help<\/span><br \/>\n<span class=\"kw1\">function<\/span> switchVisibility<span class=\"br0\">&#40;<\/span>eltId<span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; <span class=\"kw1\">var<\/span> elt <span class=\"sy0\">=<\/span> document.<span class=\"me1\">getElementById<\/span><span class=\"br0\">&#40;<\/span>eltId<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">if<\/span><span class=\"br0\">&#40;<\/span>elt.<span class=\"me1\">style<\/span>.<span class=\"me1\">display<\/span> <span class=\"sy0\">==<\/span> <span class=\"st0\">'block'<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; elt.<span class=\"me1\">style<\/span>.<span class=\"me1\">display<\/span> <span class=\"sy0\">=<\/span> <span class=\"st0\">'none'<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">else<\/span><br \/>\n&nbsp; &nbsp; elt.<span class=\"me1\">style<\/span>.<span class=\"me1\">display<\/span> <span class=\"sy0\">=<\/span> <span class=\"st0\">'block'<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>Puis le code PHP, dans son int\u00e9gralit\u00e9 et incluant de tr\u00e8s nombreux commentaires afin de d\u00e9tailler la raison de la pr\u00e9sence de telle ou telle ligne&nbsp;:<\/p>\n<div class=\"codecolorer-container php dawn\" style=\"overflow:auto;white-space:nowrap;width:480px;height:300px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/>11<br \/>12<br \/>13<br \/>14<br \/>15<br \/>16<br \/>17<br \/>18<br \/>19<br \/>20<br \/>21<br \/>22<br \/>23<br \/>24<br \/>25<br \/>26<br \/>27<br \/>28<br \/>29<br \/>30<br \/>31<br \/>32<br \/>33<br \/>34<br \/>35<br \/>36<br \/>37<br \/>38<br \/>39<br \/>40<br \/>41<br \/>42<br \/>43<br \/>44<br \/>45<br \/>46<br \/>47<br \/>48<br \/>49<br \/>50<br \/>51<br \/>52<br \/>53<br \/>54<br \/>55<br \/>56<br \/>57<br \/>58<br \/>59<br \/>60<br \/>61<br \/>62<br \/>63<br \/>64<br \/>65<br \/>66<br \/>67<br \/>68<br \/>69<br \/>70<br \/>71<br \/>72<br \/>73<br \/>74<br \/>75<br \/>76<br \/>77<br \/>78<br \/>79<br \/>80<br \/>81<br \/>82<br \/>83<br \/>84<br \/>85<br \/>86<br \/>87<br \/>88<br \/>89<br \/>90<br \/>91<br \/>92<br \/>93<br \/>94<br \/>95<br \/>96<br \/>97<br \/>98<br \/>99<br \/>100<br \/>101<br \/>102<br \/>103<br \/>104<br \/>105<br \/>106<br \/>107<br \/>108<br \/>109<br \/>110<br \/>111<br \/>112<br \/>113<br \/>114<br \/>115<br \/>116<br \/>117<br \/>118<br \/>119<br \/>120<br \/>121<br \/>122<br \/>123<br \/>124<br \/>125<br \/>126<br \/>127<br \/>128<br \/>129<br \/>130<br \/>131<br \/>132<br \/>133<br \/>134<br \/>135<br \/>136<br \/>137<br \/>138<br \/>139<br \/>140<br \/>141<br \/>142<br \/>143<br \/>144<br \/>145<br \/>146<br \/>147<br \/>148<br \/>149<br \/>150<br \/>151<br \/>152<br \/>153<br \/>154<br \/>155<br \/>156<br \/>157<br \/>158<br \/>159<br \/>160<br \/>161<br \/>162<br \/>163<br \/>164<br \/>165<br \/>166<br \/>167<br \/>168<br \/>169<br \/>170<br \/>171<br \/>172<br \/>173<br \/>174<br \/>175<br \/>176<br \/>177<br \/>178<br \/>179<br \/>180<br \/>181<br \/>182<br \/>183<br \/>184<br \/>185<br \/>186<br \/>187<br \/>188<br \/>189<br \/>190<br \/>191<br \/>192<br \/>193<br \/>194<br \/>195<br \/>196<br \/>197<br \/>198<br \/><\/div><\/td><td><div class=\"php codecolorer\"><span class=\"kw2\">&lt;?php<\/span><br \/>\n<span class=\"coMULTI\">\/*<br \/>\nPlugin Name: Random Number Generator<br \/>\nPlugin URI: https:\/\/blogs.wittwer.fr\/whiler\/<br \/>\nDescription: Generates a random number (for instance, useful to avoid browsers links cache)<br \/>\nVersion: 0.0.1<br \/>\nAuthor: Whiler<br \/>\nAuthor URI: https:\/\/william.wittwer.fr\/<br \/>\n*\/<\/span><br \/>\n<br \/>\n<span class=\"co1\">\/\/ Interdit les appels directs \u00e0 la page<\/span><br \/>\n<span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span><span class=\"sy0\">!<\/span><a href=\"http:\/\/www.php.net\/function_exists\"><span class=\"kw3\">function_exists<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;get_option&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; <span class=\"kw1\">echo<\/span> <span class=\"st_h\">'SIG'<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/ Silence is golden<\/span><br \/>\n&nbsp; <a href=\"http:\/\/www.php.net\/die\"><span class=\"kw3\">die<\/span><\/a><span class=\"sy0\">;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n<span class=\"co1\">\/\/ Cl\u00e9 utilis\u00e9e pour le tag \u00e0 d\u00e9tecter dans les articles\/pages\/commentaires [random-number] (not a constant... users can maybe update it in a future release)<\/span><br \/>\n<span class=\"re0\">$random_number_generator_key<\/span> <span class=\"sy0\">=<\/span> <span class=\"st_h\">'random-number'<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n<span class=\"co1\">\/\/ Charge le fichier de traduction s'il existe<\/span><br \/>\nload_plugin_textdomain<span class=\"br0\">&#40;<\/span><span class=\"st_h\">'random_number_generator'<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">''<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'\/random_number_generator\/languages'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n<span class=\"co4\">\/**<br \/>\n&nbsp;* Fonction qui r\u00e9cup\u00e8re et valide les param\u00e8tres avant de les renvoyer par r\u00e9f\u00e9rence<br \/>\n&nbsp;* @param integer &amp;$random_number_generator_from &nbsp; Valeur minimale<br \/>\n&nbsp;* @param integer &amp;$random_number_generator_to &nbsp; &nbsp; Valeur maximale<br \/>\n&nbsp;* @param string &nbsp;&amp;$random_number_generator_format Format utilis\u00e9 pour l'affichage<br \/>\n&nbsp;*\/<\/span><br \/>\n<span class=\"kw2\">function<\/span> get_data<span class=\"br0\">&#40;<\/span><span class=\"sy0\">&amp;<\/span><span class=\"re0\">$random_number_generator_from<\/span><span class=\"sy0\">,<\/span> <span class=\"sy0\">&amp;<\/span><span class=\"re0\">$random_number_generator_to<\/span><span class=\"sy0\">,<\/span> <span class=\"sy0\">&amp;<\/span><span class=\"re0\">$random_number_generator_format<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; <span class=\"co1\">\/\/ R\u00e9cup\u00e9ration des param\u00e8tres depuis les options de WP<\/span><br \/>\n&nbsp; <span class=\"re0\">$random_number_generator_from<\/span> &nbsp; <span class=\"sy0\">=<\/span> get_option<span class=\"br0\">&#40;<\/span><span class=\"st_h\">'random_number_generator_from'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; <span class=\"re0\">$random_number_generator_to<\/span> &nbsp; &nbsp; <span class=\"sy0\">=<\/span> get_option<span class=\"br0\">&#40;<\/span><span class=\"st_h\">'random_number_generator_to'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; <span class=\"re0\">$random_number_generator_format<\/span> <span class=\"sy0\">=<\/span> get_option<span class=\"br0\">&#40;<\/span><span class=\"st_h\">'random_number_generator_format'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; <span class=\"co1\">\/\/ Validation de la coh\u00e9rence des valeurs<\/span><br \/>\n&nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span><span class=\"re0\">$random_number_generator_from<\/span> <span class=\"sy0\">==<\/span> <span class=\"re0\">$random_number_generator_to<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">||<\/span> <span class=\"br0\">&#40;<\/span><span class=\"re0\">$random_number_generator_from<\/span> <span class=\"sy0\">&gt;<\/span> <span class=\"re0\">$random_number_generator_to<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"re0\">$random_number_generator_from<\/span> <span class=\"sy0\">=<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"re0\">$random_number_generator_to<\/span> &nbsp; <span class=\"sy0\">=<\/span> <a href=\"http:\/\/www.php.net\/mt_getrandmax\"><span class=\"kw3\">mt_getrandmax<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span><span class=\"re0\">$random_number_generator_format<\/span> <span class=\"sy0\">==<\/span> <span class=\"kw4\">null<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">||<\/span> <span class=\"br0\">&#40;<\/span><a href=\"http:\/\/www.php.net\/trim\"><span class=\"kw3\">trim<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"re0\">$random_number_generator_format<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">==<\/span> <span class=\"st_h\">''<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"re0\">$random_number_generator_format<\/span> <span class=\"sy0\">=<\/span> <span class=\"st0\">&quot;<span class=\"es6\">%x<\/span>&quot;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n<span class=\"co4\">\/**<br \/>\n&nbsp;* Fonction appel\u00e9e \u00e0 l'activation de l'extension<br \/>\n&nbsp;*\/<\/span><br \/>\n<span class=\"kw2\">function<\/span> random_number_generator_install<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; <span class=\"co1\">\/\/ Ajout des valeurs par d\u00e9faut<\/span><br \/>\n&nbsp; add_option<span class=\"br0\">&#40;<\/span><span class=\"st_h\">'random_number_generator_from'<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; add_option<span class=\"br0\">&#40;<\/span><span class=\"st_h\">'random_number_generator_to'<\/span><span class=\"sy0\">,<\/span> <a href=\"http:\/\/www.php.net\/mt_getrandmax\"><span class=\"kw3\">mt_getrandmax<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; add_option<span class=\"br0\">&#40;<\/span><span class=\"st_h\">'random_number_generator_format'<\/span><span class=\"sy0\">,<\/span> <span class=\"st0\">&quot;<span class=\"es6\">%x<\/span>&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n<span class=\"co4\">\/**<br \/>\n&nbsp;* Fonction affichant la page de r\u00e9glage des options<br \/>\n&nbsp;*\/<\/span><br \/>\n<span class=\"kw2\">function<\/span> random_number_generator_optionsPage<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; get_data<span class=\"br0\">&#40;<\/span><span class=\"re0\">$random_number_generator_from<\/span><span class=\"sy0\">,<\/span> <span class=\"re0\">$random_number_generator_to<\/span><span class=\"sy0\">,<\/span> <span class=\"re0\">$random_number_generator_format<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"sy1\">?&gt;<\/span><br \/>\n&lt;div class=&quot;wrap&quot;&gt;<br \/>\n&nbsp; &lt;h2&gt;<span class=\"kw2\">&lt;?php<\/span> <span class=\"coMULTI\">\/*Tr.: Settings page title \/ %s: Plugin name*\/<\/span> <a href=\"http:\/\/www.php.net\/printf\"><span class=\"kw3\">printf<\/span><\/a><span class=\"br0\">&#40;<\/span><a href=\"http:\/\/www.php.net\/str_replace\"><span class=\"kw3\">str_replace<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"st_h\">'%s'<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'&lt;strong&gt;%s&lt;\/strong&gt;'<\/span><span class=\"sy0\">,<\/span> __<span class=\"br0\">&#40;<\/span><span class=\"st_h\">'%s Options'<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'random_number_generator'<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'Random Number Generator'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"sy1\">?&gt;<\/span>&lt;\/h2&gt;<br \/>\n&nbsp; &lt;form method=&quot;post&quot; action=&quot;options.php&quot;&gt;<br \/>\n&nbsp; &nbsp; <span class=\"kw2\">&lt;?php<\/span> wp_nonce_field<span class=\"br0\">&#40;<\/span><span class=\"st_h\">'update-options'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"sy1\">?&gt;<\/span><br \/>\n&nbsp; &nbsp; &lt;table class=&quot;form-table&quot;&gt;<br \/>\n&nbsp; &nbsp; &nbsp; &lt;tr valign=&quot;top&quot;&gt;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &lt;th &nbsp;colspan=&quot;2&quot; scope=&quot;row&quot;&gt;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">&lt;?php<\/span> <span class=\"kw2\">global<\/span> <span class=\"re0\">$random_number_generator_key<\/span><span class=\"sy0\">;<\/span> <a href=\"http:\/\/www.php.net\/printf\"><span class=\"kw3\">printf<\/span><\/a><span class=\"br0\">&#40;<\/span>__<span class=\"br0\">&#40;<\/span><span class=\"st_h\">'Simply replace the tag %s by a random number.'<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'random_number_generator'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span> <span class=\"st0\">&quot;&lt;code&gt;[<span class=\"es4\">$random_number_generator_key<\/span>]&lt;\/code&gt;&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"sy1\">?&gt;<\/span>&lt;br\/&gt;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;span class=&quot;description&quot;&gt;<span class=\"kw2\">&lt;?php<\/span> <a href=\"http:\/\/www.php.net\/printf\"><span class=\"kw3\">printf<\/span><\/a><span class=\"br0\">&#40;<\/span>__<span class=\"br0\">&#40;<\/span><span class=\"st_h\">'Used to avoid browsers cache by inserting a random number. For instance, %1$s generates %2$s.'<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'random_number_generator'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span> <span class=\"st0\">&quot;&lt;code&gt;&amp;lt;a href=&quot;<\/span>https<span class=\"sy0\">:<\/span><span class=\"co1\">\/\/&quot;.__('my_url', 'random_number_generator').&quot;?[$random_number_generator_key]&quot;&amp;gt;&lt;\/code&gt;&quot;, &quot;&lt;code&gt;&amp;lt;a href=&quot;https:\/\/&quot;.__('my_url', 'random_number_generator').&quot;?&quot;.random_number_generator_shortcode_handler().&quot;&quot;&amp;gt;&lt;\/code&gt;&quot;); ?&gt;&lt;\/span&gt;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy0\">&lt;\/<\/span>th<span class=\"sy0\">&gt;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"sy0\">&lt;\/<\/span>tr<span class=\"sy0\">&gt;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"sy0\">&lt;<\/span>tr valign<span class=\"sy0\">=<\/span><span class=\"st0\">&quot;top&quot;<\/span><span class=\"sy0\">&gt;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy0\">&lt;<\/span>th scope<span class=\"sy0\">=<\/span><span class=\"st0\">&quot;row&quot;<\/span> style<span class=\"sy0\">=<\/span><span class=\"st0\">&quot;text-align: right;&quot;<\/span><span class=\"sy0\">&gt;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">&lt;?php<\/span> _e<span class=\"br0\">&#40;<\/span><span class=\"st_h\">'From:'<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'random_number_generator'<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy1\">?&gt;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &lt;\/th&gt;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &lt;td&gt;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;input type=&quot;text&quot; name=&quot;random_number_generator_from&quot; value=&quot;<span class=\"kw2\">&lt;?php<\/span> <span class=\"kw1\">echo<\/span> <span class=\"re0\">$random_number_generator_from<\/span><span class=\"sy0\">;<\/span> <span class=\"sy1\">?&gt;<\/span>&quot; \/&gt; <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;a class=&quot;button&quot; title=&quot;<span class=\"kw2\">&lt;?php<\/span> _e<span class=\"br0\">&#40;<\/span><span class=\"st_h\">'Dispay more details'<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'random_number_generator'<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy1\">?&gt;<\/span>&quot; onclick=&quot;javascript:switchVisibility('random_number_generator_from_help');&quot;&gt;<span class=\"kw2\">&lt;?php<\/span> <span class=\"coMULTI\">\/*Tr.: Button caption for help*\/<\/span> _e<span class=\"br0\">&#40;<\/span><span class=\"st_h\">'?'<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'random_number_generator'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"sy1\">?&gt;<\/span>&lt;\/a&gt; <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;span id=&quot;random_number_generator_from_help&quot; style=&quot;text-align: left; display: none;&quot;&gt; <span class=\"kw2\">&lt;?php<\/span> <a href=\"http:\/\/www.php.net\/printf\"><span class=\"kw3\">printf<\/span><\/a><span class=\"br0\">&#40;<\/span>__<span class=\"br0\">&#40;<\/span><span class=\"st_h\">'Lowest integer value to be returned (default: &lt;code&gt;%d&lt;\/code&gt;).'<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'random_number_generator'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"sy1\">?&gt;<\/span>&lt;\/span&gt;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &lt;\/td&gt;<br \/>\n&nbsp; &nbsp; &nbsp; &lt;\/tr&gt;<br \/>\n&nbsp; &nbsp; &nbsp; &lt;tr valign=&quot;top&quot;&gt;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &lt;th scope=&quot;row&quot; style=&quot;text-align: right;&quot;&gt;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">&lt;?php<\/span> _e<span class=\"br0\">&#40;<\/span><span class=\"st_h\">'To:'<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'random_number_generator'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"sy1\">?&gt;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &lt;\/th&gt;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &lt;td&gt;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;input type=&quot;text&quot; name=&quot;random_number_generator_to&quot; value=&quot;<span class=\"kw2\">&lt;?php<\/span> <span class=\"kw1\">echo<\/span> <span class=\"re0\">$random_number_generator_to<\/span><span class=\"sy0\">;<\/span> <span class=\"sy1\">?&gt;<\/span>&quot; \/&gt; <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;a class=&quot;button&quot; title=&quot;<span class=\"kw2\">&lt;?php<\/span> _e<span class=\"br0\">&#40;<\/span><span class=\"st_h\">'Dispay more details'<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'random_number_generator'<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy1\">?&gt;<\/span>&quot; onclick=&quot;javascript:switchVisibility('random_number_generator_to_help');&quot;&gt;<span class=\"kw2\">&lt;?php<\/span> _e<span class=\"br0\">&#40;<\/span><span class=\"st_h\">'?'<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'random_number_generator'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"sy1\">?&gt;<\/span>&lt;\/a&gt; <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;span id=&quot;random_number_generator_to_help&quot; style=&quot;text-align: left; display: none;&quot;&gt; <span class=\"kw2\">&lt;?php<\/span> <a href=\"http:\/\/www.php.net\/printf\"><span class=\"kw3\">printf<\/span><\/a><span class=\"br0\">&#40;<\/span>__<span class=\"br0\">&#40;<\/span><span class=\"st_h\">'Highest integer value to be returned (default: &lt;code&gt;%d&lt;\/code&gt;).'<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'random_number_generator'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span> <a href=\"http:\/\/www.php.net\/mt_getrandmax\"><span class=\"kw3\">mt_getrandmax<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"sy1\">?&gt;<\/span>&lt;\/span&gt;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &lt;\/td&gt;<br \/>\n&nbsp; &nbsp; &nbsp; &lt;\/tr&gt;<br \/>\n&nbsp; &nbsp; &nbsp; &lt;tr valign=&quot;top&quot;&gt;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &lt;th scope=&quot;row&quot; style=&quot;text-align: right;&quot;&gt;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">&lt;?php<\/span> _e<span class=\"br0\">&#40;<\/span><span class=\"st_h\">'Format:'<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'random_number_generator'<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy1\">?&gt;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &lt;\/th&gt;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &lt;td&gt;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;input type=&quot;text&quot; name=&quot;random_number_generator_format&quot; value=&quot;<span class=\"kw2\">&lt;?php<\/span> <span class=\"kw1\">echo<\/span> <span class=\"re0\">$random_number_generator_format<\/span><span class=\"sy0\">;<\/span> <span class=\"sy1\">?&gt;<\/span>&quot; \/&gt; <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;a class=&quot;button&quot; title=&quot;<span class=\"kw2\">&lt;?php<\/span> _e<span class=\"br0\">&#40;<\/span><span class=\"st_h\">'Dispay more details'<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'random_number_generator'<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy1\">?&gt;<\/span>&quot; onclick=&quot;javascript:switchVisibility('random_number_generator_format_help');&quot;&gt;<span class=\"kw2\">&lt;?php<\/span> _e<span class=\"br0\">&#40;<\/span><span class=\"st_h\">'?'<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'random_number_generator'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"sy1\">?&gt;<\/span>&lt;\/a&gt; <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;span id=&quot;random_number_generator_format_help&quot; style=&quot;text-align: left; display: none;&quot;&gt; <span class=\"kw2\">&lt;?php<\/span> <a href=\"http:\/\/www.php.net\/printf\"><span class=\"kw3\">printf<\/span><\/a><span class=\"br0\">&#40;<\/span>__<span class=\"br0\">&#40;<\/span><span class=\"st_h\">'Random number produced according to the formatting string above (default: &lt;code&gt;%s&lt;\/code&gt;).'<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'random_number_generator'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'%x'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"sy1\">?&gt;<\/span>&lt;br\/&gt;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">&lt;?php<\/span> <a href=\"http:\/\/www.php.net\/printf\"><span class=\"kw3\">printf<\/span><\/a><span class=\"br0\">&#40;<\/span>__<span class=\"br0\">&#40;<\/span><span class=\"st_h\">'See %s documentation for a description of format.'<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'random_number_generator'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'&lt;a href=&quot;'<\/span><span class=\"sy0\">.<\/span>__<span class=\"br0\">&#40;<\/span><span class=\"st_h\">'https:\/\/www.php.net\/manual\/en\/function.sprintf.php'<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'random_number_generator'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">.<\/span><span class=\"st_h\">'&quot; target&quot;_blank&quot; title=&quot;'<\/span><span class=\"sy0\">.<\/span>__<span class=\"br0\">&#40;<\/span><span class=\"st_h\">'Visit PHP: sprintf - Manual page'<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'random_number_generator'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">.<\/span><span class=\"st_h\">'&quot;&gt;sprintf()&lt;\/a&gt;'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"sy1\">?&gt;<\/span>&lt;\/span&gt;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &lt;\/td&gt;<br \/>\n&nbsp; &nbsp; &nbsp; &lt;\/tr&gt;<br \/>\n&nbsp; &nbsp; &lt;\/table&gt;<br \/>\n&nbsp; &nbsp; &lt;input type=&quot;hidden&quot; name=&quot;action&quot; value=&quot;update&quot; \/&gt;<br \/>\n&nbsp; &nbsp; &lt;input type=&quot;hidden&quot; name=&quot;page_options&quot; value=&quot;random_number_generator_from,random_number_generator_to,random_number_generator_format&quot; \/&gt;<br \/>\n&nbsp; &nbsp; <span class=\"kw2\">&lt;?php<\/span> settings_fields<span class=\"br0\">&#40;<\/span> <span class=\"st_h\">'random_number_generator'<\/span> <span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"sy1\">?&gt;<\/span><br \/>\n&nbsp; &nbsp; &lt;p class=&quot;submit&quot;&gt;<br \/>\n&nbsp; &nbsp; &nbsp; &lt;input type=&quot;submit&quot; class=&quot;button-primary&quot; value=&quot;<span class=\"kw2\">&lt;?php<\/span> _e<span class=\"br0\">&#40;<\/span><span class=\"st_h\">'Save Changes'<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'random_number_generator'<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy1\">?&gt;<\/span>&quot; \/&gt;<br \/>\n&nbsp; &nbsp; &lt;\/p&gt;<br \/>\n&nbsp; &lt;\/form&gt;<br \/>\n&lt;\/div&gt;<br \/>\n<span class=\"kw2\">&lt;?php<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n<span class=\"co4\">\/**<br \/>\n&nbsp;* Fonction ajoutant un lien pour la page des options dans la liste des extensions<br \/>\n&nbsp;* @param string $links Lien en cours<br \/>\n&nbsp;* @param string $file Extension en cours<br \/>\n&nbsp;* @return HTML<br \/>\n&nbsp;*\/<\/span><br \/>\n<span class=\"kw2\">function<\/span> random_number_generator_plugin_action_links<span class=\"br0\">&#40;<\/span><span class=\"re0\">$links<\/span><span class=\"sy0\">,<\/span> <span class=\"re0\">$file<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span><span class=\"re0\">$file<\/span> <span class=\"sy0\">==<\/span> plugin_basename<span class=\"br0\">&#40;<\/span><a href=\"http:\/\/www.php.net\/dirname\"><span class=\"kw3\">dirname<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"kw4\">__FILE__<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">.<\/span><span class=\"st_h\">'\/random_number_generator.php'<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/Le commentaire ci-dessous est extrait par Poedit pour \u00eatre mis dans les commentaires afin d'aider \u00e0 la traduction<\/span><br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/Tr.: Below the plugin name, in the plugin page<\/span><br \/>\n&nbsp; &nbsp; <span class=\"re0\">$settings_link<\/span> <span class=\"sy0\">=<\/span> <span class=\"st0\">&quot;&lt;a href='options-general.php?page=random_number_generator\/random_number_generator.php'&gt;&quot;<\/span><span class=\"sy0\">.<\/span>__<span class=\"br0\">&#40;<\/span><span class=\"st_h\">'Settings'<\/span><span class=\"sy0\">,<\/span><span class=\"st_h\">'random_number_generator'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">.<\/span><span class=\"st0\">&quot;&lt;\/a&gt;&quot;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <a href=\"http:\/\/www.php.net\/array_unshift\"><span class=\"kw3\">array_unshift<\/span><\/a><span class=\"br0\">&#40;<\/span> <span class=\"re0\">$links<\/span><span class=\"sy0\">,<\/span> <span class=\"re0\">$settings_link<\/span> <span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; <span class=\"kw1\">return<\/span> <span class=\"re0\">$links<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n<span class=\"co4\">\/**<br \/>\n&nbsp;* Fonction ajoutant les scripts n\u00e9cessaires dans les r\u00e9glages de l'extension<br \/>\n&nbsp;*\/<\/span><br \/>\n<span class=\"kw2\">function<\/span> random_number_generator_scripts<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; wp_enqueue_script<span class=\"br0\">&#40;<\/span><span class=\"st_h\">'random_number_generator_script1'<\/span><span class=\"sy0\">,<\/span> WP_PLUGIN_URL<span class=\"sy0\">.<\/span><span class=\"st_h\">'\/'<\/span><span class=\"sy0\">.<\/span><a href=\"http:\/\/www.php.net\/str_replace\"><span class=\"kw3\">str_replace<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;.php&quot;<\/span><span class=\"sy0\">,<\/span><span class=\"st0\">&quot;.js&quot;<\/span><span class=\"sy0\">,<\/span>plugin_basename<span class=\"br0\">&#40;<\/span><span class=\"kw4\">__FILE__<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"co1\">\/\/ &nbsp;wp_enqueue_script('random_number_generator_script2', 'my2ndScript', array('jquery', 'jquery-ui-tabs'));<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n<span class=\"co4\">\/**<br \/>\n&nbsp;* Fonction ajoutant un lien dans le menu R\u00e9glages pour la page des options de l'extension<br \/>\n&nbsp;*\/<\/span><br \/>\n<span class=\"kw2\">function<\/span> random_number_generator_settings_menu<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span><a href=\"http:\/\/www.php.net\/function_exists\"><span class=\"kw3\">function_exists<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"st_h\">'add_submenu_page'<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/Tr.: Settings menu plugin caption<\/span><br \/>\n&nbsp; &nbsp; <span class=\"re0\">$random_number_generator_settings_page<\/span> <span class=\"sy0\">=<\/span> add_submenu_page<span class=\"br0\">&#40;<\/span><span class=\"st_h\">'options-general.php'<\/span><span class=\"sy0\">,<\/span>__<span class=\"br0\">&#40;<\/span><span class=\"st_h\">'Rand#Gen.'<\/span><span class=\"sy0\">,<\/span><span class=\"st_h\">'random_number_generator'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span> __<span class=\"br0\">&#40;<\/span><span class=\"st_h\">'Rand#Gen.'<\/span><span class=\"sy0\">,<\/span><span class=\"st_h\">'random_number_generator'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span> <span class=\"st0\">&quot;install_plugins&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"kw4\">__FILE__<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'random_number_generator_optionsPage'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/ Ajoute les scripts JavaScript utilis\u00e9s par les pages d'administration de l'extension<\/span><br \/>\n&nbsp; &nbsp; add_action<span class=\"br0\">&#40;<\/span> <span class=\"st0\">&quot;admin_print_scripts-<span class=\"es4\">$random_number_generator_settings_page<\/span>&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'random_number_generator_scripts'<\/span> <span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n<span class=\"co4\">\/**<br \/>\n&nbsp;* Fonction qui r\u00e9pertorie les param\u00e8tres de l'extension et les m\u00e9thodes de callback(validation)<br \/>\n&nbsp;*\/<\/span><br \/>\n<span class=\"kw2\">function<\/span> register_random_number_generator_settings<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span> <span class=\"co1\">\/\/ whitelist options<\/span><br \/>\n&nbsp; register_setting<span class=\"br0\">&#40;<\/span> <span class=\"st_h\">'random_number_generator'<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'random_number_generator_from'<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'intval'<\/span> <span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/ Valeur enti\u00e8re uniquement<\/span><br \/>\n&nbsp; register_setting<span class=\"br0\">&#40;<\/span> <span class=\"st_h\">'random_number_generator'<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'random_number_generator_to'<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'intval'<\/span> <span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; register_setting<span class=\"br0\">&#40;<\/span> <span class=\"st_h\">'random_number_generator'<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'random_number_generator_format'<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'wp_filter_nohtml_kses'<\/span> <span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/ HTML interdit<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n<br \/>\n<span class=\"co4\">\/**<br \/>\n&nbsp;* Fonction renvoyant un chiffre al\u00e9atoire<br \/>\n&nbsp;* @return HTML<br \/>\n&nbsp;*\/<\/span><br \/>\n<span class=\"kw2\">function<\/span> random_number_generator_shortcode_handler<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; <span class=\"co1\">\/\/ $atts &nbsp; &nbsp;::= array of attributes<\/span><br \/>\n&nbsp; <span class=\"co1\">\/\/ $content ::= text within enclosing form of shortcode element<\/span><br \/>\n&nbsp; <span class=\"co1\">\/\/ $code &nbsp; &nbsp;::= the shortcode found, when == callback name<\/span><br \/>\n&nbsp; <span class=\"co1\">\/\/ examples: [my-shortcode]<\/span><br \/>\n&nbsp; <span class=\"co1\">\/\/ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [my-shortcode\/]<\/span><br \/>\n&nbsp; <span class=\"co1\">\/\/ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [my-shortcode foo='bar']<\/span><br \/>\n&nbsp; <span class=\"co1\">\/\/ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [my-shortcode foo='bar'\/]<\/span><br \/>\n&nbsp; <span class=\"co1\">\/\/ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [my-shortcode]content[\/my-shortcode]<\/span><br \/>\n&nbsp; <span class=\"co1\">\/\/ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [my-shortcode foo='bar']content[\/my-shortcode]<\/span><br \/>\n&nbsp; <br \/>\n&nbsp; <span class=\"co1\">\/\/ R\u00e9cup\u00e8re les diff\u00e9rentes options<\/span><br \/>\n&nbsp; get_data<span class=\"br0\">&#40;<\/span><span class=\"re0\">$random_number_generator_from<\/span><span class=\"sy0\">,<\/span> <span class=\"re0\">$random_number_generator_to<\/span><span class=\"sy0\">,<\/span> <span class=\"re0\">$random_number_generator_format<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; <span class=\"co1\">\/\/ G\u00e9n\u00e9ration al\u00e9atoire<\/span><br \/>\n&nbsp; <a href=\"http:\/\/www.php.net\/mt_srand\"><span class=\"kw3\">mt_srand<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; <span class=\"co1\">\/\/ Renvoie un nombre al\u00e9atoire<\/span><br \/>\n&nbsp; <span class=\"kw1\">return<\/span> <a href=\"http:\/\/www.php.net\/sprintf\"><span class=\"kw3\">sprintf<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"re0\">$random_number_generator_format<\/span><span class=\"sy0\">,<\/span> <a href=\"http:\/\/www.php.net\/mt_rand\"><span class=\"kw3\">mt_rand<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"re0\">$random_number_generator_from<\/span><span class=\"sy0\">,<\/span> <span class=\"re0\">$random_number_generator_to<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n<span class=\"co1\">\/\/ Ajout du hook pour d\u00e9tecter\/remplacer le mot-cl\u00e9 lorsqu'il est utilis\u00e9<\/span><br \/>\nadd_shortcode<span class=\"br0\">&#40;<\/span><span class=\"re0\">$random_number_generator_key<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'random_number_generator_shortcode_handler'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n<span class=\"co1\">\/\/ Si on est administrateur<\/span><br \/>\n<span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>is_admin<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; <span class=\"co1\">\/\/ M\u00e9thode \u00e0 appeler lors de l'activation de l'extension<\/span><br \/>\n&nbsp; register_activation_hook<span class=\"br0\">&#40;<\/span><span class=\"kw4\">__FILE__<\/span><span class=\"sy0\">,<\/span> <span class=\"st0\">&quot;random_number_generator_install&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; <span class=\"co1\">\/\/ M\u00e9thode \u00e0 appeler lors de la g\u00e9n\u00e9ration du menu d'admin<\/span><br \/>\n&nbsp; add_action<span class=\"br0\">&#40;<\/span><span class=\"st_h\">'admin_menu'<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'random_number_generator_settings_menu'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; <span class=\"co1\">\/\/ M\u00e9thode \u00e0 appeler lors de l'acc\u00e8s \u00e0 l'administration<\/span><br \/>\n&nbsp; add_action<span class=\"br0\">&#40;<\/span><span class=\"st_h\">'admin_init'<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'register_random_number_generator_settings'<\/span> <span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; <span class=\"co1\">\/\/ M\u00e9thode \u00e0 appeler lors de l'affichage des liens d'action sur la page des extensions install\u00e9es<\/span><br \/>\n&nbsp; add_filter<span class=\"br0\">&#40;<\/span><span class=\"st_h\">'plugin_action_links'<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'random_number_generator_plugin_action_links'<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">10<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">2<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n<span class=\"sy1\">?&gt;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>Si certaines parties restent floues, n&rsquo;h\u00e9sitez pas \u00e0 laisser un commentaire et j&rsquo;essayerai de vous r\u00e9pondre&#8230; <img src=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-includes\/images\/smilies\/skype\/\/smile.gif\" alt=\":)\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/> <\/p>\n<p>Une fois le tout sauvegard\u00e9, on peut aller dans l&rsquo;interface d&rsquo;administration de WordPress afin d&rsquo;activer notre extension qui devrait apparaitre dans la liste&nbsp;:<br \/>\n<div id=\"attachment_926\" style=\"width: 310px\" class=\"wp-caption aligncenter\"><a title=\"Nouvelle extension d\u00e9sactiv\u00e9e\" href=\"\/whiler\/wp-content\/uploads\/2009\/11\/rng_plugin_disabled.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-926\" src=\"\/whiler\/wp-content\/uploads\/2009\/11\/rng_plugin_disabled-300x23.jpg\" alt=\"Nouvelle extension d\u00e9sactiv\u00e9e\" title=\"Cliquer pour agrandir\" width=\"300\" height=\"23\" class=\"size-medium wp-image-926\" srcset=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/uploads\/2009\/11\/rng_plugin_disabled-300x23.jpg 300w, https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/uploads\/2009\/11\/rng_plugin_disabled.jpg 640w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-926\" class=\"wp-caption-text\">Nouvelle extension d\u00e9sactiv\u00e9e<\/p><\/div><br \/>\nOn clique alors sur le lien pour l&rsquo;activer afin d&rsquo;obtenir ceci&nbsp;:<br \/>\n<div id=\"attachment_927\" style=\"width: 310px\" class=\"wp-caption aligncenter\"><a title=\"Nouvelle extension activ\u00e9e\" href=\"\/whiler\/wp-content\/uploads\/2009\/11\/rng_plugins.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-927\" src=\"\/whiler\/wp-content\/uploads\/2009\/11\/rng_plugins-300x23.jpg\" alt=\"Nouvelle extension activ\u00e9e\" title=\"Cliquer pour agrandir\" width=\"300\" height=\"23\" class=\"size-medium wp-image-927\" srcset=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/uploads\/2009\/11\/rng_plugins-300x23.jpg 300w, https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/uploads\/2009\/11\/rng_plugins.jpg 640w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-927\" class=\"wp-caption-text\">Nouvelle extension activ\u00e9e<\/p><\/div><\/p>\n<p>On peut ensuite alors, au choix, allez la tester en ajoutant la balise dans un article, <code class=\"codecolorer text dawn\"><span class=\"text\">[random-number]<\/span><\/code>, pour constater le r\u00e9sultat obtenu (par exemple, 3b755321), ou naviguer dans les pages d&rsquo;administration pour voir le nouveau menu, dans <em>R\u00e9glages<\/em>, ou cliquer sur l&rsquo;action <em>Settings<\/em> pr\u00e9sente apr\u00e8s l&rsquo;activation de l&rsquo;extension.<\/p>\n<p>Si l&rsquo;on n&rsquo;a commis aucune erreur, tout devrait normalement fonctionner. Si une erreur a \u00e9t\u00e9 commise et emp\u00eache la compilation du script, l&rsquo;activation \u00e9chouera en indiquant un message d&rsquo;erreur.<\/p>\n<div id=\"attachment_934\" style=\"width: 310px\" class=\"wp-caption aligncenter\"><a href=\"\/whiler\/wp-content\/uploads\/2009\/11\/rng_options_english.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-934\" src=\"\/whiler\/wp-content\/uploads\/2009\/11\/rng_options_english-300x151.jpg\" alt=\"Options en anglais\" title=\"Options en anglais\" width=\"300\" height=\"151\" class=\"size-medium wp-image-934\" srcset=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/uploads\/2009\/11\/rng_options_english-300x151.jpg 300w, https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/uploads\/2009\/11\/rng_options_english.jpg 800w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-934\" class=\"wp-caption-text\">Options en anglais<\/p><\/div>\n<p>Cependant, l&rsquo;interface est en anglais&#8230;<br \/>\n<!--nextpage--><br \/>\nCependant, l&rsquo;interface est en anglais. C&rsquo;est logique puisque toutes les cha\u00eenes que j&rsquo;ai utilis\u00e9es le sont. Il est tr\u00e8s vivement conseill\u00e9 de coder ses cha\u00eenes en anglais et de fournir une traduction fran\u00e7aise si l&rsquo;on souhaite que son extension soit davantage traduite.<br \/>\nDans le code, on aura remarqu\u00e9 que toutes les cha\u00eenes \u00e0 traduire sont encapsul\u00e9es par une de ces deux m\u00e9thodes&nbsp;: <em>_e<\/em> ou <em>__<\/em>.<\/p>\n<ul>\n<li><em>__<\/em>&nbsp;: Renvoie la traduction d&rsquo;une cha\u00eene<\/li>\n<li><em>_e<\/em>&nbsp;: Affiche la traduction d&rsquo;une cha\u00eene<\/li>\n<\/ul>\n<p>Le second param\u00e8tre pr\u00e9cise que les traductions doivent \u00eatre uniquement recherch\u00e9es dans le domaine sp\u00e9cifi\u00e9. Si aucun domaine n&rsquo;est sp\u00e9cifi\u00e9, la traduction pourra \u00eatre \u00e9ventuellement trouv\u00e9e dans un autre fichier de traduction. Je pr\u00e9f\u00e8re sp\u00e9cifier syst\u00e9matiquement le domaine de l&rsquo;extension afin d&rsquo;avoir d&rsquo;\u00e9viter au maximum des traductions hors contextes.<\/p>\n<p>Afin d&rsquo;utiliser les traductions de son domaine, on a appel\u00e9 la fonction <em>load_plugin_textdomain<\/em> dans le script PHP, en sp\u00e9cifiant le nom du domaine et le chemin o\u00f9 trouver les fichier&nbsp;: <code class=\"codecolorer php dawn\"><span class=\"php\">load_plugin_textdomain<span class=\"br0\">&#40;<\/span><span class=\"st_h\">'random_number_generator'<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">''<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'\/random_number_generator\/languages'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/span><\/code><\/p>\n<p>Il ne reste plus qu&rsquo;\u00e0 g\u00e9n\u00e9rer les fichiers pour la traduction. Pour cela, je vais utiliser le logiciel Poedit. Vous pouvez consulter l&rsquo;<a href=\"\/whiler\/2009\/11\/01\/extensions-wordpress-francais\/3\/\">article<\/a> plus d\u00e9taill\u00e9 le concernant.<\/p>\n<ul>\n<li>J&rsquo;ex\u00e9cute Poedit, et cr\u00e9e un nouveau catalogue.<\/li>\n<li>Je sp\u00e9cifie le nom du projet, et les diverses m\u00e9tadonn\u00e9es.<\/li>\n<li>Dans le chemin de base, je sp\u00e9cifie le r\u00e9pertoire racine de mon extension.<\/li>\n<li>Dans les mots-cl\u00e9s, j&rsquo;ajoute les deux fonctions de traduction utilis\u00e9es, \u00e0 savoir, <em>__<\/em> et <em>_e<\/em>.<\/li>\n<li>J&rsquo;ai \u00e9galement modifi\u00e9 la configuration par d\u00e9faut de l&rsquo;analyseur PHP inclus dans Poedit pour extraire des commentaires pour les traducteurs, afin de leur facilit\u00e9 la t\u00e2che et lever toute ambiguit\u00e9. J&rsquo;ai simplement ajout\u00e9 un param\u00e8tre aux commandes de l&rsquo;analyseur&nbsp;: <em>xgettext &#8211;force-po <strong>&#8211;add-comments=Tr.:<\/strong> -o %o %C %K %F<\/em><\/li>\n<li>Je peux ainsi directement ajouter des commentaires pour les traducteurs&nbsp;:\n<div class=\"codecolorer-container php dawn\" style=\"overflow:auto;white-space:nowrap;width:480px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/><\/div><\/td><td><div class=\"php codecolorer\">&nbsp; &nbsp; <span class=\"co1\">\/\/Tr.: Below the plugin name, in the plugin page<\/span><br \/>\n&nbsp; &nbsp; <span class=\"re0\">$settings_link<\/span> <span class=\"sy0\">=<\/span> <span class=\"st0\">&quot;&lt;a href='options-general.php?page=random_number_generator\/random_number_generator.php'&gt;&quot;<\/span><span class=\"sy0\">.<\/span>__<span class=\"br0\">&#40;<\/span><span class=\"st_h\">'Settings'<\/span><span class=\"sy0\">,<\/span><span class=\"st_h\">'random_number_generator'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">.<\/span><span class=\"st0\">&quot;&lt;\/a&gt;&quot;<\/span><span class=\"sy0\">;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<\/li>\n<li>Je demande une mise \u00e0 jour depuis les sources afin d&rsquo;extraire les diff\u00e9rentes cha\u00eenes de mon script.<\/li>\n<li>Je sauvegarde ce fichier avec le nom <code class=\"codecolorer text dawn\"><span class=\"text\">default.pot<\/span><\/code>, dans le sous-r\u00e9pertoire <code class=\"codecolorer text dawn\"><span class=\"text\">languages<\/span><\/code> que l&rsquo;on avait sp\u00e9cifiquement cr\u00e9\u00e9 pour.<\/li>\n<li>Je le duplique en le renommant du nom de mon extension avec en plus la langue dans laquelle je vais le traduire&nbsp;: <code class=\"codecolorer text dawn\"><span class=\"text\">random_number_generator-fr_FR.po<\/span><\/code>.<\/li>\n<li>Puis j&rsquo;\u00e9dite ce nouveau fichier en traduisant les diff\u00e9rentes cha\u00eenes.<\/li>\n<li>Je sauvegarde. Poedit a g\u00e9n\u00e9r\u00e9 en plus le fichier <code class=\"codecolorer text dawn\"><span class=\"text\">random_number_generator-fr_FR.mo<\/span><\/code>. C&rsquo;est ce fichier qui sera utilis\u00e9 par WordPress lors de la traduction.<\/li>\n<\/ul>\n<p>Il ne reste plus qu&rsquo;\u00e0 retourner dans l&rsquo;interface d&rsquo;administration de WordPress pour constater que l&rsquo;extension est effectivement, cette fois-ci en fran\u00e7ais&nbsp;:<br \/>\n<div id=\"attachment_939\" style=\"width: 310px\" class=\"wp-caption aligncenter\"><a href=\"\/whiler\/wp-content\/uploads\/2009\/11\/rng_options.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-939\" src=\"\/whiler\/wp-content\/uploads\/2009\/11\/rng_options-300x103.jpg\" alt=\"Options de l&#039;extension en fran\u00e7ais\" title=\"Options de l&#039;extension en fran\u00e7ais\" width=\"300\" height=\"103\" class=\"size-medium wp-image-939\" srcset=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/uploads\/2009\/11\/rng_options-300x103.jpg 300w, https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/uploads\/2009\/11\/rng_options.jpg 800w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-939\" class=\"wp-caption-text\">Options de l'extension en fran\u00e7ais<\/p><\/div><\/p>\n<p>Vous pouvez t\u00e9l\u00e9charger l&rsquo;<a title=\"Cliquer pour t\u00e9l\u00e9charger les sources de l'extension Random Number Generator\" href=\"\/whiler\/wp-content\/uploads\/2009\/11\/random_number_generator.zip\">archive<\/a> qui contient l&rsquo;ensemble des fichiers de cet exemple.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dans cet article, je vous propose de voir comment coder une nouvelle extension WordPress, en partant de rien&#8230; Cette extension pourra elle-m\u00eame servir de base pour la cr\u00e9ation de nouvelles extensions. Elle met en \u0153uvre les fonctionnalit\u00e9s suivantes&nbsp;: D\u00e9tection d&rsquo;un mot-cl\u00e9 dans un article afin de le remplacer par une valeur choisie Interface multilingue Utilisation [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_links_to":"","_links_to_target":""},"categories":[6,9,11],"tags":[99,15,106,27,100,111,120,26,128,108,109,121,107],"class_list":["post-909","post","type-post","status-publish","format-standard","hentry","category-dev","category-php","category-web","tag-addons","tag-api","tag-blog","tag-coloration-syntaxique","tag-extensions","tag-html","tag-localisation","tag-plugin","tag-rng","tag-script","tag-translate","tag-unicode","tag-wordpress"],"_links":{"self":[{"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/posts\/909","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/comments?post=909"}],"version-history":[{"count":1,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/posts\/909\/revisions"}],"predecessor-version":[{"id":6399,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/posts\/909\/revisions\/6399"}],"wp:attachment":[{"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/media?parent=909"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/categories?post=909"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/tags?post=909"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}