<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Axxcom</title>
	<atom:link href="http://axxcom.fr/feed/" rel="self" type="application/rss+xml" />
	<link>http://axxcom.fr</link>
	<description>CrÃ©ation et DÃ©veloppement de sites Internet</description>
	<lastBuildDate>Sun, 16 Dec 2012 13:45:11 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>A la dÃ©couverte de Genesis &#8211; Un framework pour WordPress</title>
		<link>http://axxcom.fr/blog/a-la-decouverte-de-genesis-un-framework-pour-wordpress/</link>
		<comments>http://axxcom.fr/blog/a-la-decouverte-de-genesis-un-framework-pour-wordpress/#comments</comments>
		<pubDate>Wed, 12 Dec 2012 17:00:24 +0000</pubDate>
		<dc:creator>daniel</dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[genesis]]></category>

		<guid isPermaLink="false">http://axxcom.fr/?p=791</guid>
		<description><![CDATA[Le dÃ©veloppement d'un thÃ¨me reprÃ©sente un travail consÃ©quent, pouvant devenir laborieux Ã  l'occasion, c'est pourquoi il est souvent plus rationnel de crÃ©er un thÃ¨me enfant en partant d'un thÃ¨me principal dont la structure nous convient. Si nous sommes amenÃ©s Ã  crÃ©er rÃ©guliÃ¨rement de nouveaux thÃ¨mes, il y a cependant une autre solution, c'est l'utilisation d'un [...]]]></description>
				<content:encoded><![CDATA[<p>Le dÃ©veloppement d'un thÃ¨me reprÃ©sente un travail consÃ©quent, pouvant devenir laborieux Ã  l'occasion, c'est pourquoi il est souvent plus rationnel de crÃ©er un thÃ¨me enfant en partant d'un thÃ¨me principal dont la structure nous convient.<br>
Si nous sommes amenÃ©s Ã  crÃ©er rÃ©guliÃ¨rement de nouveaux thÃ¨mes, il y a cependant une autre solution, c'est l'utilisation d'un "framework".</p>
<p>Cette technique va nous permettre de gagner beaucoup de temps en mettant Ã  notre disposition une structure Ã©prouvÃ©e et optimisÃ©e, suffisamment souple pour que nous puissions l'adapter facilement Ã  nos besoins.<br>
En effet, nul besoin de rÃ©inventer continuellement la roue, le framework va nous fournir toutes les "briques" nÃ©cessaires, nous n'aurons plus qu'Ã  adapter et assembler en fonction du rÃ©sultat voulu, en ayant l'avantage d'utiliser toujours la mÃªme structure de base.</p>
<p>J'ai donc choisi de vous prÃ©senter Genesis Ã©ditÃ© par StudioPress, qui est un framework largement rÃ©pandu, performant et ayant fait ses preuves.<br>
Genesis va mettre Ã  notre disposition un panneau d'options plutÃ´t complet qui nous permettra de rÃ©gler de nombreux paramÃ¨tres, tels que la mise en page, le fil d'ariane,Â  les paramÃ¨tres des commentaires, les images Ã  la une, etc...</p>
<br>
<div>

<div id="attachment_789" class="wp-caption aligncenter" style="width: 331px"><a class="lightbox" href="http://axxcom.fr/wp-content/uploads/2012/12/screenshot_17.png"><img src="http://axxcom.fr/wp-content/uploads/2012/12/screenshot_17.png" alt="Options Genesis" title="Options Genesis" width="321" height="348" class="size-full wp-image-789" /></a><p class="wp-caption-text">Panneau d'options (partiel) et Genesis Toolbar Extras</p></div>
</div>
<br>
<p>Il se prÃ©sente tout simplement comme un banal thÃ¨me, sauf qu'ici, il n'est pas conÃ§u pour Ãªtre utilisÃ© tel quel.Â  En effet, Ce framework est basÃ© sur le principe de l'hÃ©ritage et du thÃ¨me parent/enfant, il s'utilise donc par l'intermÃ©diaire d'un thÃ¨me enfant, mais avec quelques particularitÃ©s qui vont faire toute la diffÃ©rence.<br>
En effet, Genesis est truffÃ© de points d'ancrage, les fameux "Hooks" de WordPress, qui vont permettre d'intervenir pratiquement Ã  tous les niveaux, et ce sans toucher au thÃ¨me parent, comme le veut le principe.</p>
<p>Si vous Ãªtes dÃ©butant et que vous n'y connaissez rien ou pas grand-chose, cet outil ne vous aidera pas beaucoup.Â  En effet, Genesis ne dispose pas d'interface utilisateur et donc, pas de "drag and drop" et autre clickodrome...<br>Ici, tout se fait dans les fichiers en codant en css ou php, et il faut tout de mÃªme connaitre "a minima".
Par contre, si vous Ãªtes un tant soi peu Ã  l'aise avec le code, une fois la nÃ©cessaire pÃ©riode de prise en mains passÃ©e, vous pourrez rÃ©aliser vos travaux aisÃ©ment sans toujours rÃ©inventer la roue, et en rÃ©duisant de faÃ§on consÃ©quente vos temps de dÃ©veloppement tout en conservant un excellent niveau de qualitÃ©.<br>
On pourra en outre trouver sur le site de l'Ã©diteur quelques thÃ¨mes "starter" (gratuits) qui vous mettrons le pied Ã  l'Ã©trier en vous Ã©vitant de partir de zÃ©ro.</p>

<p>En matiÃ¨re de documentation et d'assistance, on trouvera chez Studiopress un forum permettant d'Ã©changer, ainsi qu'une bibliothÃ¨que de snippets, des tutoriaux, etc.
Il existe Ã©galement une vaste communautÃ© qui rÃ©dige rÃ©guliÃ¨rement des billets et des tutoriaux sur le sujet.<br>
L'inconvÃ©nient (tout relatif) est que tout celÃ  est dans la langue de shakespeare.  A noter que l'ensemble du framework se bascule trÃ¨s facilement en franÃ§ais Ã  l'aide d'un plugin dÃ©diÃ©.<br>
Afin de s'y retrouver facilement, GrÃ©goire Noyelle met Ã©galement Ã  disposition sur son blog une <a href="http://www.gregoirenoyelle.com/formations/liens/studiopress-genesis-basiques/">liste des ressources</a> qui pourra nous faciliter la vie.</p>

<p>Genesis n'est pas gratuit, il est disponible sur le site de l'Ã©diteur Studiopress au prix de 59,95 dollars (prix du framework seul), ce qui reprÃ©sente Ã  peine plus qu'un thÃ¨me "premium", investissement qu'il faut bien entendu Ã©valuer.Â  En effet, celÃ  Ã  surtout un sens si on est amenÃ© Ã  dÃ©velopper rÃ©guliÃ¨rement des thÃ¨mes, mais dans ce cas, je pense que cela en vaut la peine.<br>
On trouvera Ã©galement, toujours chez l'Ã©diteur, un choix de thÃ¨mes enfants prÃªts Ã  l'usage en cas de besoin urgent, Ã§a peux toujours servir, mais fait grimper la note.</p>

<p>Pour conclure, je vous dirai que j'utilise ce framework depuis quelques temps dÃ©jÃ , et, vous l'aurez compris, je n'en pense que du bien (mais ca n'engage que moi).Â  La documentation en anglais n'est pas rÃ©ellement un handicap, quant on dÃ©veloppe, on a au moins quelques notions et celÃ  est bien suffisant pour arriver Ã  se dÃ©brouiller.</p>

<p>Le blog est ouvert si vous aussi avez dÃ©jÃ  utilisÃ© Genesis (ou un autre framework) et que vous souhaitez faire un retour d'expÃ©rience.Â  De mÃªme toutes les remarques et les questions seront les bienvenues (je suis accueillantÂ  ;-)Â  ).</p>

<p>Liens utiles<br>
<a href="http://www.studiopress.com/">Le site de StudioPress</a><br>
<a href="http://www.gregoirenoyelle.com/formations/liens/studiopress-genesis-basiques/">La liste des ressources de GrÃ©goire Noyelle</a>
</p>

<h2>Vous voulez en savoirplus sur WordPress ?</h2>
<p>
Cet article fait partie dâ€™une chaÃ®ne dâ€™articles sur WordPress entre plusieurs Blogueurs, je vous invite a dÃ©couvrir leurs articles respectifs grÃ¢ce aux liens ci dessous :</p>

<ul>
	<li><a href="http://4h18.com/la-chaine-wordpress/">4h18 : La chaÃ®ne WordPress</a></li>
	<li><a href="http://wpformation.com/wordpress-301-domaine/">wpformation : WordPress 301 et domaines</a></li>
	<li><a href="http://www.jguiss.com/2012/12/question-reponse-wordpress-theme/">Jguiss : CrÃ©er un site de question-rÃ©ponse avec WordPress</a></li>
        <li><a href="http://guillaume-dardier.fr/wordpress-et-les-tpe.html">Guillaume Dardier : WordPress et les TPE</a></li>
	<li><a href="http://www.boiteaweb.fr/sf-admin-bar-tools-v2-5514.html">Julio : SF admin bar tools</a></li>
        <li><a href="http://blog.thibautparent.com/12-12-2012/arnaques-themes-gratuits-wordpress">Tipi blog : Les arnaques des themes gratuits WordPress</a></li>
	<li><a href="http://isabelle-ostermann.fr/2012/12/09/mon-theme-wordpress-prefere/">Isabelle : Mon theme WordPress prÃ©fÃ©rÃ©</a></li>
	<li><a href="http://www.lekredaction.fr/plugin-pour-traduire-site-wordpress">Joanr : Plugin pour traduire un site WordPress</a></li>
	<li><a href="http://parlonsblog.com/wp-idea-stream/">Parlonsblog : WP idea stream</a></li>
	<li><a href="http://blog.zenzishop.com/pourquoi-jai-cree-un-blog-wordpress-pour-mon-site-e-commerce/">Sophie : Pourquoi jâ€™ai crÃ©e un blog WordPress pour mon site e-commerce</a></li>
	<li><a href="http://votre-branding.fr/outil-polyvalent-pour-wordpress-jetpack-le-plugin-a-tout-faire/">Jean michel : Jetpack le plugin a tout faire</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://axxcom.fr/blog/a-la-decouverte-de-genesis-un-framework-pour-wordpress/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>RÃ©alisation d&#8217;un widget WordPress</title>
		<link>http://axxcom.fr/blog/realisation-dun-widget-wordpress/</link>
		<comments>http://axxcom.fr/blog/realisation-dun-widget-wordpress/#comments</comments>
		<pubDate>Tue, 30 Oct 2012 20:18:41 +0000</pubDate>
		<dc:creator>daniel</dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[widget]]></category>

		<guid isPermaLink="false">http://axxcom.fr/?p=778</guid>
		<description><![CDATA[Les Widgets WordPress sont largement rÃ©pandus et tout un chacun en fait usage afin d'afficher les choses les plus diverses. La rÃ©alisation d'un Widget pour WordPress n'est pas vraiment une chose trÃ¨s compliquÃ©e en soi. Ce petit article a pour but de vous aider Ã  comprendre le fonctionnement des Widget et vous donner une trame [...]]]></description>
				<content:encoded><![CDATA[<p>Les Widgets WordPress sont largement rÃ©pandus et tout un chacun en fait usage afin d'afficher les choses les plus diverses.  La rÃ©alisation d'un Widget pour WordPress n'est pas vraiment une chose trÃ¨s compliquÃ©e en soi.  Ce petit article a pour but de vous aider Ã  comprendre le fonctionnement des Widget et vous donner une trame si vous avez envie de crÃ©er le votre, Ã©tant entendu que dans ce cas une connaissance minimale de <em>PHP</em> est requise.</p>
<p>J'ai choisi un thÃ¨me simple pour cet exercice afin de ne pas complexifier et alourdir inutilement l'ensemble et rester focalisÃ© sur l'objectif.<br>
L'idÃ©e est de rÃ©aliser un Widget qui va simplement afficher deux lignes de texte et un bouton. Le fait d'actionner le bouton via un terminal mobile dÃ©clenchant le numÃ©roteur tÃ©lÃ©phonique du terminal afin d'initialiser un appel vers un numÃ©ro prÃ©dÃ©fini.  Le Widget ne devra s'afficher <strong>que</strong> si le terminal client est un mobile, cette fonctionnalitÃ© n'ayant en effet que peu de sens sur un ordinateur de bureau.</p>
<div id="attachment_780" class="wp-caption aligncenter" style="width: 298px"><img src="http://axxcom.fr/wp-content/uploads/2012/10/screenshot_13.png" alt="Widget call me" title="Widget call me" width="288" height="185" class="size-full wp-image-780" /><p class="wp-caption-text">AperÃ§u du widget</p></div><br>
<p>Ceci nous donnera l'occasion de rencontrer, outre diverses fonctions courantes de WordPress, une petite nouvelle ayant fait son apparition avec la version 3.4 : <em>wp_is_mobile()</em>, et un schÃ©ma d'URI assez peu utilisÃ© jusqu'Ã  prÃ©sent : <em>href:tel</em>.</p>
<p>Passons donc au menu  :</p>
<ul>
	<li><a href="#t1">Description de la fonction wp_is_mobile().</a></li>
	<li><a href="#t2">Description du schÃ©ma d'URI "tel".</a></li>
	<li><a href="#t3">Structure gÃ©nÃ©rale d'un Widget.</a></li>
	<li><a href="#t4">C'est la Classe.</a></li>
	<li><a href="#t5">Le panneau de paramÃ©trage.</a></li>
	<li><a href="#t6">La sauvegarde des options.</a></li>
	<li><a href="#t7">L'affichage du Widget.</a></li>
	<li><a href="#t8">IntÃ©gration dans le thÃ¨me.</a></li>
	<li><a href="#t9">Un peu de style.</a></li>
	<li><a href="#t10">L'internationalisation.</a></li>
	<li><a href="#t11">Conclusion.</a></li>
	<li><a href="#t12">Ressources et rÃ©fÃ©rences.</a></li>
</ul>
<h2 id="t1">Description de la fonction wp_is_mobile()</h2>
<p>Cette fonction toute rÃ©cente, apparue avec la version 3.4 de WordPress, permet de dÃ©tecter si votre visiteur utilise un pÃ©riphÃ©rique mobile.  Il s'agit d'une fonction boolÃ©enne ne prenant pas de paramÃ¨tres et retournant TRUE ou FALSE.</p>

<h2 id="t2">Description du schÃ©ma d'URI "tel"</h2>
<p>SchÃ©ma d'URI permettant de dÃ©clencher un appel tÃ©lÃ©phonique sur les terminaux Ã©quipÃ©s pour ce type d'opÃ©ration.
Ce schÃ©ma est enregistrÃ© auprÃ¨s de l'IANA et est dÃ©crit dans la RFC3966, modifiÃ©e par la RFC 5341.
Il se prÃ©sente sous la forme suivante  :

<div class="codecolorer-container html4strict default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;tel:+330610100000&quot;</span>&gt;</span>Appelez moi<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;</span></div></div>

</p><br>

<h2 id="t3">Structure gÃ©nÃ©rale d'un Widget.</h2>
<p>Pour la crÃ©ation des Widgets, WordPress met Ã  notre disposition la classe <em>WP_Widget</em>, qu'il nous suffira d'Ã©tendre et d'adapter.<br>
A la base, nous avons besoin de la structure suivante  :</p>

<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><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 /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">Class</span> mon_widget extend WP_Widget <span style="color: #009900;">&#123;</span><br />
<br />
&nbsp; &nbsp; &nbsp;<span style="color: #000000; font-weight: bold;">function</span> mon_widget<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">/* constructeur */</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp;<span style="color: #000000; font-weight: bold;">function</span> form<span style="color: #009900;">&#40;</span><span style="color: #000088;">$instance</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">/* Formulaire du panneau de rÃ©glages du widget */</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp;<span style="color: #000000; font-weight: bold;">function</span> upddate<span style="color: #009900;">&#40;</span><span style="color: #000088;">$new_instance</span><span style="color: #339933;">,</span> <span style="color: #000088;">$old_instance</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">/* Gestion de la sauvegarde des options */</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp;<span style="color: #000000; font-weight: bold;">function</span> widget<span style="color: #009900;">&#40;</span><span style="color: #000088;">$args</span><span style="color: #339933;">,</span> <span style="color: #000088;">$instance</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">/* Affichage du widget */</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>

<p>La classe <em>mon_widget</em> va Ã©tendre la classe <em>WP_Widget</em> et mettre en oeuvre les 4 fonctions nÃ©cessaires au bon fonctionnement de l'ensemble.</p>

<h2 id="t4">C'est la Classe.</h2>
<p>Nous allons d'abord crÃ©er le fichier de notre futur widget et le stocker dans l'arborescence de notre thÃ¨me.  Dans cet exemple, j'ai choisi de le sauvegarder dans un rÃ©pertoire nommÃ© <em>lib</em> au sein de mon thÃ¨me.  Ceci fait, nous pouvons nous attaquer Ã  notre projet.</p>
<p>Nous allons dÃ©buter en dÃ©finissant une classe et en lui donnant un nom Ã©vocateur, que nous allons de plus prÃ©fixer afin d'Ã©viter tout risque de conflit.<br>
Attaquer nous ensuite Ã  la premiÃ¨re fonction, que nous allons baptiser du mÃªme nom que notre classe.  Cette fonction sera le "constructeur" de l'objet et va procÃ©der Ã  l'initialisation de quelques paramÃ¨tres avant de passer Ã  la crÃ©ation de notre classe proprement dite.</p>
<p>Nous allons pour commencer dÃ©finir un tableau <em>$widget_options</em> qui sera destinÃ© Ã  stocker quelques valeurs globales, qui seront dans ce cas  :</p>
<ul>
	<li>classname  :  ce sera le nom de la classe CSS de notre widget.</li>
	<li>description  :  ce sera la description de notre widget, qu'on retrouvera dans le panneau d'administration de WordPress.</li>
</ul>
<p>Nous procÃ©dons ensuite Ã  la crÃ©ation de la classe en nous rÃ©fÃ©rant Ã  <em>WP_Widget</em> et nous lui assignons plusieurs paramÃ¨tres  :  une chaine de caractÃ¨res qui sera l'ID CSS du widget, une seconde chaine  qui sera le nom de notre widget dans le panneau d'administration de WordPress, et finalement notre tableau prÃ©cÃ©demment dÃ©fini.</p>

<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">class</span> axx_callme_widget <span style="color: #000000; font-weight: bold;">extends</span> WP_Widget <span style="color: #009900;">&#123;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">function</span> axx_callme_widget<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$widget_options</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">'classname'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'axx-callme-widget'</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">'description'</span> <span style="color: #339933;">=&gt;</span> __<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Add a callme box on mobile devices'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'axxcom'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">WP_Widget</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'axx_callme'</span><span style="color: #339933;">,</span> __<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Axxcom - Call Me Widget'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'axxcom'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$widget_options</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>

<p>VoilÃ , c'est tout pour ce qui concerne le constructeur, passons maintenant Ã  la rÃ©alisation du panneau de paramÃ©trage.</p>

<h2 id="t5">Le panneau de paramÃ©trage.</h2>
<p>C'est la fonction <em>form</em> qui va Ãªtre chargÃ©e du travail.  C'est en effet elle qui va :</p>
<ul>
	<li>dÃ©finir le formulaire qui va constituer le panneau de rÃ©glages.</li>
	<li>dÃ©finir la valeur par dÃ©faut des champs du formulaire.</li>
	<li>rÃ©cupÃ©rer les Ã©ventuelles valeurs sauvegardÃ©es.</li>
	<li>initialiser les champs  et afficher le formulaire.</li>
</ul>
<p>Nous allons dÃ©finir pour notre widget 5 Ã©lÃ©ments qui pourront Ãªtre modifiÃ©s via notre formulaire  :</p>
<ul>
	<li>Le titre du widget, qui apparaitra cÃ´tÃ© client.</li>
	<li>le numÃ©ro de tÃ©lÃ©phone Ã  composer lors de l'appui sur le bouton.</li>
	<li>une chaine de caractÃ¨re qui se positionnera au-dessus du bouton.</li>
	<li>une chaine de caractÃ¨res qui se positionnera sous le bouton.</li>
	<li>le libellÃ© du bouton.</li>
</ul>

<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><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 /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">function</span> form<span style="color: #009900;">&#40;</span><span style="color: #000088;">$instance</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$defaults</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">'widget_title'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">'widget_call_number'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">'label1'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">'label2'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">'button_label'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$instance</span> <span style="color: #339933;">=</span> wp_parse_args<span style="color: #009900;">&#40;</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#41;</span> <span style="color: #000088;">$instance</span><span style="color: #339933;">,</span> <span style="color: #000088;">$defaults</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$widget_title</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$instance</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'widget_title'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$widget_call_number</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$instance</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'widget_call_number'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$widget_label1</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$instance</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'label1'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$widget_label2</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$instance</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'label2'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$widget_button_label</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$instance</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'button_label'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;p&gt;&lt;label&gt;'</span> <span style="color: #339933;">.</span> __<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Title'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'axx'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">' :&lt;br&gt;&lt;input class=&quot;axx-callme-widget&quot; name=&quot;'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get_field_name</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'widget_title'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&quot; type=&quot;text&quot; value=&quot;'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$widget_title</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&quot; size=&quot;35&quot; /&gt;&lt;/label&gt;&lt;/p&gt;'</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;p&gt;&lt;label&gt;'</span> <span style="color: #339933;">.</span> __<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Call number'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'axx'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">' :&lt;br&gt;&lt;input class=&quot;axx-callme-widget&quot; name=&quot;'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get_field_name</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'widget_call_number'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&quot; type=&quot;text&quot; value=&quot;'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$widget_call_number</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&quot; size=&quot;35&quot; /&gt;&lt;/label&gt;&lt;/p&gt;'</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;p&gt;&lt;label&gt;'</span> <span style="color: #339933;">.</span> __<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Label 1'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'axx'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">' :&lt;br&gt;&lt;input class=&quot;axx-callme-widget&quot; name=&quot;'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get_field_name</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'label1'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&quot; type=&quot;text&quot; value=&quot;'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$widget_label1</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&quot; size=&quot;35&quot; /&gt;&lt;/label&gt;&lt;/p&gt;'</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;p&gt;&lt;label&gt;'</span> <span style="color: #339933;">.</span> __<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Label 2'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'axx'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">' :&lt;br&gt;&lt;input class=&quot;axx-callme-widget&quot; name=&quot;'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get_field_name</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'label2'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&quot; type=&quot;text&quot; value=&quot;'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$widget_label2</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&quot; size=&quot;35&quot; /&gt;&lt;/label&gt;&lt;/p&gt;'</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;p&gt;&lt;label&gt;'</span> <span style="color: #339933;">.</span> __<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Button label'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'axx'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">' :&lt;br&gt;&lt;input class=&quot;axx-callme-widget&quot; name=&quot;'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get_field_name</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'button_label'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&quot; type=&quot;text&quot; value=&quot;'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$widget_button_label</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&quot; size=&quot;35&quot; /&gt;&lt;/label&gt;&lt;/p&gt;'</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>

<br>
<p>Nous allons donc commencer par dÃ©finir un nouveau tableau destinÃ© Ã  contenir ces diverses variables, en laissant les valeurs vides.<br>
Ce tableau sera utilisÃ© tel quel dans le cas oÃ¹ le widget viens d'Ãªtre ajoutÃ© et n'a pas encore Ã©tÃ© configurÃ©.  Dans le cas contraire, les valeurs prÃ©cÃ©demment sauvegardÃ©es sont rÃ©cupÃ©rÃ©es dans la variable <em>$instance</em> en paramÃ¨tres de notre fonction.
Nous allons donc fusionner nos deux tableaux et ensuite rÃ©cupÃ©rer nos valeur de maniÃ¨re individuelle pour pouvoir ensuite les injecter dans les champs de notre formulaire que nous dÃ©finirons Ã  l'aide des balises HTML classiques.</p>
<p>Il est Ã  noter qu'il n'est pas nÃ©cessaire d'utiliser la balise  ni le bouton de soumission, la classe <em>WP_Widget</em> gÃ©rant cela pour nous.</p>

<h2 id="t6"> La sauvegarde des options.</h2>
<p>La sauvegarde des paramÃ¨tres de notre widget s'effectue via la fonction <em>update</em>.<br>
Cette fonction rÃ©cupÃ¨re d'une part les nouveau paramÃ¨tres, et d'autre part les anciens, il nous reste Ã  remplacer les uns par les autres en n'oubliant pas de "nettoyer" au passage les donnÃ©es introduites via le formulaire.<br>
Le mÃ©canisme de la sauvegarde est entiÃ¨rement gÃ©rÃ© par WordPress, ce qui nous simplifie pas mal la vie.</p>

<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">function</span> update<span style="color: #009900;">&#40;</span><span style="color: #000088;">$new_instance</span><span style="color: #339933;">,</span> <span style="color: #000088;">$old_instance</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$instance</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$old_instance</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$instance</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'widget_title'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">strip_tags</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$new_instance</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'widget_title'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$instance</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'widget_call_number'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">strip_tags</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$new_instance</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'widget_call_number'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$instance</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'label1'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">strip_tags</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$new_instance</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'label1'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$instance</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'label2'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">strip_tags</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$new_instance</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'label2'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$instance</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'button_label'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">strip_tags</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$new_instance</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'button_label'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">return</span> <span style="color: #000088;">$instance</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>

<br><br>
<h2 id="t7">L'affichage du Widget.</h2>
<p>Voici venu le moment de s'occuper de l'affichage du widget cÃ´tÃ© client et c'est la fonction <em>widget</em> qui est chargÃ©e du travail.</p>
<p>Nous allons commencer par vÃ©rifier si nous sommes en prÃ©sence d'un terminal mobile, auquel cas nous pourrons procÃ©der Ã  l'affichage.  Dans le cas contraire, la fonction s'arrÃªtera lÃ , il n'est en effet pas utile d'afficher ce type de widget si le terminal est dÃ©pourvu de fonction de tÃ©lÃ©phonie.
La fonction <em>wp_is_mobile()</em> va ici nous prÃªter main forte en nous indiquant le type de terminal auquel nous avons Ã  faire.
</p>
<p>Si le rÃ©sultat de la dÃ©tection est positif, nous effectuerons le traitement des paramÃ¨tres d'entrÃ©e de notre fonction.<br>
Le premier paramÃ¨tre va contenir les variables propres au thÃ¨me, telles que les valeurs des Ã©lÃ©ments qui prÃ©cÃ¨dent et suivent le widget.  Nous allons immÃ©diatement en extraire les valeurs et commencer par afficher le contenu de la variable <em>$before_widget</em>.
Nous allons ensuite examiner le contenu des variables transmises via le second argument en commenÃ§ant par le titre de notre widget.</p>
<p>Si le titre est dÃ©fini (ce qui devrait Ãªtre logiquement le cas) nous afficherons tout d'abord le contenu de la variable <em>$before_title</em>, suivi de notre titre et pour finir le contenu de <em>$after_title</em>.</p>
<p>Nous vÃ©rifions ensuite si le numÃ©ro d'appel est bien dÃ©fini.  Si c'est le cas, nous affichons la premiÃ¨re zone de texte, suivie du bouton d'appel pour terminer avec la seconde zone de texte.<br>
Si le numÃ©ro d'appel n'est pas dÃ©fini, on affichera simplement un petit message d'erreur.</p>
<p>On clÃ´ture les opÃ©rations en affichant le contenu de la variable <em>$after_widget</em>.
La "logique" a Ã©tÃ© gardÃ©e volontairement simpliste afin de ne pas alourdir l'ensemble, le but Ã©tant de "dissÃ©quer" un widget, mais il est Ã©vident qu'on pourrait amÃ©liorer largement tout ceci en ajoutant, par exemple, des contrÃ´les de validitÃ©, etc...</p>

<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><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 /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">function</span> widget<span style="color: #009900;">&#40;</span><span style="color: #000088;">$args</span><span style="color: #339933;">,</span> <span style="color: #000088;">$instance</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">if</span> &nbsp;<span style="color: #009900;">&#40;</span> wp_is_mobile<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #990000;">extract</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$args</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$before_widget</span><span style="color: #339933;">;</span><br />
<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$instance</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'widget_title'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$before_title</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$instance</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'widget_title'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$after_title</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span><span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$instance</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'widget_call_number'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;p class=&quot;axx-callme-label&quot;&gt;'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$instance</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'label1'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&lt;/p&gt;'</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;p class=&quot;axx-callme-label&quot;&gt;&lt;a class=&quot;axx_callme_bt&quot; title=&quot;'</span> <span style="color: #339933;">.</span> __<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Call me'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span><span style="color: #0000ff;">'&quot; href=&quot;tel:'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$instance</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'widget_call_number'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&quot;&gt;'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$instance</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'button_label'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&lt;/a&gt;&lt;/p&gt;'</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;p class=&quot;axx-callme-label&quot;&gt;'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$instance</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'label2'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&lt;/p&gt;'</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;p&gt;ParamÃ¨tres non dÃ©finis&lt;/p&gt;'</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$after_widget</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>

<br><br>

<h2 id="t8">IntÃ©gration dans le thÃ¨me.</h2>
<p>Notre widget est Ã  prÃ©sent terminÃ© mais pour qu'il soit visible et donc utilisable, il faut aussi l'intÃ©grer dans notre thÃ¨me.  Pour cela, direction notre fichier <em>function.php</em>.</p>

<p>Nous allons commencer par incorporer le fichier de notre widget Ã  l'aide d'un <em>include</em>.<br>

<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #b1b100;">include_once</span><span style="color: #009900;">&#40;</span> CHILD_DIR <span style="color: #339933;">.</span> <span style="color: #0000ff;">'/lib/axx_callme_widget.php'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>

Attention, j'utilise ici un thÃ¨me enfant, il vous faudra adapter cette ligne en fonction du thÃ¨me utilisÃ© et de l'endroit oÃ¹ vous avez stockÃ© votre fichier.  Si vous n'utilisez pas de thÃ¨me enfant, vous emploierez vraisemblablement la fonction get_template_directory() au lieu de CHILD_DIR.<br>
<p>Pour rappel, la fonction <em>wp_is_mobile</em> n'est prÃ©sente que depuis la version 3.4 de WordPress, et comme l'a judicieusement fait remarquer RÃ©my, afin d'Ã©viter tout risque de plantage en cas de version incorrecte, j'ai inclu un test afin de vÃ©rifier au prÃ©alable l'existence de ladite fonction.</p>
Si notre fonction est bien prÃ©sente, nous allons effectuer le rÃ©fÃ©rencement du widget au sein du thÃ¨me, et pour cela nous aurons recours Ã  un <em>hook</em>  :  <em>widgets_init</em>, qui est dÃ©clenchÃ© par WordPress juste aprÃ¨s l'enregistrement des widgets par dÃ©faut.</p>
<p>L'interception du <em>hook</em> est effectuÃ©e par un <em>add_action</em> et on lui passera le nom de la fonction qui va effectuer le rÃ©fÃ©rencement, fonction qui tiens en fait Ã  peu de choses, juste une ligne de code.<br>
A noter que si votre thÃ¨me utilise dÃ©jÃ  une fonction pour rÃ©fÃ©rencer ses widgets, vous pouvez tout Ã  fait vous en servir et n'y ajouter que la 4Ã¨me ligne du code ci-dessous, attention toutefois Ã  la version de WordPress.</p>

<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">function_exists</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'wp_is_mobile'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
add_action<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'widgets_init'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'axx_register_widget'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #000000; font-weight: bold;">function</span> axx_register_widget<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; register_widget<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'axx_callme_widget'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>

<p>Une fois ceci effectuÃ©, notre widget doit apparaÃ®tre parmi les autres widgets dÃ©jÃ  prÃ©sents dans l'administration de WordPress.</p>

<h2 id="t9">Un peu de style.</h2>
<p>Notre widget apparaÃ®t enfin, mais il est peut-Ãªtre un peu...   moche...<br>
Pour remÃ©dier Ã  cela, quelques lignes de css feront l' affaire.  Vous pourrez donc Ã  loisirs ajouter vos classes css dans le fichier de votre thÃ¨me en vous rÃ©fÃ©rant aux noms de classes que vous aurez dÃ©finis dans le code et harmoniser ainsi votre widget avec son environnement.</p>


<h2 id="t10">L'internationalisation.</h2>
<p>Comme vous aurez pu le constater, toutes les chaines de caractÃ¨res ont Ã©tÃ© rÃ©digÃ©es en anglais, et sont utilisÃ©es en faisant appel a la fonction d'internationalisation "__()".<br>
Sans action de votre part, votre widget restera en anglais.  Pour l'avoir dans la langue de votre choix, il vous faudra passer par le fichier ".po" de votre thÃ¨me dans lequel ces nouvelles chaines viendront s'ajouter.  Il ne vous restera plus qu'Ã  complÃ©ter le fichier Ã  l'aide de vos traductions et du programme <a href="http://www.poedit.net/download.php" title="Poedit" target="_blank">poedit</a>.</p>

<h2 id="t11">Conclusion.</h2>
<p>Ce petit billet est destinÃ© principalement aux personnes ayant dÃ©jÃ  un minimum de bagage en terme de dÃ©veloppement, tout ceci risque de paraitre bien obscur aux yeux des parfaits dÃ©butants, quant aux "vieux broussards", vous aurez plus Ã  apporter ici qu'Ã  apprendre...<br>
J'espÃ¨re en tout cas avoir fait le tour du sujet et n'avoir rien omis.</p>
<p>A partir de lÃ , vous avez maintenant une trame, un chemin qui devrait vous aider a rÃ©aliser vos propres widgets sans trop de difficultÃ©s.<br>
Vous trouverez en fin d'article des liens qui vous permettront de tÃ©lÃ©charger le code complet, mais aussi qui vous mÃ¨neront vers les rÃ©fÃ©rences des diffÃ©rentes fonctions utilisÃ©es.</p>
<p>Des coquilles, des questions ?  n'hÃ©sitez pas Ã  laisser un commentaire.</p>

<h2 id="t12">Ressources et rÃ©fÃ©rences.</h2>
<p>J'ai mis Ã  disposition le code complet ainsi qu'un petit bout de css, vous pouvez le <a href="https://www.box.com/s/7oejov0axeck464c0zgq" title="Sources" target="_blank">tÃ©lÃ©charger ici</a>.</p>
<p>Et pour terminer, quelques rÃ©fÃ©rences utiles :</p>
<ul>
<li>La fonction <a href="http://codex.wordpress.org/Function_Reference/wp_is_mobile" title="Fonstion wp_is_mobile" target="_blank">wp_is_mobile</a> (codex).</li>
<li>La description du schÃ©ma d'uri <a href="http://tools.ietf.org/html/rfc3966" title="RFC 3966" target="_blank">RFC3966</a> et <a href="http://tools.ietf.org/html/rfc5341" title="RFC 5341" target="_blank">RFC 5341</a></li>
<li>L'<a href="http://codex.wordpress.org/Widgets_API" title="API widgets" target="_blank">API Widgets</a> Description de la classe <a href="http://phpdoc.wordpress.org/trunk/WordPress/Widgets/WP_Widget.html" title="Classe WP_Widget" target="_blank">WP_Widget</a>.</li>
<li>La fonction <a href="http://codex.wordpress.org/Function_Reference/register_widget" title="La fonction register_widget" target="_blank">register_widget</a> (codex).</li>
<li>Les fonctions d'<a href="http://codex.wordpress.org/I18n_for_WordPress_Developers" title="Internationalisation" target="_blank">internationalisation</a> (codex).</li>
</ul>

<p>Et quelques lectures intÃ©ressantes  :</p>
<ul>
<li>Programming the mobile web, de Maximiliano Firtman aux Ã©ditions O'Reilly</li>
<li>Professional WordPress Plugin Development, de Brad Williams, Ozh Richard et Justin Tadlock aux Ã©ditions Wrox.</li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://axxcom.fr/blog/realisation-dun-widget-wordpress/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>WordPress &#8211; La traduction des thÃ¨mes enfants</title>
		<link>http://axxcom.fr/blog/wordpress-la-traduction-des-themes-enfants/</link>
		<comments>http://axxcom.fr/blog/wordpress-la-traduction-des-themes-enfants/#comments</comments>
		<pubDate>Thu, 09 Aug 2012 21:41:35 +0000</pubDate>
		<dc:creator>daniel</dc:creator>
				<category><![CDATA[Themes]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[genesis]]></category>
		<category><![CDATA[traduction]]></category>

		<guid isPermaLink="false">http://axxcom.fr/?p=756</guid>
		<description><![CDATA[Vous avez crÃ©Ã© votre thÃ¨me enfant, vous l'avez prÃ©parÃ© pour l'internationalisation en utilisant les bonnes fonctions comme __(), _e(), _x(), esc_attr__() etc... et tout va bien. Viens maintenant le moment de mettre en place les fichiers de traduction (les fameux .po et .mo) mais... Â comment faire pour que le thÃ¨me enfant puisse les intÃ©grer et [...]]]></description>
				<content:encoded><![CDATA[Vous avez crÃ©Ã© votre thÃ¨me enfant, vous l'avez prÃ©parÃ© pour l'internationalisation en utilisant les bonnes fonctions comme __(), _e(), _x(), esc_attr__() etc... et tout va bien.
<div>
<div>Viens maintenant le moment de mettre en place les fichiers de traduction (les fameux .po et .mo) mais... Â comment faire pour que le thÃ¨me enfant puisse les intÃ©grer et les utiliser ?</div>
&nbsp;
<div>Il vous faut crÃ©er dans l'arborescence de votre thÃ¨me enfant un rÃ©pertoire destinÃ© Ã  accueillir les fichiers de traduction, par exemple "languages" et y dÃ©poser vos fichiers .po et .mo</div>
<div>Ensuite, il faut indiquer Ã  votre thÃ¨me l'endroit ou se trouvent ces fichiers, et pour cela, ouvrez votre fichier function.php et collez-y tout au dÃ©but aprÃ¨s la balise php la ligne suivante :</div>
&nbsp;
<div>

<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">load_child_theme_textdomain<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'toto'</span><span style="color: #339933;">,</span> get_stylesheet_directory<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'/languages'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>

</div>
&nbsp;
<div>On suppose ici que le thÃ¨me enfant a Ã©tÃ© baptisÃ© "toto"...</div>
<div></div>
<div>Attention, contrairement Ã  ce qui est en usage pour les plugins, le nom des fichiers .po et .mo doit Ãªtre constituÃ© uniquement par la locale, donc par exemple pour les fichiers franÃ§ais :</div>
<div></div>
<div>fr_FR.po Â et Â fr_FR.mo</div>
&nbsp;
<div>Si vous ajoutez dans le nom de fichier le nom du thÃ¨me, cela ne fonctionnera pas.</div>
<div></div>
<div>Pour les utilisateurs du framework Genesis, cette procÃ©dure est Ã©galement valable pour vos thÃ¨mes enfants.</div>
</div><br>
La rÃ©fÃ©rence codex de la fonction utilisÃ©e : <a href="http://codex.wordpress.org/Function_Reference/load_child_theme_textdomain" target="_blank">load_child_theme_textdomain</a>]]></content:encoded>
			<wfw:commentRss>http://axxcom.fr/blog/wordpress-la-traduction-des-themes-enfants/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Deux blank themes pour WordPress</title>
		<link>http://axxcom.fr/blog/deux-blank-themes-pour-wordpress/</link>
		<comments>http://axxcom.fr/blog/deux-blank-themes-pour-wordpress/#comments</comments>
		<pubDate>Thu, 14 Jun 2012 19:36:20 +0000</pubDate>
		<dc:creator>daniel</dc:creator>
				<category><![CDATA[Themes]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[theme]]></category>

		<guid isPermaLink="false">http://axxcom.fr/?p=751</guid>
		<description><![CDATA[Pour dÃ©velopper votre propre thÃ¨me WordPress, il vous faut un peu d'imagination, un zeste de bon goÃ»t, un minimum de connaissances dans les divers langages utilisÃ©s (php, html, css, un peu de javascript ou assimilÃ©...) et si vous voulez Ã©viter de finir chauve ou dÃ©pressif, un "blank theme"... Le "blank theme", c'est gÃ©nÃ©ralement un thÃ¨me [...]]]></description>
				<content:encoded><![CDATA[<p>Pour dÃ©velopper votre propre thÃ¨me WordPress, il vous faut un peu d'imagination, un zeste de bon goÃ»t, un minimum de connaissances dans les divers langages utilisÃ©s (php, html, css, un peu de javascript ou assimilÃ©...) et si vous voulez Ã©viter de finir chauve ou dÃ©pressif,  un "blank theme"...</p>

<p>Le "blank theme", c'est gÃ©nÃ©ralement un thÃ¨me ultra minimaliste, reprenant uniquement les Ã©lÃ©ments essentiels d'un thÃ¨me, sans fioritures et souvent avec une feuille de style minimaliste.  Le but Ã©tant d'avoir une base de travail propre sur laquelle vous allez pouvoir apporter tous les amÃ©nagements que vous dÃ©sirez sans avoir Ã  faire un grand nettoyage au prÃ©alable.<br>
IdÃ©alement cette base doit proposer un code propre et sans bavure, bien lisible et documentÃ© afin que vous puissiez le manipuler sans craindre des "effets de bord" indÃ©sirables.</p>

<p>On rencontre rÃ©guliÃ¨rement des articles nous prÃ©sentant une panoplie de ce genre de thÃ¨mes, la grande majoritÃ© Ã©tant d'origine anglo-saxonne.  Ils sont gÃ©nÃ©ralement assez bons, mais prÃ©sentent l'inconvÃ©nient de ne proposer qu'un support en anglais, ce qui n'est pas forcÃ©ment rÃ©dhibitoire mais ne simplifie pas la tÃ¢che.</p>

<p>J'ai choisi quant Ã  moi de vous prÃ©senter ici deux thÃ¨mes de base bien FranÃ§ais (non, ce n'est pas du chauvinisme...) car je trouve que nous avons des gens qui font du trÃ¨s bon boulot et qu'on n'en parle pas suffisamment, mais aussi parce que nous trouverons si nÃ©cessaire un support dans la langue de MoliÃ¨re, ce qui est un "plus" incontestable.</p>
<br>

<p>Honneur aux Dames, commenÃ§ons par le thÃ¨me de <strong>Julie Franck d'Xbitionart</strong></p>

<h2>CLEAN</h2><br>
<img src="http://axxcom.fr/wp-content/uploads/2012/06/themeclean-e1339702187359.png" alt="" title="themeclean" width="472" height="113" class="ax_borders" />
<p>Voici donc un thÃ¨me lÃ©ger sur une structure Html5 simple.<br>
TrÃ¨s Ã©purÃ© comme il se doit (et comme son nom l'indique) il comprend nÃ©anmoins tout ce qu'il faut pour bien dÃ©marrer :
<br>
<ul style="margin-left:20px;"><li>deux sidebars</li>
<li>template de page simple</li>
<li>page pour les archives</li>
<li>page pour les liens</li>
<li>page de recherche</li>
<li>page 404</li>
<li>page portfolio avec custom post type</li></ul>

Vous aurez en prime une feuille css de base, simple et soignÃ©e, dans laquelle vous pourrez vous y retrouver sans chercher pendant trois jours. Cette feuille par dÃ©faut donne par ailleurs un "look" trÃ¨s sympa d'entrÃ©e de jeu.<br>
Voici donc un ensemble parfait pour qui veut commencer Ã  "tÃ¢ter du thÃ¨me" sans frÃ´ler la dÃ©pression. Il reprÃ©sente une excellente base avec laquelle vous pourrez expÃ©rimenter plein de choses et obtenir rapidement un rÃ©sultat si vous voulez tailler votre site sur mesure.</p>
<p>Le site de xbition-art  :  <a href="http://www.blog.xbition-art.fr/" title="xbition-art" target="_blank">http://www.blog.xbition-art.fr/</a><br>
Le site du thÃ¨me  :  <a href="http://www.wp-clean.fr/" title="Clean" target="_blank">http://www.wp-clean.fr/</a></p>
<br>
 Voyons maintenant le thÃ¨me rÃ©alisÃ© par <strong>Bruno Bichet</strong>
<h2>BASICS</h2><br>
<img src="http://axxcom.fr/wp-content/uploads/2012/06/basics-e1339702212856.png" alt="" title="basics" width="472" height="86" class="ax_borders" />
<p>L'appellation "blank theme" prend ici tout son sens. Cet ensemble est en effet livrÃ© sans fioritures, volontairement brut.
BasÃ© sur une structure HTML5 boilerplate, "Basics" est trÃ¨s complet et particuliÃ¨rement dÃ©taillÃ©.<br>
La structure est ici plus complexe, si vous Ãªtes dÃ©butant et que vous voulez plonger dans le code, respirez un bon coup, ce thÃ¨me est un beau morceau, trÃ¨s bien structurÃ© et Ã©galement bien documentÃ©, il y a ici beaucoup Ã  apprendre.<br>
Si le code est documentÃ©, l'auteur propose Ã©galement beaucoup d'explications sur son site (ou vous trouverez Ã©galement beaucoup d'autres choses).</p>

<p>Dans la boite vous trouverez  tous les templates nÃ©cessaires, y compris deux sidebar avec de multiples zones de widgets.<br>
Le thÃ¨me "basics" est accompagnÃ© d'un thÃ¨me-enfant "beyond-basics" qui vous permettra de dÃ©river facilement vos propres dÃ©clinaisons tout en gardant le bÃ©nÃ©fice des mises Ã  jours du thÃ¨me principal.<br>
Vous trouverez Ã©galement un dossier "languages" contenant les fichiers nÃ©cessaires Ã  la traduction de votre thÃ¨me, car bien entendu "basics" est prÃ©vu pour l'internationalisation.  A ce propos, le code est documentÃ© en anglais, mais vous trouverez un support en franÃ§ais et la documentation sur le site est en franÃ§ais Ã©galement.<br><br>
<a href="http://css.4design.tl/" title="css.4design.tl" target="_blank">Le blog de Bruno Bichet</a><br>
<a href="http://css.4design.tl/creation-de-site-wordpress-de-a-a-z-b-comme-basics#comment-9679" title="Documentation de Basics" target="_blank">La documentation du thÃ¨me</a><br>
<a href="http://basics.4design.tl/" title="Basics" target="_blank">Le site de Basics</a></p>
<br>
<h2>Pour conclure</h2>
<p>Voici donc de bonnes matiÃ¨res premiÃ¨res si vous voulez vous lancer dans l'aventure.  RÃ©aliser son thÃ¨me est un travail prenant mais gratifiant, encore faut-il dÃ©marrer sur de bonnes bases, et ces bases, les voici, Ã  vous de les faire Ã©voluer.<br>
Si d'aventure vous venez Ã  croiser d'autres thÃ¨mes de base qui vous semblent intÃ©ressants, n'hÃ©sitez pas Ã  m'en faire part et je complÃ¨terai cet article.</p><br>]]></content:encoded>
			<wfw:commentRss>http://axxcom.fr/blog/deux-blank-themes-pour-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Le stockage des donnÃ©es dans WordPress</title>
		<link>http://axxcom.fr/blog/le-stockage-des-donnees-dans-wordpress/</link>
		<comments>http://axxcom.fr/blog/le-stockage-des-donnees-dans-wordpress/#comments</comments>
		<pubDate>Sun, 13 May 2012 16:29:52 +0000</pubDate>
		<dc:creator>daniel</dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[Base de donnÃ©es]]></category>
		<category><![CDATA[SÃ©curitÃ©]]></category>

		<guid isPermaLink="false">http://axxcom.fr/?p=746</guid>
		<description><![CDATA[Ce petit billet s'adresse avant tout aux nÃ©ophytes, Ã  ceux qui en sont Ã  leurs premiers pas avec WordPress et qui voudraient en savoir un peu plus. Wordpress, c'est avant tout un "CMS", une entitÃ© qui gÃ¨re le contenu d'un site. Il va donc s'employer Ã  gÃ©rer les donnÃ©es et les afficher Ã  l'Ã©cran par [...]]]></description>
				<content:encoded><![CDATA[<p>Ce petit billet s'adresse avant tout aux nÃ©ophytes, Ã  ceux qui en sont Ã  leurs premiers pas avec WordPress et qui voudraient en savoir un peu plus.<br>
Wordpress, c'est avant tout un "CMS", une entitÃ© qui gÃ¨re le contenu d'un site. Il va donc s'employer Ã  gÃ©rer les donnÃ©es et les afficher Ã  l'Ã©cran par l'intermÃ©diaire de thÃ¨mes qui eux vont s'occuper de la prÃ©sentation desdites donnÃ©es.</p>
<h2>DÃ©finition des donnÃ©es</h2>
<p>C'est d'abord le contenu que vous ajoutez, le texte des pages et des articles, les images et illustrations, les liens, les mots-clÃ©, les dÃ©finitions de catÃ©gories...<br>
C'est Ã©galement les coordonnÃ©es des utilisateurs du site, le paramÃ©trages propre Ã  WordPress, mais aussi aux plugins que vous aurez installÃ©s, etc...</p>

<p>Si un problÃ¨me survient, comme un plantage du serveur, une infection virale, une mauvaise manoeuvre, il peut Ãªtre nÃ©cessaire de refaire l'installation du site et de remettre en place les donnÃ©es. Cette opÃ©ration ne peut Ãªtre menÃ©e Ã  bien que si on a pris la sage prÃ©caution de sauvegarder ce prÃ©cieux contenu, mais pour cela, il ne suffit pas de recopier simplement les fichiers que l'on trouvera dans les dossiers d'installation de WordPress.</p>

<p>En effet, les fichiers constitutifs de WordPress, des thÃ¨mes et des plugins ne sont pas considÃ©rÃ©s comme des donnÃ©es, ce sont des Ã©lÃ©ments qui font partie de la "mÃ©canique" du site. Pour les remettre en place aprÃ¨s un gros "plantage", il suffit de rÃ©installer ces composants et de les reparamÃ©trer... mais les prÃ©cieuses donnÃ©es, le contenu des pages et des articles, ce qui peut reprÃ©senter de nombreuses heures de travail, oÃ¹ est-il ?</p>
<h2>Stockage des donnÃ©es</h2>
<p>La base de donnÃ©es de WordPress se charge de conserver et d'organiser toutes les donnÃ©es du site. En effet, chaque fois que vous rÃ©digez une page ou un article, son contenu textuel est sauvegardÃ© dans les tables de la base de donnÃ©es, il en va de mÃªme pour les liens, les mots-clÃ©s, les catÃ©gories, etc... Ã  l'exclusion des images, pour lesquelles seule la rÃ©fÃ©rence est enregistrÃ©e.<br>
Il est donc primordial d'effectuer une sauvegarde de cette base de donnÃ©es, c'est la seule faÃ§on de garantir la pÃ©rennitÃ© de votre travail.</p>
<p>Les images sont quant Ã  elles sauvegardÃ©es dans une structure de dossiers au sein de l'installation de WordPress, par dÃ©faut dans wp-content/uploads/ ensuite dans des dossiers mensuels et annuels. Cet emplacement peut toutefois Ãªtre paramÃ©trÃ© via l'interface d'administration.</p>

<p>Vous pourrez trouver toutes les informations sur la base de donnÃ©es, sa structure et son fonctionnement sur <a href="http://codex.wordpress.org/Database_Description" title="le codex WordPress" target="_blank">le codex WordPress</a></p><br>
<p style="text-align:center;"><img src="http://axxcom.fr/wp-content/uploads/2012/05/database_256.png" alt="" title="database" width="256" height="256" class="size-full wp-image-744" /></p>
<br>
<h2>Comment effectuer une sauvegarde efficace de son site ?</h2>
<p>Cela n'arrive pas qu'aux autres... n'attendez pas l'accident pour prendre vos prÃ©cautions...<br>
Il faut sauvegarder dans un premier temps tout ce qui a Ã©tÃ© modifiÃ©, aussi bien les donnÃ©es que les fichiers des thÃ¨mes ou des plugins que vous auriez retouchÃ©s Ã  postÃ©riori, comme les feuilles de style par exemple, ainsi que le contenu de la base de donnÃ©es et le contenu du dossier "uploads" oÃ¹ sont stockÃ©es les images (a moins que vous n'ayiez modifiÃ© l'emplacement par dÃ©faut).</p>
<p>Par la suite, si vous ne modifiez pas la structure ou la prÃ©sentation du site, une sauvegarde de la base de donnÃ©es seule et du dossier "uploads" devraient s'avÃ©rer suffisante. Cette sauvegarde devrait s'effectuer Ã  intervalles rÃ©guliers, en tout cas, idÃ©alement, chaque fois que vous ajouterez un article ou une page.</p>

<p>Il existe de multiples faÃ§ons d'effectuer un backup complet d'un site, de la ligne de commande jusqu'aux plugins les plus Ã©laborÃ©s. Je ne parlerai ici que la mÃ©thode classique, qui devrait cependant convenir Ã  la majoritÃ© des cas.
En ce qui concerne les fichiers, point de problÃ¨mes... il suffit d'un programme de transfert de fichiers en mode ftp tel que <a href="http://filezilla.fr/" title="Filezilla" target="_blank">Filezilla</a> et le tour est jouÃ©, ne pas oublier les dossiers contenant les images.</p>
<p>Pour la sauvegarde de la base de donnÃ©es, WordPress vous propose en natif dans la rubrique "outils" la possibilitÃ© d'exporter (et d'importer) le contenu de la base sous forme de fichier XML. Une fois la sauvegarde crÃ©Ã©e, il fichier devra Ãªtre sauvegardÃ© en local comme les autres.</p>

<p>En cas de pÃ©pin, il suffira d'effectuer l'opÃ©ration inverse, pour les fichiers, toujours grÃ¢ce au programme de ftp, quant aux donnÃ©es, via l'option "importer" de la rubrique "outils" de WordPress.</p>]]></content:encoded>
			<wfw:commentRss>http://axxcom.fr/blog/le-stockage-des-donnees-dans-wordpress/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Les zones de menus dans WordPress</title>
		<link>http://axxcom.fr/blog/les-zones-de-menus-dans-wordpress/</link>
		<comments>http://axxcom.fr/blog/les-zones-de-menus-dans-wordpress/#comments</comments>
		<pubDate>Tue, 01 May 2012 14:20:22 +0000</pubDate>
		<dc:creator>daniel</dc:creator>
				<category><![CDATA[Themes]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[programmation]]></category>
		<category><![CDATA[theme]]></category>

		<guid isPermaLink="false">http://axxcom.fr/?p=739</guid>
		<description><![CDATA[Qu'est-ce que c'est ? La plupart des thÃ¨mes WordPress proposent une ou plusieurs zones de menus, accessibles via l'interface d'administration.Â  Ces zones permettent d'ajouter, de soustraire et de rÃ©organiser les diffÃ©rents Ã©lÃ©ments de menu en quelques clics de souris. Le but de cet article est de voir de quelle faÃ§on sont dÃ©finies ces zones au [...]]]></description>
				<content:encoded><![CDATA[<h2>Qu'est-ce que c'est ?</h2>
<p>La plupart des thÃ¨mes WordPress proposent une ou plusieurs zones de menus, accessibles via l'interface d'administration.Â  Ces zones permettent d'ajouter, de soustraire et de rÃ©organiser les diffÃ©rents Ã©lÃ©ments de menu en quelques clics de souris.</p>
<p>Le but de cet article est de voir de quelle faÃ§on sont dÃ©finies ces zones au sein d'un thÃ¨me, et comment en ajouter soi-mÃªme .<br>
Depuis WordPress 3.0 un mÃ©canisme simple est Ã  la disposition des dÃ©veloppeurs afin d'intÃ©grer facilement l'accÃ¨s aux menus via le panneau d'administration, dans le menu "apparence" sous la rubrique "menus".<br>
Il s'agit des "zones de menus", vides Ã  l'origine, et que nous pouvons utiliser trÃ¨s facilement afin de crÃ©er nos propres menus, grÃ¢ce aux diffÃ©rentes listes dÃ©roulantes et cases Ã  cocher. Â A ce stade, aucune compÃ©tence en programmation n'est requise.</p>
<p>Afin de dÃ©clarer une zone de menu, la premiÃ¨re opÃ©ration Ã  rÃ©aliser est d'effectuer l'enregistrement de ladite zone via la fonction "register_nav_menu()".Â  L'appel de cette fonction s'effectue au sein du fichier "functions.php" du thÃ¨me actif, la mÃ©thode d'appel pouvant varier.</p>
<p>Voici quelques exemples :</p>
<br><p>Appel via un "hook" :</p>

<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339933;">&lt;!--</span>?php <span style="color: #000000; font-weight: bold;">function</span> mon_menu<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> &nbsp; &nbsp; register_nav_menu<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'primary'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Menu principal'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span> add_action<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'init'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'mon_menu'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> ?<span style="color: #339933;">--&gt;</span></div></div>

<br><br><p>Appel au sein d'une fonction personnalisÃ©e :</p>
<p>De nombreux thÃ¨mes dÃ©finissent dans le fichier "functions.php" une fonction destinÃ©e Ã  initialiser cetaines variables et les diffÃ©rents composants du thÃ¨me. C'est le plus souvent au sein de cette fonction que nous retrouverons notre dÃ©finition de menu.</p>
<p>Pour voir comment votre thÃ¨me appelle cette fonction, le plus simple est d'effectuer une recherche dans le fichier "functions.php".<br><br>
Quelle que soit la mÃ©thode utilisÃ©e, l'appel de la fonction s'effectuera de la faÃ§on suivante :</p><br>

<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">register_nav_menu<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'primary'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Menu principal'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>

<br><br><p>Le premier paramÃ¨tre sera l'identifiant interne, le second sera le libellÃ© qui apparaÃ®tra dans l'interface d'administration. A noter que pour garder un maximum de simplicitÃ© je n'ai pas utilisÃ© la fonction d'internationalisation sur le second paramÃ¨tre.</p>

<a title="RÃ©fÃ©rence codex WordPress" href="http://codex.wordpress.org/Function_Reference/register_nav_menu" target="_blank">La description de la fonction register_nav_menu sur le codex WordPress</a><br>
<br><p>Attention, il existe une fonction similaire et Ã  la syntaxe trÃ¨s procheÂ :Â  "register_nav_menus()"Â qui permet d'effectuer l'enregistrement de plusieurs zones de menus d'un seul jet.Â  Cette fonction prend en argument un tableau regroupant les paramÃ¨tres de chaque zone Ã  rÃ©fÃ©rencer.</p>
<br>

<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">register_nav_menus<span style="color: #009900;">&#40;</span><br />
<br />
<span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'navigation01'</span> <span style="color: #339933;">=&gt;</span> __<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'Menu01'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'navigation02'</span> <span style="color: #339933;">=&gt;</span> __<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'Menu02'</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><br />
<br />
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>

<br><br>
<a title="RÃ©fÃ©rence codex WordPress" href="http://codex.wordpress.org/Function_Reference/register_nav_menus" target="_blank">La description de la fonction register_nav_menus sur le codex WordPress</a><br><br>
<p>Une fois cette simple ligne ajoutÃ©e, la zone de menu apparait dans l'interface d'administration, il reste maintenant Ã  dÃ©finir l'emplacement de ce menu dans le thÃ¨me, et pour ce faire la fonction "wp_nav_menu()" sera introduite dans le thÃ¨me Ã  l'endroit ou nous souhaitons voir notre menu s'insÃ©rer.</p><br>

<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339933;">&lt;!--</span>?php wp_nav_menu<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$args</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> ?<span style="color: #339933;">--&gt;</span></div></div>

<br><p>Le paramÃ¨tre a passer Ã  cette fonction est du type "array", il comporte 16 Ã©lÃ©ments qui permettent de dÃ©finir la majoritÃ© des Ã©lÃ©ments constitutifs de notre menu.<br>
Voici la rÃ©fÃ©rence du codex WordPress qui dÃ©taille l'ensemble de ces paramÃ¨tresÂ  :</p>
<a title="RÃ©fÃ©rence codex WordPress" href="http://codex.wordpress.org/Function_Reference/wp_nav_menu" target="_blank">Description complÃ¨te de la fonction wp_nav_menus sur le codex WordPress</a><br><br>
<p>Tous ces Ã©lÃ©ments ne doivent pas forcÃ©ment Ãªtre initialisÃ©s lors de l'appel de la fonction, mais il faut au moins dÃ©finirÂ celui qui devra identifier l'emplacement de menu que nous avons prÃ©cÃ©demment rÃ©fÃ©rencÃ© :</p>

<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339933;">&lt;!--</span>?php wp_nav_menu<span style="color: #009900;">&#40;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'theme_location'</span> <span style="color: #339933;">=--&gt;</span> <span style="color: #0000ff;">'primary'</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></div></div>

<br><p>Voici l'exemple du menu de navigation du thÃ¨me "Twenthyeleven" dÃ©fini de cette faÃ§on dans le fichier "header.php"Â  Il faudra bien entendu s'adapter en fonction du thÃ¨me utilisÃ©.</p><br>

<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339933;">&lt;</span>nav id<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;access&quot;</span> role<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;navigation&quot;</span><span style="color: #339933;">&gt;</span><br />
<span style="color: #339933;">&lt;</span>h3 <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;assistive-text&quot;</span><span style="color: #339933;">&gt;&lt;/</span>h3<span style="color: #339933;">&gt;</span><br />
 <br />
<span style="color: #339933;">&lt;</span>div <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;skip-link&quot;</span><span style="color: #339933;">&gt;&lt;/</span>div<span style="color: #339933;">&gt;</span><br />
<span style="color: #339933;">&lt;</span>div <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;skip-link&quot;</span><span style="color: #339933;">&gt;&lt;/</span>div<span style="color: #339933;">&gt;</span><br />
<span style="color: #339933;">&lt;!--</span>?php <span style="color: #666666; font-style: italic;">/* Our navigation menu. &nbsp;If one isn't filled out, wp_nav_menu falls back to wp_page_menu. The menu assiged to the primary position is the one used. If none is assigned, the menu with the lowest ID is used. */</span> ?<span style="color: #339933;">--&gt;</span><br />
<br />
<span style="color: #339933;">&lt;!--</span>?php wp_nav_menu<span style="color: #009900;">&#40;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'theme_location'</span> <span style="color: #339933;">=--&gt;</span> <span style="color: #0000ff;">'primary'</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span><br />
<br />
<span style="color: #339933;">&lt;/</span>nav<span style="color: #339933;">&gt;</span></div></td></tr></tbody></table></div>

<br><p>Une fois le code mis en place, il suffira de passer par le panneau d'administration afin d'ajouter des pages Ã  notre notre menu et les rÃ©organiser comme bon nous semble.<br>La figure ci-dessous Â montre une partie de l'Ã©cran de gestion :</p>
<br><a class="lightbox" href="http://axxcom.fr/wp-content/uploads/2012/05/dashboard_01.png"><br>
<img class="aligncenter size-perso01 wp-image-1046" title="Cliquez sur l'image pour l'agrandir" src="http://axxcom.fr/wp-content/uploads/2012/05/dashboard_01.png" alt="dashboard WordPress" width="468" height="247" /></a><br><br>
]]></content:encoded>
			<wfw:commentRss>http://axxcom.fr/blog/les-zones-de-menus-dans-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
