<?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>L&#039;autre monde &#187; wordpress</title>
	<atom:link href="http://www.lautre-monde.fr/tag/wordpress/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.lautre-monde.fr</link>
	<description></description>
	<lastBuildDate>Wed, 28 Jul 2010 20:37:22 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>fr</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Wordpress 2.8.1 et la sécurité</title>
		<link>http://www.lautre-monde.fr/wordpress-2-8-1-et-la-securite/</link>
		<comments>http://www.lautre-monde.fr/wordpress-2-8-1-et-la-securite/#comments</comments>
		<pubDate>Sun, 12 Jul 2009 08:31:15 +0000</pubDate>
		<dc:creator>Olivier</dc:creator>
				<category><![CDATA[Web/Tech]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.lautre-monde.fr/?p=2264</guid>
		<description><![CDATA[Wordpress 2.8.1 vient tout juste de sortir. Cette version fixe son lot de bugs et un problème de sécurité lié aux plugins. Il y a désormais une vérification qui est réalisée pour chaque plugin lors du chargement des pages de ce plugin dans l&#8217;admin. Si la page demandée a bien été enregistrée via la fonction...]]></description>
			<content:encoded><![CDATA[<p>Wordpress 2.8.1 vient tout juste de sortir. Cette version fixe son lot de bugs et un <a href="http://corelabs.coresecurity.com/index.php?module=FrontEndMod&#038;action=view&#038;type=advisory&#038;name=WordPress_Privileges_Unchecked">problème de sécurité lié aux plugins</a>. Il y a désormais une vérification qui est réalisée pour chaque plugin lors du chargement des pages de ce plugin dans l&#8217;admin. Si la page demandée a bien été enregistrée via la fonction add_menu_page (ou l&#8217;une de ses variantes), tout va bien. En revanche, si le plugin fait appel à un fichier php tiers pour traiter le résultat d&#8217;un formulaire par exemple, alors là, rien ne va plus!</p>
<p>Il est donc probable que beaucoup de plugins vont avoir de gros problèmes à fonctionner après le passage en 2.8.1, notamment pour ceux qui utilisent des redirections et des fichiers de traitement.</p>
<p>Pour rendre les plugins compatibles, voici la solution. Il faut dans la fonction qui ajoute les menus enregistrer vos pages tierces via la ligne suivante :</p>
<p>$_registered_pages[get_plugin_page_hookname('&lt;plugin_dir&gt;/&lt;plugin_filename&gt;.php','')] = true;</p>
<p>Bien entendu, n&#8217;oubliez pas de déclarer au début de la fonction la variable globale $_registered_pages sinon cela ne risque pas de fonctionner.</p>
<p>J&#8217;ai utilisé cette solution avec succès pour rendre <a href="http://www.lautre-monde.fr/wats/">WATS</a> compatible avec WP 2.8.1.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lautre-monde.fr/wordpress-2-8-1-et-la-securite/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wordpress 2.8</title>
		<link>http://www.lautre-monde.fr/wordpress-28/</link>
		<comments>http://www.lautre-monde.fr/wordpress-28/#comments</comments>
		<pubDate>Thu, 11 Jun 2009 14:07:24 +0000</pubDate>
		<dc:creator>Olivier</dc:creator>
				<category><![CDATA[Web/Tech]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.lautre-monde.fr/?p=2219</guid>
		<description><![CDATA[La très attendue version 2.8 de Wordpress est enfin disponible! Elle devait au départ sortir en mars mais elle a été retardée par pas mal de bugs. Elle est enfin là, alleluia! Elle s&#8217;appelle Baker et s&#8217;installe automatiquement en un clic de souris.
Au niveau de l&#8217;admin, il n&#8217;y a pas de grands changements et c&#8217;est...]]></description>
			<content:encoded><![CDATA[<p>La très attendue version 2.8 de Wordpress est enfin disponible! Elle devait au départ sortir en mars mais elle a été retardée par pas mal de bugs. Elle est enfin là, alleluia! Elle s&#8217;appelle Baker et s&#8217;installe automatiquement en un clic de souris.</p>
<p>Au niveau de l&#8217;admin, il n&#8217;y a pas de grands changements et c&#8217;est très bien comme ça car l&#8217;interface d&#8217;admin a déjà atteint un niveau d&#8217;ergonomie proche de la perfection. Au niveau des fonctionnalités essentielles : une nouvelle interface de gestion des widgets, l&#8217;installation des themes depuis l&#8217;admin (comme pour les plugins), optimisation du chargement des scripts dans l&#8217;admin, etc&#8230; Vous pouvez voir <a href="http://codex.wordpress.org/Version_2.8">ici la liste des nouveautés</a>. Il y a plus de 180 nouvelles features et 790 fixes, joli boulot!</p>
<p>Au niveau du développement des plugins, comme jQuery est passé en V1.3, un certain nombre de plugins vont devoir être mis à jour pour faire évoluer l&#8217;ancienne notation avec un sélecteur @, celui-ci n&#8217;étant plus pris en compte en 1.3. Il y a également quelques changements apparemment dans la gestion des taxonomies. J&#8217;ai corrigé les quelques problèmes apparus dans mon système de gestion de tickets suite à cet upgrade. J&#8217;espère donc être en mesure de le publier sous peu.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lautre-monde.fr/wordpress-28/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Migration des permaliens</title>
		<link>http://www.lautre-monde.fr/migration-permaliens/</link>
		<comments>http://www.lautre-monde.fr/migration-permaliens/#comments</comments>
		<pubDate>Sun, 12 Apr 2009 15:59:40 +0000</pubDate>
		<dc:creator>Olivier</dc:creator>
				<category><![CDATA[Web/Tech]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.lautre-monde.fr/?p=2175</guid>
		<description><![CDATA[J&#8217;ai entrepris hier la migration des permaliens du blog. Sous Wordpress, c&#8217;est un jeu d&#8217;enfant ou presque puisqu&#8217;il suffit de modifier la structure dans le panneau de configuration. Je suis passé de la nomenclature /%category%/%postname%/ à /%postname%/ afin de réduire la longueur de l&#8217;url et donc de la rendre plus pertinente.
Seul problème rencontré, il existe...]]></description>
			<content:encoded><![CDATA[<p>J&#8217;ai entrepris hier la migration des permaliens du blog. Sous Wordpress, c&#8217;est un jeu d&#8217;enfant ou presque puisqu&#8217;il suffit de modifier la structure dans le panneau de configuration. Je suis passé de la nomenclature /%category%/%postname%/ à /%postname%/ afin de réduire la longueur de l&#8217;url et donc de la rendre plus pertinente.</p>
<p>Seul problème rencontré, il existe depuis quelques versions de Wordpress ce que l&#8217;on appelle la page &laquo;&nbsp;attachment&nbsp;&raquo; qui est un post vide contenant juste l&#8217;attachement en question (photo, vidéo, etc&#8230;). Si vous avez dans vos posts, une image avec le même nom que le post, la redirection n&#8217;aura pas lieu correctement après la migration <img src='http://www.lautre-monde.fr/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' title="Migration des permaliens" /> </p>
<p>Voici un exemple concret : j&#8217;ai un post &laquo;&nbsp;toto&nbsp;&raquo; dans la catégorie titi avec une photo intitulée &laquo;&nbsp;toto.jpg&nbsp;&raquo;. Vous pouvez accéder à la photo via /titi/toto/toto/ avant la migration. Après la migration, vous pourrez toujours accéder à la photo via titi/toto/ et donc l&#8217;utilisateur suivant l&#8217;ancienne URL ne sera pas redirigé vers /toto/ qui est la nouvelle URL.</p>
<p>Il existe un certain nombre de plugins fonctionnant plus ou moins bien pour gérer automatiquement les redirections 301 de l&#8217;ancienne structure vers la nouvelle :</p>
<ul>
<li><a href="http://www.deanlee.cn/wordpress/permalinks-migration-plugin/">Dean permalink migration</a> : gère correctement le cas décrit ci-dessus mais casse les liens de feed et de trackback;</li>
<li><a href="http://scott.yang.id.au/code/permalink-redirect/">Permalink redirect</a> : permet de gérer plusieurs structures antérieures apparemment mais ne gère pas le cas décrit ci-dessus.</li>
</ul>
<p>Comme aucune solution automatique ne fonctionnait à 100%, je me suis tourné vers l&#8217;indispensable plugin <a href="http://urbangiraffe.com/plugins/redirection/">redirection</a> et j&#8217;ai créé manuellement les redirections. Cela peut sembler fastidieux mais en réalité, cela ne prend que 10 minutes. Il suffit de créer un fichier .csv avec cette tête :</p>
<p style="text-align: center;">/categorie1/(.*)/,/$1/,301</p>
<p style="text-align: center;">/categorie2/(.*)/,/$1/,301</p>
<p>Ensuite vous l&#8217;importez via le panneau d&#8217;admin du plugin et ça roule! Ainsi, la redirection est forcée et on n&#8217;arrive plus sur la page de l&#8217;attachement. Bon au final, j&#8217;ai quand même passé la journée là dessus à cause de cette histoire d&#8217;attachement. En effet, il m&#8217;a fallu des heures avant de trouver le dénominateur commun à tous ces posts qui n&#8217;étaient pas redirigés correctement. Mais bon voilà maintenant, ça marche! Si vous voyez des problèmes, n&#8217;hésitez pas à me les signaler.</p>
<p>Edit du 12/04/2009 :</p>
<p>Il faut aussi deux redirections &laquo;&nbsp;do nothing&nbsp;&raquo; avant celles des catégories comme suit :</p>
<p style="text-align: center;">/category/(.*)/</p>
<p style="text-align: center;">/tag/(.*)/</p>
<p style="text-align: left;">Si vous n&#8217;insérez pas ces redirections &laquo;&nbsp;do nothing&nbsp;&raquo;, vous risquez d&#8217;avoir des matches avec vos redirections de notes et des redirections non souhaitées (notamment pour les subpages de catégories et de tags).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lautre-monde.fr/migration-permaliens/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Profiless</title>
		<link>http://www.lautre-monde.fr/profiless/</link>
		<comments>http://www.lautre-monde.fr/profiless/#comments</comments>
		<pubDate>Tue, 10 Mar 2009 20:11:52 +0000</pubDate>
		<dc:creator>Olivier</dc:creator>
				<category><![CDATA[Web/Tech]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.lautre-monde.fr/?p=2125</guid>
		<description><![CDATA[Suite à une demande sur le forum wordpress Fr, j&#8217;ai créé un petit plugin pour bloquer l&#8217;accès au profil utilisateur dans la partie admin pour les utilisateurs de niveau 0 (les subscribers). C&#8217;est pratique pour ceux qui gèrent des blogs avec des centaines d&#8217;utilisateurs et ne veulent pas que ceux-ci modifient leur profil eux mêmes.
Je mets...]]></description>
			<content:encoded><![CDATA[<p>Suite à une demande sur le forum wordpress Fr, j&#8217;ai créé un petit plugin pour bloquer l&#8217;accès au profil utilisateur dans la partie admin pour les utilisateurs de niveau 0 (les subscribers). C&#8217;est pratique pour ceux qui gèrent des blogs avec des centaines d&#8217;utilisateurs et ne veulent pas que ceux-ci modifient leur profil eux mêmes.</p>
<p>Je mets ce plugin donc à disposition de tous même si je pense qu&#8217;il aura une audience très limitée. Si vous l&#8217;utilisez, n&#8217;hésitez pas à me laisser un petit commentaire, cela fait toujours plaisir!</p>
<p>Si vous rencontrez un problème avec ce plugin, laissez moi un commentaire ou envoyer un mail via le formulaire de contact.</p>
<p>Voici le <a href="http://wordpress.org/extend/plugins/profiless/">lien de téléchargement</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lautre-monde.fr/profiless/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>JSON</title>
		<link>http://www.lautre-monde.fr/json/</link>
		<comments>http://www.lautre-monde.fr/json/#comments</comments>
		<pubDate>Wed, 18 Feb 2009 06:54:28 +0000</pubDate>
		<dc:creator>Olivier</dc:creator>
				<category><![CDATA[Web/Tech]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.lautre-monde.fr/?p=2097</guid>
		<description><![CDATA[Le JSON, vous ne savez sûrement pas ce que c&#8217;est, enfin jusqu&#8217;à aujourd&#8217;hui. Cela veut dire : &#171;&#160;Javascript Object Notation&#160;&#187;. En clair, c&#8217;est un format de données structurées qui est notamment utilisé en Ajax pour échanger des données entre le client et le server. Le JSON permet d&#8217;adopter un format commun entre le client et...]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-2098" title="json160" src="http://www.lautre-monde.fr/index.php?feedimage=wp-content/uploads/2009/02/json160.gif" alt="json160 JSON" width="160" height="160" align="left" />Le JSON, vous ne savez sûrement pas ce que c&#8217;est, enfin jusqu&#8217;à aujourd&#8217;hui. Cela veut dire : &laquo;&nbsp;Javascript Object Notation&nbsp;&raquo;. En clair, c&#8217;est un format de données structurées qui est notamment utilisé en Ajax pour échanger des données entre le client et le server. Le JSON permet d&#8217;adopter un format commun entre le client et le server ce qui fait qu&#8217;ils arrivent à se comprendre.</p>
<p>Le problème, c&#8217;est que c&#8217;est assez peu documenté. Cependant, si vous voulez passer des tableaux du client au server ou du server au client dans le cadre d&#8217;une application web javascript avec un server php, vous allez avoir du mal à vous en passer.</p>
<p>Je vais donc vous donner quelques pistes côté client et côté server pour vous familiariser avec le JSON et éviter les pièges dans lesquels je suis tombé et où j&#8217;ai perdu de nombreuses heures avant de comprendre ce qui se passait car forcément, debugger de l&#8217;ajax côté php, c&#8217;est pas très facile.</p>
<p>Alors commençons par la voie client vers server. Imaginons que notre utilisateur remplit une table qu&#8217;il va poster en ajax pour traitement par le server. Tout d&#8217;abord, il faut &laquo;&nbsp;jsonifier&nbsp;&raquo; le tableau (néologisme pour indiquer que l&#8217;on encode la table en format json). Pour cela, c&#8217;est très simple, on fait un petit appel à la fonction JSON.stringify avec comme paramètre l&#8217;id de notre tableau. Il nous retourne le tableau stringifié! <a href="http://fr.wikipedia.org/wiki/JavaScript_Object_Notation">La page de Wikipedia sur le JSON</a> vous donne une idée du format en question. En gros, c&#8217;est du style {&laquo;&nbsp;key&nbsp;&raquo;:&nbsp;&raquo;value&nbsp;&raquo;,&nbsp;&raquo;key&nbsp;&raquo;:&nbsp;&raquo;valeur&nbsp;&raquo;} avec des imbrications possibles si vous utilisez un tableau multidimensionnel. On envoie ensuite la table en ajax avec un post au server qui la récupère et là ouvrez en grand vos yeux, j&#8217;ai passé trois heures avant de comprendre ce qui se passait, il faut appliquer un stripslashes sur le tableau côté server sinon le json_decode vous renvoit un tableau vide! Voici le bout de code :</p>
<p><code>  $tableau = json_decode(stripslashes($_POST[tableau]));</code></p>
<p>Voilà, maintenant, vous savez comment récupérer le tableau, il est alors formaté correctement pour être exploité par le server.</p>
<p>Mais quid de l&#8217;autre sens? Et bien c&#8217;est à peu près pareil. On commence par encoder notre tableau avec json_encode et on le balance au client avec un echo. Voici le bout de code :<br />
<code><br />
$result = array('success' =&gt; "TRUE", 'erreur' =&gt; "Tout va bien!");<br />
echo json_encode($result);<br />
</code></p>
<p>Puis on récupère dans la fonction de résultat du call Ajax le tableau jsonifié avec un eval comme suit :<br />
<code><br />
var tableau = eval('(' + ajaxres + ')');<br />
</code></p>
<p>Et voilà, vous savez à présent comment échanger des données complexes entre le client et le server en Ajax grâce au JSON! Dernier point, pour utiliser la fonction stringify, je vous recommande de télécharger le script <a href="http://www.json.org/js.html">json2.js</a>.</p>
<table border="0">
<tbody>
<tr>
<td><img title="wordpress-plugin-button" src="http://www.lautre-monde.fr/index.php?feedimage=wp-content/uploads/2009/01/wordpress-plugin-button.jpg" alt="wordpress plugin button JSON" width="65" height="65" /></td>
<td><a href="http://www.lautre-monde.fr/comment-ecrire-un-plugin-wordpress/">Retour au sommaire du dossier sur l&#8217;écriture d&#8217;un plugin wordpress</a></td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.lautre-monde.fr/json/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Mise à jour Wordpress 2.7.1</title>
		<link>http://www.lautre-monde.fr/mise-a-jour-wordpress-271/</link>
		<comments>http://www.lautre-monde.fr/mise-a-jour-wordpress-271/#comments</comments>
		<pubDate>Wed, 11 Feb 2009 11:06:53 +0000</pubDate>
		<dc:creator>Olivier</dc:creator>
				<category><![CDATA[Web/Tech]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.lautre-monde.fr/?p=2088</guid>
		<description><![CDATA[Et voilà, le blog vient de passer en version 2.7.1 grâce au formidable tool d&#8217;automatic upgrade. Comme je sais que certains ont eu quelques problèmes lors de la mise à jour, je vous recommande de bien mettre à jour en utilisant la version fr-FR et non la version de base si vous utilisez la version...]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.lautre-monde.fr/wp-content/uploads/2009/02/wordpress-update.jpg" rel="lightbox[2088]"><img class="alignnone size-full wp-image-2089" title="wordpress-update" src="http://www.lautre-monde.fr/index.php?feedimage=wp-content/uploads/2009/02/wordpress-update.jpg" alt="wordpress update Mise à jour Wordpress 2.7.1" width="165" height="65" align="left" /></a>Et voilà, le blog vient de passer en version 2.7.1 grâce au formidable tool d&#8217;automatic upgrade. Comme je sais que certains ont eu quelques problèmes lors de la mise à jour, je vous recommande de bien mettre à jour en utilisant la version fr-FR et non la version de base si vous utilisez la version française. Si l&#8217;option pour installer la version fr-FR n&#8217;apparaît pas, soit il y a un problème de configuration sur votre blog et il ne la détecte donc pas, soit il faut attendre un peu le temps que l&#8217;API fasse un nouveau poll. Si vous voyez des bugs suite au passage en 2.7.1 sur le blog, merci de bien vouloir m&#8217;en faire part <img src='http://www.lautre-monde.fr/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' title="Mise à jour Wordpress 2.7.1" /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.lautre-monde.fr/mise-a-jour-wordpress-271/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Utiliser le nonce dans son plugin Wordpress</title>
		<link>http://www.lautre-monde.fr/utiliser-le-nonce-dans-son-plugin-wordpress/</link>
		<comments>http://www.lautre-monde.fr/utiliser-le-nonce-dans-son-plugin-wordpress/#comments</comments>
		<pubDate>Thu, 05 Feb 2009 16:05:21 +0000</pubDate>
		<dc:creator>Olivier</dc:creator>
				<category><![CDATA[Web/Tech]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.lautre-monde.fr/?p=2079</guid>
		<description><![CDATA[Vous le savez probablement, Internet est une jungle où les hackers s&#8217;amusent à trouver des failles de sécurité pour pirater les sites. Si vous écrivez un plugin wordpress, il faut essayer de le sécuriser un minimum afin d&#8217;éviter qu&#8217;il ouvre des portes d&#8217;entrée sur votre blog (voire votre base de données).
Lorsque l&#8217;on soumet un formulaire...]]></description>
			<content:encoded><![CDATA[<p>Vous le savez probablement, Internet est une jungle où les hackers s&#8217;amusent à trouver des failles de sécurité pour pirater les sites. Si vous écrivez un plugin wordpress, il faut essayer de le sécuriser un minimum afin d&#8217;éviter qu&#8217;il ouvre des portes d&#8217;entrée sur votre blog (voire votre base de données).</p>
<p>Lorsque l&#8217;on soumet un formulaire (form submit en post ou get), il y a une interaction avec le server qui va parser et exploiter les données que vous lui envoyez. Le problème est que cela doit se faire suivant une séquence bien précise avec un certain nombre de contrôles. Si un utilisateur parvient à soumettre ses données directement en outrepassant ces contrôles, il y a un risque pour le système car il peut alors soumettre n&#8217;importe quoi ou profiter de privilèges dont il ne dispose pas.</p>
<p>Le nonce field permet d&#8217;empêcher cela. Toute soumission directe sera bloquée grâce à ce système.</p>
<p>Comment est ce que cela fonctionne techniquement? Le système vous fournit une clé lors du chargement du formulaire. Vous allez soumettre au système votre formulaire rempli. Celui-ci va alors vérifier que la clé fournie est bien celle qu&#8217;il récupère dans le formulaire soumis. Si ce n&#8217;est pas le cas, cela veut dire que vous n&#8217;avez pas soumis vos données via le formulaire qu&#8217;il vous a fourni et donc il rejette la soumission!</p>
<p>Vous trouverez sur wikipedia un <a href="http://en.wikipedia.org/wiki/Cryptographic_nonce">joli schéma</a> qui explique tout ça très bien.</p>
<p>Concrètement, pour implémenter cette protection au niveau des formulaires de votre plugin, il faut procéder de la manière suivante :</p>
<p>1/ Entre les balises &lt;form&gt;&lt;/form&gt; vous insérez le code suivant :</p>
<p>&lt;form action=&nbsp;&raquo;" method=&nbsp;&raquo;post&nbsp;&raquo;&gt;<br />
&lt;?php wp_nonce_field(&#8216;myplugin-nonce-form1&#8242;); ?&gt;&lt;/form&gt;</p>
<p>2/ Au niveau de la fonction de retour du formulaire où vous avez le $_POST, vous faites le check sur le nonce :</p>
<p>if (isset($_POST['submit']))<br />
check_admin_referer(&#8216;myplugin-nonce-form1&#8242;)</p>
<p>Si vous voulez vérifier que le mécanisme fonctionne bien, insérez juste le code de la seconde partie (le check). Comme vous n&#8217;aurez pas inséré le nonce dans le formulaire, la clé ne sera pas soumise et Wordpress rejettera la soumission.</p>
<p>Si on soulève le capôt, voici ce que wordpress va insérer dans le code HTML de la page contenant le formulaire :</p>
<p>&lt;input id=&nbsp;&raquo;_wpnonce&nbsp;&raquo; name=&nbsp;&raquo;_wpnonce&nbsp;&raquo; type=&nbsp;&raquo;hidden&nbsp;&raquo; value=&nbsp;&raquo;71fd0b1cc7&#8243; /&gt;&lt;input name=&nbsp;&raquo;_wp_http_referer&nbsp;&raquo; type=&nbsp;&raquo;hidden&nbsp;&raquo; value=&nbsp;&raquo;page.php&nbsp;&raquo; /&gt;</p>
<p>Il soumet donc un champ caché et en test ensuite la valeur. Le hacker pourra toujours essayer de reproduire ça, il n&#8217;a aucune chance d&#8217;y parvenir sachant que la clé change à chaque passage.</p>
<table border="0">
<tbody>
<tr>
<td><img title="wordpress-plugin-button" src="http://www.lautre-monde.fr/index.php?feedimage=wp-content/uploads/2009/01/wordpress-plugin-button.jpg" alt="wordpress plugin button Utiliser le nonce dans son plugin Wordpress" width="65" height="65" /></td>
<td><a href="http://www.lautre-monde.fr/comment-ecrire-un-plugin-wordpress/">Retour au sommaire du dossier sur l&#8217;écriture d&#8217;un plugin wordpress</a></td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.lautre-monde.fr/utiliser-le-nonce-dans-son-plugin-wordpress/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Supprimer un menu dans l&#8217;administration</title>
		<link>http://www.lautre-monde.fr/supprimer-un-menu-dans-ladministration/</link>
		<comments>http://www.lautre-monde.fr/supprimer-un-menu-dans-ladministration/#comments</comments>
		<pubDate>Fri, 23 Jan 2009 10:11:36 +0000</pubDate>
		<dc:creator>Olivier</dc:creator>
				<category><![CDATA[Web/Tech]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.lautre-monde.fr/?p=2042</guid>
		<description><![CDATA[Ce qui est vraiment formidable avec Wordpress, c&#8217;est que l&#8217;on peut presque tout faire! Ainsi, si vous souhaitez bloquer l&#8217;accès à certains menus pour certains utilisateurs dans l&#8217;administration, c&#8217;est tout à fait possible, et ce sans modifier le code du core.
On commence par supprimer le lien vers le menu dans la barre des menus en...]]></description>
			<content:encoded><![CDATA[<p>Ce qui est vraiment formidable avec Wordpress, c&#8217;est que l&#8217;on peut presque tout faire! Ainsi, si vous souhaitez bloquer l&#8217;accès à certains menus pour certains utilisateurs dans l&#8217;administration, c&#8217;est tout à fait possible, et ce sans modifier le code du core.</p>
<p>On commence par supprimer le lien vers le menu dans la barre des menus en faisant un unset sur l&#8217;index correspondant dans la variable globale menu. Par exemple, pour bloquer l&#8217;accès à la modification du profil, je fais :</p>
<p><code>unset($menu[50]);</code></p>
<p>Pour savoir quel $menu[x] il faut unsetter, il faut regarder dans le fichier menu.php dans le répertoire wp-admin. Cette action aura pour effet de supprimer l&#8217;icône dans le menu d&#8217;admin.</p>
<p>Ce n&#8217;est pas suffisant car l&#8217;accès direct à la page est toujours possible pour celui qui en connaît l&#8217;url. Mais aucun problème, là encore, j&#8217;ai la solution! On faire un check sur la page en cours de chargement et si c&#8217;est une page pour laquelle on ne souhaite pas donner accès à l&#8217;utilisateur, on le redirige vers une autre page à laquelle on lui donne accès sinon, bonjour la boucle de redirection.</p>
<p>Voici le bout de code pour faire la manipulation. Ici je bloque l&#8217;accès à l&#8217;édition du profil pour les utilisateurs de niveau 0 et je les redirige vers le dashboard de l&#8217;admin :</p>
<p><code><br />
$requesteduri = $_SERVER['REQUEST_URI'];<br />
$destinationpage = get_option('siteurl') . '/wp-admin/index.php';<br />
$position = strpos($requesteduri, '/wp-admin/profile.php');</code></p>
<p><code>if (($position != 0) &amp;&amp; ($current_user-&gt;user_level == 0))<br />
wp_safe_redirect($destinationpage);</code></p>
<p>Donc pour résumer, pour bloquer l&#8217;accès à une page dans l&#8217;admin :</p>
<p>1/ on supprime l&#8217;entrée dans le menu;</p>
<p>2/ on met en place une redirection pour empêcher l&#8217;accès direct.</p>
<p>Ces deux actions doivent être réalisées assez tôt dans le chargement de la page. Il faut donc faire un hook sur l&#8217;action plugins_loaded par exemple, ça fonctionnera bien comme ça.</p>
<table border="0">
<tbody>
<tr>
<td><img title="wordpress-plugin-button" src="http://www.lautre-monde.fr/index.php?feedimage=wp-content/uploads/2009/01/wordpress-plugin-button.jpg" alt="wordpress plugin button Supprimer un menu dans ladministration" width="65" height="65" /></td>
<td><a href="http://www.lautre-monde.fr/comment-ecrire-un-plugin-wordpress/">Retour au sommaire du dossier sur l&#8217;écriture d&#8217;un plugin wordpress</a></td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.lautre-monde.fr/supprimer-un-menu-dans-ladministration/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>La gestion des options</title>
		<link>http://www.lautre-monde.fr/la-gestion-des-options/</link>
		<comments>http://www.lautre-monde.fr/la-gestion-des-options/#comments</comments>
		<pubDate>Mon, 12 Jan 2009 06:49:26 +0000</pubDate>
		<dc:creator>Olivier</dc:creator>
				<category><![CDATA[Web/Tech]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.lautre-monde.fr/?p=1999</guid>
		<description><![CDATA[Lorsque vous écrivez un plugin wordpress, vous allez probablement avoir des options à gérer pour adapter le fonctionnement de votre plugin en fonction des désirs de l&#8217;utilisateur.
Aucun problème, Wordpress a tout prévu! En effet, il dispose d&#8217;une table dans la base données dédiée aux options du blog et des plugins. Vous pouvez donc tout à...]]></description>
			<content:encoded><![CDATA[<p>Lorsque vous écrivez un plugin wordpress, vous allez probablement avoir des options à gérer pour adapter le fonctionnement de votre plugin en fonction des désirs de l&#8217;utilisateur.</p>
<p>Aucun problème, Wordpress a tout prévu! En effet, il dispose d&#8217;une table dans la base données dédiée aux options du blog et des plugins. Vous pouvez donc tout à fait l&#8217;utiliser pour y insérer des options supplémentaires. Là où toute la puissance de Wordpress se révèle, c&#8217;est qu&#8217;il vous fournit une surcouche pour faire tout le travail d&#8217;interfaçage avec la base de données grâce à trois fonctions get_option, add_option et update_option. La première permet de récupérer la valeur d&#8217;une option, la seconde permet d&#8217;ajouter une option et la troisième permet de mettre à jour la valeur d&#8217;une option.</p>
<p>Comme un exemple vaut mieux qu&#8217;un long discours, voici un bout de code montrant ces trois fonctions en action :<br />
<code><br />
$myplugin_settings = array();<br />
function my_plugin_load_settings()<br />
{<br />
        global $myplugin_settings;</p>
<p>        $default = array('first_module_active' => 1,<br />
 	                'second_module_active' => 1);</p>
<p>        if (!get_option('myplugin'))<br />
        {<br />
        	    add_option('myplugin', $default);<br />
        }<br />
        else<br />
        {<br />
                update_option('myplugin', $default);<br />
        }</p>
<p>        $myplugin_settings = get_option('myplugin');<br />
}<br />
</code><br />
Pour décrire rapidement ce qui se passe dans cette fonction, on imagine qu&#8217;elle est appelée à l&#8217;initialisation du plugin. On va appliquer des valeurs par défaut aux options. On teste si les options existent. Si elles n&#8217;existent pas, on les ajoute, sinon on les met à jour. Ensuite, on initialise notre variable globale avec les valeurs précédemment insérées.</p>
<table>
<tr>
<td><img title="wordpress-plugin-button" src="http://www.lautre-monde.fr/index.php?feedimage=wp-content/uploads/2009/01/wordpress-plugin-button.jpg" alt="wordpress plugin button La gestion des options" width="65" height="65" /></td>
<td><a href="http://www.lautre-monde.fr/comment-ecrire-un-plugin-wordpress/">Retour au sommaire du dossier sur l&#8217;écriture d&#8217;un plugin wordpress</a></td>
</tr>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.lautre-monde.fr/la-gestion-des-options/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Les hooks Wordpress</title>
		<link>http://www.lautre-monde.fr/les-hooks-wordpress/</link>
		<comments>http://www.lautre-monde.fr/les-hooks-wordpress/#comments</comments>
		<pubDate>Sun, 11 Jan 2009 07:11:00 +0000</pubDate>
		<dc:creator>Olivier</dc:creator>
				<category><![CDATA[Web/Tech]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.lautre-monde.fr/?p=1994</guid>
		<description><![CDATA[Comme dans tout système, le plugin fonctionne grâce aux hooks qui lui permettent de s&#8217;accrocher au coeur du système et d&#8217;ajouter ou modifier des fonctionnalités.
Il en existe des centaines dans Wordpress, très exactement 800 dans la version 2.7.
Ce site fournit une base de données des hooks avec leur fonctionnalité exacte. C&#8217;est donc une mine d&#8217;or pour...]]></description>
			<content:encoded><![CDATA[<p>Comme dans tout système, le plugin fonctionne grâce aux hooks qui lui permettent de s&#8217;accrocher au coeur du système et d&#8217;ajouter ou modifier des fonctionnalités.</p>
<p>Il en existe des centaines dans Wordpress, très exactement 800 dans la version 2.7.</p>
<p>Ce site fournit <a href="http://adambrown.info/p/wp_hooks">une base de données des hooks</a> avec leur fonctionnalité exacte. C&#8217;est donc une mine d&#8217;or pour le développeur de plugins wordpress.</p>
<p>On distingue principalement deux types de hooks : les hooks d&#8217;action et les hooks de filtrage. Pour faire simple, prenons un exemple de chaque cas. Lorsque le plugin se charge, on va utiliser un hook d&#8217;action pour appeler la fonction d&#8217;initialisation. Le hook d&#8217;action est un simple appel de fonction qui va avoir lieu lorsqu&#8217;un événement système précis a lieu. En revanche, lorsque l&#8217;on souhaite modifier le contenu d&#8217;une note, on va utiliser un hook de filtrage. Les hooks de filtrage s&#8217;appliquent plus à des flux de données que le système va analyser et modifier selon vos directives.</p>
<p>Pour ajouter un hook d&#8217;action, voici la syntaxe :<br />
<code>add_action('plugins_loaded', 'my_init_function');</code></p>
<p>Ici my_init_function sera appellée à chaque fois que le plugin sera chargé.</p>
<p>Pour ajouter un hook de filtrage, voici la syntaxe :<br />
<code>add_filter('the_content', 'my_filtering_function');</code></p>
<p>Ici my_filtering_function sera appellée à chaque fois que le contenu d&#8217;une note sera généré (lu dans la database puis passé à travers le filtre pour ensuite être affiché suivant le theme).</p>
<p>Voici un bout de code montrant ce que pourrait être le contenu de my_filtering_function :<br />
<code><br />
define("MYFILTER_REGEXP", "/\[myfilter\]/");<br />
function my_filtering_function($content)<br />
{<br />
return (preg_replace_callback(MYFILTER_REGEXP, 'my_plugin_write_content', $content));<br />
}<br />
</code><br />
Dans cet exemple, à chaque fois que Wordpress va générer le contenu, il va appeler my_filtering_function en lui passant en paramètre le contenu. Dans ma fonction, je dois retourner à Wordpress le contenu filtré. Je mets donc en place un filtrage grâce à la fonction php preg_replace_callback qui va faire un match sur le pattern défini plus haut (MYFILTER_REGEXP). A chaque fois que le contenu d&#8217;une note ou d&#8217;une page contiendra mon pattern, la fonction my_plugin_write_content sera appelée. Je pourrais alors modifier et manipuler le contenu selon mes souhaits et le retourner modifié à Wordpress. Voilà comment fonctionnent les filtres.</p>
<p>Comme il y a 800 hooks, je ne vais pas tous les détailler ici, cela serait un travail de romain. Aussi, je vous recommande d&#8217;aller voir dans la base de données pour y trouver celui qui répond à votre besoin.</p>
<table>
<tr>
<td><img title="wordpress-plugin-button" src="http://www.lautre-monde.fr/index.php?feedimage=wp-content/uploads/2009/01/wordpress-plugin-button.jpg" alt="wordpress plugin button Les hooks Wordpress" width="65" height="65" /></td>
<td><a href="http://www.lautre-monde.fr/comment-ecrire-un-plugin-wordpress/">Retour au sommaire du dossier sur l&#8217;écriture d&#8217;un plugin wordpress</a></td>
</tr>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.lautre-monde.fr/les-hooks-wordpress/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
	</channel>
</rss>
