<?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>Développement Web, Webdesign, SEO, Multimédia - Guillaume Voisin, Ingénieur Web</title>
	<atom:link href="http://www.guillaumevoisin.fr/feed" rel="self" type="application/rss+xml" />
	<link>http://www.guillaumevoisin.fr</link>
	<description>Switch on creativity !</description>
	<lastBuildDate>Wed, 16 May 2012 14:35:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Redesign thinking</title>
		<link>http://www.guillaumevoisin.fr/internet/redesign-thinking</link>
		<comments>http://www.guillaumevoisin.fr/internet/redesign-thinking#comments</comments>
		<pubDate>Wed, 16 May 2012 14:33:13 +0000</pubDate>
		<dc:creator>Gui</dc:creator>
				<category><![CDATA[Internet]]></category>

		<guid isPermaLink="false">http://www.guillaumevoisin.fr/?p=1965</guid>
		<description><![CDATA[Good designers redesign, great designers realign !]]></description>
			<content:encoded><![CDATA[<p>Une façon de dire, que redesigner from scratch n&#8217;est pas toujours la solution la plus adaptée !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.guillaumevoisin.fr/internet/redesign-thinking/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Créer un simple système de vote avec WordPress et jQuery</title>
		<link>http://www.guillaumevoisin.fr/jquery/creer-un-simple-systeme-de-vote-avec-wordpress-et-jquery</link>
		<comments>http://www.guillaumevoisin.fr/jquery/creer-un-simple-systeme-de-vote-avec-wordpress-et-jquery#comments</comments>
		<pubDate>Wed, 22 Feb 2012 14:03:11 +0000</pubDate>
		<dc:creator>Gui</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Tutoriels]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[vote]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.guillaumevoisin.fr/?p=1936</guid>
		<description><![CDATA[Si vous êtes familier avec WordPress, jQuery et l&#8217;anglais, vous pouvez suivre ce tutoriel que j&#8217;ai écrit pour le site ...]]></description>
			<content:encoded><![CDATA[<p>Si vous êtes familier avec WordPress, jQuery et l&#8217;anglais, vous pouvez suivre ce tutoriel que j&#8217;ai écrit pour le site <a title="Tutoriaux sur WordPress" href="http://wp.tutsplus.com">wp.tutsplus.com</a></p>
<p>Il explique comment facilement ajouter une fonctionnalité de vote sur les articles sans recours à un plugin.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.guillaumevoisin.fr/jquery/creer-un-simple-systeme-de-vote-avec-wordpress-et-jquery/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Twitter Bootstrap 2.0 vient de sortir !</title>
		<link>http://www.guillaumevoisin.fr/jquery/twitter-bootstrap-2-0-vient-de-sortir</link>
		<comments>http://www.guillaumevoisin.fr/jquery/twitter-bootstrap-2-0-vient-de-sortir#comments</comments>
		<pubDate>Wed, 01 Feb 2012 16:36:42 +0000</pubDate>
		<dc:creator>Gui</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.guillaumevoisin.fr/?p=1894</guid>
		<description><![CDATA[Bootstrap est un produit made in Twitter qui permet de commencer un projet avec tout un tas de styles CSS ...]]></description>
			<content:encoded><![CDATA[<p><a href="http://twitter.github.com/bootstrap/" rel="external"><strong>Bootstrap</strong> </a>est un produit made in <strong>Twitter</strong> qui permet de commencer un projet avec tout un tas de <strong>styles CSS</strong> et de <strong>composants javascript prédéfinis</strong> et ça, ça fait gagner un temps fou !</p>
<p>D&#8217;autant que les composants sont de très bonne facture offrant un design de qualité. C&#8217;est un <strong>très bon point de départ</strong> pour commencer un nouveau projet ! Ça vaut le coup d&#8217;oeil !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.guillaumevoisin.fr/jquery/twitter-bootstrap-2-0-vient-de-sortir/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Comment transformer un blog WordPress en CMS</title>
		<link>http://www.guillaumevoisin.fr/tutoriels/comment-transformer-un-blog-wordpress-en-cms</link>
		<comments>http://www.guillaumevoisin.fr/tutoriels/comment-transformer-un-blog-wordpress-en-cms#comments</comments>
		<pubDate>Tue, 31 Jan 2012 13:28:48 +0000</pubDate>
		<dc:creator>Gui</dc:creator>
				<category><![CDATA[Tutoriels]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[CMS]]></category>
		<category><![CDATA[menus]]></category>
		<category><![CDATA[metaboxes]]></category>
		<category><![CDATA[shortcodes]]></category>
		<category><![CDATA[widgets]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.guillaumevoisin.fr/?p=1801</guid>
		<description><![CDATA[WordPress est devenu maintenant un outil complet de gestion de contenu. Nous pouvons donc l&#8217;utilise pleinement en tant que CMS. ...]]></description>
			<content:encoded><![CDATA[<p><strong>WordPress</strong> est devenu maintenant un outil complet de gestion de contenu. Nous pouvons donc l&#8217;utilise pleinement en tant que <strong>CMS</strong>. Pour cela, il est important de prendre en considération différents points importants de cet outil :</p>
<ol>
<li><a title="WordPress CMS : les pages" href="http://www.guillaumevoisin.fr/tutoriels/wordpress-cms-les-pages">La gestion des pages &amp; templates</a></li>
<li><a title="Tutoriel WordPress: Créer un widget" href="http://www.guillaumevoisin.fr/tutoriels/tutoriel-wordpress-creer-un-widget">L&#8217;utilisation de widgets</a></li>
<li><a title="WordPress CMS : les metaboxes" href="http://www.guillaumevoisin.fr/tutoriels/wordpress-cms-les-metaboxes">L&#8217;utilisation des metaboxes</a></li>
<li><a title="Tip WordPress: utiliser les shortcodes" href="http://www.guillaumevoisin.fr/tips-tricks/tip-wordpress-utiliser-les-shortcodes">L&#8217;utilisation des shortcodes</a></li>
<li><a title="WordPress CMS : les menus" href="http://www.guillaumevoisin.fr/tutoriels/wordpress-cms-les-menus">La gestion des menus</a></li>
</ol>
<p><span id="more-1801"></span></p>
<p>Nous allons voir dans cet article comment <strong>transformer</strong> un blog WordPress classique un <strong>outil complet de gestion de contenu</strong>.</p>
<h2>Les pages &amp; templates</h2>
<p>Le cœur d&#8217;un site internet repose sur ses <a title="WordPress CMS : les pages" href="http://www.guillaumevoisin.fr/tutoriels/wordpress-cms-les-pages" rel="external"><strong>pages</strong></a>. Ce type de contenu est <strong>natif</strong> sur WordPress, cependant leur utilisation demeure simple. Afin d&#8217;arriver à des <strong>constructions de pages plus complexes et dynamiques</strong>, il convient de réaliser certains templates ainsi que d&#8217;ajouter des options permettant de configurer chaque page individuellement.</p>
<p>Vous trouverez toutes les informations nécessaires à l&#8217;utilisation des pages dans ce tutoriel :</p>
<article class="entry short" id="post-1823">

	
	<div class="wrap-inner">
	
		<header class="head">
		
			<h2><a href="http://www.guillaumevoisin.fr/tutoriels/wordpress-cms-les-pages" rel="bookmark" title="Lien permanent vers WordPress CMS : les pages">WordPress CMS : les pages</a></h2>
		
		</header>
		
		<div class="separator"></div>

		<div class="content">
		
			<figure class="logo">
							<a href='http://www.guillaumevoisin.fr/tutoriels/wordpress-cms-les-pages' title='WordPress CMS : les pages'><img width="150" height="150" src="http://www.guillaumevoisin.fr/blogwp/wp-content/uploads/2012/01/template-pages.jpg" class="attachment-150x150 wp-post-image" alt="WordPress CMS : les pages" title="WordPress CMS : les pages" /></a>										</figure>
		
			<div class="excerpt">

				<p>Dans une approche CMS, la partie la plus importante est donc la <strong>gestion des pages</strong>.</p>
<p>De la classique page de contact et de présentation jusqu&#8217;à la page de portfolio et de blog, nous allons voir comment gérer nos différents types de contenus et comment les mettre en page.</p>
<p class='next'><a class='button green medium' href='http://www.guillaumevoisin.fr/tutoriels/wordpress-cms-les-pages' title='Continuer la lecture de WordPress CMS : les pages'>Continuer</a></p>			
			</div>
			
			<div class="clear"></div>
			
		</div>
	
	</div>
	
</article>
<h2>Les Widgets</h2>
<p>Les <a title="Tutoriel WordPress: Créer un widget" href="http://www.guillaumevoisin.fr/tutoriels/tutoriel-wordpress-creer-un-widget" rel="external"><strong>widgets</strong></a> sont l&#8217;un des points de WordPress car ils permettent d&#8217;<strong>ajouter facilement des fonctionnalités</strong> dans un thème. Il en existe de toute sorte, du mur facebook au tweets, vous trouverez tous les widgets qu&#8217;il vous faut ici : <a href="http://wordpress.org/extend/plugins/tags/widget" rel="external">http://wordpress.org/extend/plugins/tags/widget</a>. Pour créer votre propre widget, vous pouvez vous référer à l&#8217;article suivant :</p>
<article class="entry short" id="post-972">

	
	<div class="wrap-inner">
	
		<header class="head">
		
			<h2><a href="http://www.guillaumevoisin.fr/tutoriels/tutoriel-wordpress-creer-un-widget" rel="bookmark" title="Lien permanent vers Tutoriel WordPress: Créer un widget">Tutoriel WordPress: Créer un widget</a></h2>
		
		</header>
		
		<div class="separator"></div>

		<div class="content">
		
			<figure class="logo">
							<a href='http://www.guillaumevoisin.fr/tutoriels/tutoriel-wordpress-creer-un-widget' title='Tutoriel WordPress: Créer un widget'><img width="150" height="150" src="http://www.guillaumevoisin.fr/blogwp/wp-content/uploads/2010/12/widgets.jpg" class="attachment-150x150 wp-post-image" alt="Tutoriel WordPress: Créer un widget" title="Tutoriel WordPress: Créer un widget" /></a>										</figure>
		
			<div class="excerpt">

				<p>WordPress utilise nativement un <strong>système de &laquo;&nbsp;widgets&nbsp;&raquo;</strong> dans la barre latérale (la &laquo;&nbsp;sidebar&nbsp;&raquo;). Les widgets sont intiment liés au thème utilisé. Il est possible directement depuis un thème de <strong>créer son propre widget</strong>.</p>
<p>Nous allons donc voir ici, comment <strong>créer simplement un widget</strong>, qui affichera les photos d&#8217;un compte <em><strong>Flickr </strong></em>donné.</p>
<p class='next'><a class='button green medium' href='http://www.guillaumevoisin.fr/tutoriels/tutoriel-wordpress-creer-un-widget' title='Continuer la lecture de Tutoriel WordPress: Créer un widget'>Continuer</a></p>			
			</div>
			
			<div class="clear"></div>
			
		</div>
	
	</div>
	
</article>
<h2>Les Metaboxes</h2>
<p>Les <a title="WordPress CMS : les metaboxes" href="http://www.guillaumevoisin.fr/tutoriels/wordpress-cms-les-metaboxes" rel="external"><strong>metaboxes</strong></a> sont un mécanisme très puissant permettant de <strong>configurer facilement un type de contenu spécifique</strong>. Cela se matérialise par l&#8217;ajout de &laquo;&nbsp;boîtes&nbsp;&raquo; dans l&#8217;interface d&#8217;administration d&#8217;un contenu où l&#8217;on peut saisir certaines informations que l&#8217;on pourra utiliser pour modifier le comportement de ce contenu.</p>
<p>Retrouvez toutes les clés pour créer vos propres metaboxes (de manière générique) dans cet article:</p>
<article class="entry short" id="post-1841">

	
	<div class="wrap-inner">
	
		<header class="head">
		
			<h2><a href="http://www.guillaumevoisin.fr/tutoriels/wordpress-cms-les-metaboxes" rel="bookmark" title="Lien permanent vers WordPress CMS : les metaboxes">WordPress CMS : les metaboxes</a></h2>
		
		</header>
		
		<div class="separator"></div>

		<div class="content">
		
			<figure class="logo">
							<a href='http://www.guillaumevoisin.fr/tutoriels/wordpress-cms-les-metaboxes' title='WordPress CMS : les metaboxes'><img width="150" height="150" src="http://www.guillaumevoisin.fr/blogwp/wp-content/uploads/2012/01/metaboxes1.jpg" class="attachment-150x150 wp-post-image" alt="WordPress CMS : les metaboxes" title="WordPress CMS : les metaboxes" /></a>										</figure>
		
			<div class="excerpt">

				<p>Les <strong>metabox</strong> (ou boîtes à meta information) sont des <strong>données enregistrées pour un contenu spécifique</strong> (page ou article donné) et qui permettent par exemple de facilement modifier l&#8217;affichage du contenu selon les informations saisies.</p>
<p class='next'><a class='button green medium' href='http://www.guillaumevoisin.fr/tutoriels/wordpress-cms-les-metaboxes' title='Continuer la lecture de WordPress CMS : les metaboxes'>Continuer</a></p>			
			</div>
			
			<div class="clear"></div>
			
		</div>
	
	</div>
	
</article>
<h2>Les Shortcodes</h2>
<p>Les <a title="Tip WordPress: utiliser les shortcodes" href="http://www.guillaumevoisin.fr/tips-tricks/tip-wordpress-utiliser-les-shortcodes" rel="external"><strong>shortcodes</strong></a> sont un moyen très pratique d&#8217;<strong>insérer du contenu dynamique au sein d&#8217;un contenu administrable</strong> (article ou page). Vous pouvez par exemple ajouter vos derniers tweets ou une sélection d&#8217;article (comme dans cet article) ou tout autre contenu dynamique.</p>
<p>Consultez ce tutoriel pour créer vos propres shortcodes !</p>
<article class="entry short" id="post-1565">

	
	<div class="wrap-inner">
	
		<header class="head">
		
			<h2><a href="http://www.guillaumevoisin.fr/tips-tricks/tip-wordpress-utiliser-les-shortcodes" rel="bookmark" title="Lien permanent vers Tip WordPress: utiliser les shortcodes">Tip WordPress: utiliser les shortcodes</a></h2>
		
		</header>
		
		<div class="separator"></div>

		<div class="content">
		
			<figure class="logo">
							<a href='http://www.guillaumevoisin.fr/tips-tricks/tip-wordpress-utiliser-les-shortcodes' title='Tip WordPress: utiliser les shortcodes'><img width="150" height="150" src="http://www.guillaumevoisin.fr/blogwp/wp-content/uploads/2010/09/wordpress.jpg" class="attachment-150x150 wp-post-image" alt="Tip WordPress: utiliser les shortcodes" title="Tip WordPress: utiliser les shortcodes" /></a>										</figure>
		
			<div class="excerpt">

				<p>Les <a href="http://codex.wordpress.org/Shortcode_API" rel="external">shortcodes</a> sont des <strong>macros fonctions</strong> qui peuvent être utilisées aussi bien dans les contenus d&#8217;articles qu&#8217;au sein du code d&#8217;un fichier.</p>
<p>Ils permettent d’exécuter du code sans réellement toucher au code lui même, grâce à des mots-clés du type <strong>[mafonction param1=valeur1 param2=valeur2]</strong>.</p>
<p class='next'><a class='button green medium' href='http://www.guillaumevoisin.fr/tips-tricks/tip-wordpress-utiliser-les-shortcodes' title='Continuer la lecture de Tip WordPress: utiliser les shortcodes'>Continuer</a></p>			
			</div>
			
			<div class="clear"></div>
			
		</div>
	
	</div>
	
</article>
<h2>Les Menus</h2>
<p>Point <strong>indispensable</strong> dans tout site, les <strong>menus</strong> n&#8217;ont jamais été aussi facile à configurer dans WordPress. Il est possible d&#8217;en créer plusieurs, de les place aux emplacements souhaités dans le thème et même de paramétrer leur affichage.</p>
<p>Créer vos propres menus avec l&#8217;aide de ce tutoriel :</p>
<article class="entry short" id="post-1804">

	
	<div class="wrap-inner">
	
		<header class="head">
		
			<h2><a href="http://www.guillaumevoisin.fr/tutoriels/wordpress-cms-les-menus" rel="bookmark" title="Lien permanent vers WordPress CMS : les menus">WordPress CMS : les menus</a></h2>
		
		</header>
		
		<div class="separator"></div>

		<div class="content">
		
			<figure class="logo">
							<a href='http://www.guillaumevoisin.fr/tutoriels/wordpress-cms-les-menus' title='WordPress CMS : les menus'><img width="150" height="150" src="http://www.guillaumevoisin.fr/blogwp/wp-content/uploads/2012/01/wordpress-menu.jpg" class="attachment-150x150 wp-post-image" alt="WordPress CMS : les menus" title="WordPress CMS : les menus" /></a>										</figure>
		
			<div class="excerpt">

				<p>La <strong>navigation</strong> est l&#8217;un des points les plus <strong>importants</strong> d&#8217;un bon CMS. Depuis la version <strong>3.0</strong>, il n&#8217;a jamais été aussi facile d&#8217;utiliser les menus dans WordPress.</p>
<p>Il est possible de créer autant de menus qu&#8217;on veut et d&#8217;y insérer autant d&#8217;entrées que souhaitées.</p>
<p class='next'><a class='button green medium' href='http://www.guillaumevoisin.fr/tutoriels/wordpress-cms-les-menus' title='Continuer la lecture de WordPress CMS : les menus'>Continuer</a></p>			
			</div>
			
			<div class="clear"></div>
			
		</div>
	
	</div>
	
</article>
]]></content:encoded>
			<wfw:commentRss>http://www.guillaumevoisin.fr/tutoriels/comment-transformer-un-blog-wordpress-en-cms/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>WordPress CMS : les pages</title>
		<link>http://www.guillaumevoisin.fr/tutoriels/wordpress-cms-les-pages</link>
		<comments>http://www.guillaumevoisin.fr/tutoriels/wordpress-cms-les-pages#comments</comments>
		<pubDate>Mon, 30 Jan 2012 13:39:17 +0000</pubDate>
		<dc:creator>Gui</dc:creator>
				<category><![CDATA[Tutoriels]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[CMS]]></category>
		<category><![CDATA[metaboxes]]></category>
		<category><![CDATA[shortcodes]]></category>
		<category><![CDATA[template]]></category>

		<guid isPermaLink="false">http://www.guillaumevoisin.fr/?p=1823</guid>
		<description><![CDATA[Dans une approche CMS, la partie la plus importante est donc la gestion des pages. De la classique page de ...]]></description>
			<content:encoded><![CDATA[<p>Dans une approche CMS, la partie la plus importante est donc la <strong>gestion des pages</strong>.</p>
<p>De la classique page de contact et de présentation jusqu&#8217;à la page de portfolio et de blog, nous allons voir comment gérer nos différents types de contenus et comment les mettre en page.</p>
<p><span id="more-1823"></span></p>
<p>La gestion des pages est présente depuis bien longtemps dans <strong>WordPress</strong>. Cependant, Si l&#8217;on ne veut pas réaliser uniquement de simples pages à partir de l&#8217;éditeur de texte, il faut recourir à l&#8217;utilisation de <strong>templates</strong>.</p>
<h2>Les templates</h2>
<p>Les <strong><a title="Page templates WordPress" href="http://codex.wordpress.org/Pages#Page_Templates" rel="external">templates</a></strong> sont des fichiers PHP dans votre thème permettant de modifier l&#8217;affichage d&#8217;une page. Pour déclarer un template, il suffit de créer un fichier PHP (basé sur le template de base de page.php par exemple) et d&#8217;insérer en haut le commentaire suivant :</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
/*
Template Name: Blog
*/
?&gt;
</pre>
<p>Ceci indique à WordPress que la page est un template et qu&#8217;il peut donc être utilisé pour les pages.</p>
<p><a href="http://www.guillaumevoisin.fr/?attachment_id=1826" rel="attachment wp-att-1826"><img class="aligncenter size-full wp-image-1826" title="Templates de page WordPress" src="http://www.guillaumevoisin.fr/blogwp/wp-content/uploads/2012/01/page-templates.jpg" alt="" width="293" height="303" /></a></p>
<h2>Le template Blog</h2>
<p>Voyons comment réaliser un template de page qui afficher les derniers articles.</p>
<p>Pour cela, le plus simple et propre de récupérer les articles du blog est de <strong>créer un nouvel objet <a href="http://codex.wordpress.org/Function_Reference/WP_Query" rel="external">WP_Query</a></strong> auquel nous allons passer nos arguments :</p>
<ol>
<li><strong>paged</strong> : permet de gérer la pagination</li>
<li><strong>post_type</strong> : définit le type de contenu que l&#8217;on veut afficher (<em>post</em> pour articles)</li>
<li><strong>posts_per_page</strong> : le nombre d&#8217;articles à afficher</li>
</ol>
<p>La liste complète des options est disponible ici <a href="http://codex.wordpress.org/Function_Reference/WP_Query" rel="external">sur le codex WordPress</a>.</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php

get_header();

if(is_front_page())
	$_paged = &quot;page&quot;;
else
	$_paged = &quot;paged&quot;;

$paged = (get_query_var($_paged)) ? get_query_var($_paged) : 1;
$args = array(
	'paged' 			=&gt; $paged,
	'post_type' 		=&gt; 'post',
	'posts_per_page'	=&gt; 12
);

$my_query = new WP_Query($args);

if ($my_query-&gt;have_posts()) : ?&gt;

&lt;div class=&quot;posts&quot;&gt;
&lt;?php while ($my_query-&gt;have_posts()) : $my_query-&gt;the_post();

	get_template_part(&quot;entry&quot;);

endwhile; ?&gt;
&lt;/div&gt;

&lt;?php echo paginate_links();

get_footer();
</pre>
<h2>Les shortcodes</h2>
<p>Les templates de page, c&#8217;est bien, mais on peut aussi <strong>dynamiser</strong> la création de pages en permettant de constuire du contenu &laquo;&nbsp;<strong>à la volée</strong>&nbsp;&raquo; via l&#8217;utilisation de <a title="Tip WordPress: utiliser les shortcodes" href="http://www.guillaumevoisin.fr/tips-tricks/tip-wordpress-utiliser-les-shortcodes"><strong>shortcodes</strong></a>.</p>
<p>Les <a title="Tip WordPress: utiliser les shortcodes" href="http://www.guillaumevoisin.fr/tips-tricks/tip-wordpress-utiliser-les-shortcodes"><strong>shortcodes</strong></a> sont des fonctions très utiles pour la gestion des pages car elles permettent de mettre en page du contenu (qui peut être dynamique) de manière simple.</p>
<h3>Colonnage</h3>
<p>Vous pouvez créer des shortcodes pour afficher votre contenu sous forme de colonnes.</p>
<pre class="brush: php; title: ; notranslate">
add_shortcode('display_one_third', 'display_one_third');
add_shortcode('display_two_third', 'display_two_third');
</pre>
<p>Voici un exemple de shortcode que vous pouvez insérer dans votre éditeur :</p>
<pre class="brush: xml; title: ; notranslate">
[display_one_third]Lorem ipsum ...[/display_one_third]
[display_two_third]Lorem ipsum ...[/display_two_third]
</pre>
<p>Voici le code des fonctions associées :</p>
<pre class="brush: php; title: ; notranslate">
function display_one_third($atts, $content = null)
{
	$output = &quot;&lt;div class='one-third'&gt;$content&lt;/div&gt;&quot;;

	return do_shortcode($output);
}

function display_two_third($atts, $content = null)
{
	$output = &quot;&lt;div class='two-third'&gt;$content&lt;/div&gt;&quot;;

	return do_shortcode($output);
}
</pre>
<p>Et voici les déclarations CSS associées :</p>
<pre class="brush: css; title: ; notranslate">
.one-third{ width:30.66%; float:left; margin-right:4% }
.two-third{ width:65.34%; float:left }
</pre>
<p>Voici une liste de suggestions de shortcodes qui vous permettront de gérer vos mises en pages plus facilement :</p>
<ol>
<li><a href="http://www.catswhocode.com/blog/10-super-useful-wordpress-shortcodes" rel="external">http://www.catswhocode.com/blog/10-super-useful-wordpress-shortcodes</a></li>
<li><a href="http://smashingwall.com/wordpress/shortcodes-resources/" rel="external">http://smashingwall.com/wordpress/shortcodes-resources/</a></li>
<li><a href="http://wp.tutsplus.com/articles/general/resource-roundup-20-creative-shortcodes-to-use-in-your-projects/" rel="external">http://wp.tutsplus.com/articles/general/resource-roundup-20-creative-shortcodes-to-use-in-your-projects/</a></li>
</ol>
<p>Grâce à l&#8217;utilisation de shortcodes, nous pouvons arriver à concevoir des pages complexes et dynamiques, telles que la page d&#8217;accueil de ce site :</p>
<p><a href="http://www.guillaumevoisin.fr/?attachment_id=1839" rel="attachment wp-att-1839"><img class="aligncenter size-medium wp-image-1839" title="Page d'accueil réalisée à l'aide de shortcodes" src="http://www.guillaumevoisin.fr/blogwp/wp-content/uploads/2012/01/homepage-shortcodes-552x458.png" alt="" width="552" height="458" /></a></p>
<h2>Les metaboxes</h2>
<p>Afin d&#8217;aller encore plus loin dans la personnalisation des pages (et des différents types de contenu en général), nous pouvons utiliser les <a title="WordPress CMS : les metaboxes" href="http://www.guillaumevoisin.fr/tutoriels/wordpress-cms-les-metaboxes"><strong>meta-boxes</strong></a>.</p>
<p>Ce mécanisme permet d&#8217;ajouter pour un <strong>contenu spécifique</strong> <strong>des informations utiles</strong>, par exemple pour modifier l&#8217;affichage du contenu.</p>
<p style="text-align: center;"><a href="http://wp.me/pWdn8-tH" rel="attachment wp-att-1847"><img class="aligncenter  wp-image-1847" title="Metabox pour la disposition d'une page" src="http://www.guillaumevoisin.fr/blogwp/wp-content/uploads/2012/01/metabox-page-552x153.jpg" alt="" width="552" height="153" /></a></p>
<p style="text-align: left;">Retrouvez tout ce qu&#8217;il faut savoir sur cette page : <a title="WordPress CMS : les metaboxes" href="http://www.guillaumevoisin.fr/tutoriels/wordpress-cms-les-metaboxes">WordPress : Les Meta Boxes</a></p>
<h2 style="text-align: left;">Page d&#8217;accueil</h2>
<p style="text-align: left;">La différence fondamentale entre un blog et un site &laquo;&nbsp;normal&nbsp;&raquo; est que leur page d&#8217;accueil est différente. Afin d&#8217;avoir une page d&#8217;accueil particulière dans WordPress, il suffit de modifier cet options dans <em>Réglages → Lecture.</em></p>
<p style="text-align: left;"><a href="http://www.guillaumevoisin.fr/tutoriels/wordpress-cms-les-pages/attachment/options-lecture" rel="attachment wp-att-1887"><img class="aligncenter size-full wp-image-1887" title="Modifier la page d'accueil de WordPress" src="http://www.guillaumevoisin.fr/blogwp/wp-content/uploads/2012/01/options-lecture.jpg" alt="" width="531" height="313" /></a></p>
<h2 style="text-align: left;">Conclusion</h2>
<p style="text-align: left;">En utilisant convenablement les <strong>templates</strong>, les <a title="Tip WordPress: utiliser les shortcodes" href="http://www.guillaumevoisin.fr/tips-tricks/tip-wordpress-utiliser-les-shortcodes"><strong>shortcodes</strong></a> et les <a title="WordPress CMS : les metaboxes" href="http://www.guillaumevoisin.fr/tutoriels/wordpress-cms-les-metaboxes"><strong>metaboxes</strong></a>, vous serez à même de réaliser de nombreuses mises en pages différentes et complexes pour gérer votre contenu.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.guillaumevoisin.fr/tutoriels/wordpress-cms-les-pages/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tips WordPress : bien utiliser ajax</title>
		<link>http://www.guillaumevoisin.fr/tips-tricks/tips-wordpress-bien-utiliser-ajax</link>
		<comments>http://www.guillaumevoisin.fr/tips-tricks/tips-wordpress-bien-utiliser-ajax#comments</comments>
		<pubDate>Mon, 30 Jan 2012 13:13:41 +0000</pubDate>
		<dc:creator>Gui</dc:creator>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[ajax]]></category>

		<guid isPermaLink="false">http://www.guillaumevoisin.fr/?p=1872</guid>
		<description><![CDATA[Il relativement courant d&#8217;avoir recours à l&#8217;utilisation d&#8217;ajax pour améliorer l&#8217;expérience utilisateur, cependant cette technique n&#8217;est pas toujours bien mise ...]]></description>
			<content:encoded><![CDATA[<p>Il relativement courant d&#8217;avoir recours à l&#8217;utilisation d&#8217;<strong>ajax</strong> pour améliorer l&#8217;expérience utilisateur, cependant cette technique n&#8217;est pas toujours bien mise en place.</p>
<p>En effet, il est vivement conseillé d&#8217;utiliser le <strong>système interne de WordPress</strong> pour gérer tous ses appels.</p>
<p><span id="more-1872"></span></p>
<p>En effet, beaucoup (dont moi même il y a peu) utilisions un <strong>fichier php externe</strong> dans lequel nous chargions le fichier <code>wp-load.php</code> pour accéder à toutes les fonctionnalités de <strong>WordPress</strong>. Cela correspond plus à un <strong>hack</strong> qu&#8217;à un réel ajout.</p>
<p>Voyons donc comment bien utiliser le système natif de WordPress pour la gestion d&#8217;appels ajax.</p>
<h2>Partie PHP</h2>
<h3>Hooks</h3>
<p>Le système intégré de WordPress est basé sur les <strong><a title="Bien comprendre et utiliser les hooks WordPress" href="http://www.guillaumevoisin.fr/tips-tricks/bien-comprendre-et-utiliser-les-hooks-wordpress">hooks</a></strong>. Il existe deux hooks dynamiques :</p>
<pre class="brush: php; title: ; notranslate">
// Hook exécuté pour les utilisateurs non connectés
add_action(&quot;wp_ajax_my_ACTION_NAME&quot;, &quot;my_ajax_function&quot;);

// Hook exécuté pour les utilisateurs connectés
add_action(&quot;wp_ajax_nopriv_ACTION_NAME&quot;, &quot;my_ajax_function&quot;);
</pre>
<p>La partie <em>ACTION_NAME</em> correspond au <strong>paramètre</strong> qui sera passé par le javascript.</p>
<h3>Localisation</h3>
<p>Il faut ensuite pouvoir récupérer l&#8217;URL du script de WordPress <code>admin-ajax.php</code>. Pour cela, nous pouvons ajouter un paramètre lors de l&#8217;inclusion d&#8217;un script js, via la fonction <a href="http://codex.wordpress.org/Function_Reference/wp_localize_script" rel="external"><code>wp_localize_script</code></a>.</p>
<pre class="brush: php; title: ; notranslate">
wp_enqueue_script('script', get_template_directory_uri().'/js/script.js', array('jquery'), '1.0', 1 );
wp_localize_script('script', 'ajax_var', array(
		'url' =&gt; admin_url('admin-ajax.php'),
		'nonce' =&gt; wp_create_nonce('ajax-nonce')
	)
);
</pre>
<p>Nous passons deux paramètres :</p>
<ol>
<li><strong>url</strong> : l&#8217;URL dynamique du fichier de WordPress (votre.site.com/wp-admin/admin-ajax.php)</li>
<li><strong>nonce</strong> : une sécurité pour vérifier l&#8217;authenticité des requêtes</li>
</ol>
<p>Et voici la fonction de callback des requêtes ajax :</p>
<pre class="brush: php; title: ; notranslate">
function my_ajax_function()
{
	$nonce = $_POST['nonce'];

	if ( ! wp_verify_nonce( $nonce, 'ajax-nonce' ) )
		die ( 'Interdit !');

	// Traitement
	if(isset($_POST['param']))
	{
		// ...
		echo &quot;valeur&quot;;
	}
	else
		...

	// important, pour bien récupérer la valeur de retour
	exit;
}
</pre>
<p>Après avoir vérifié que l&#8217;on récupère bien les paramètres que l&#8217;on a passés via notre script (et pas un autre, évitant ainsi des tentatives de corruption), il suffit d&#8217;effectuer le traitement désiré en pensant à bien renvoyer une valeur de retour pour le javascript.</p>
<h2>Partie Javascript</h2>
<p>Maintenant il suffit d&#8217;appeler grâce à jQuery par exemple, le script de WordPress <code>admin-ajax.php</code> et de lui passer les bons paramètres. On peut ainsi récupérer l&#8217;URL du fichier comme cela :</p>
<pre class="brush: jscript; title: ; notranslate">
var url = ajax_var.url;
var nonce = ajax_var.nonce;
</pre>
<p>&nbsp;</p>
<pre class="brush: jscript; title: ; notranslate">
$(&quot;button&quot;).click(function(){
	$.ajax({
		type: &quot;post&quot;,
		url: ajax_var.url,
		data: &quot;action=ACTION_NAME&amp;nonce=&quot;+ajax_var.nonce+&quot;&amp;param=valeur&quot;,
		success: function(msg){
			// Traitement
		}
	});
})
</pre>
<h2>Conclusion</h2>
<p>Ainsi, en utilisant le système interne de WordPress, nous nous assurons que nos appels ajax continueront à bien fonctionner avec les futures versions. L&#8217;<a title="Bien comprendre et utiliser les hooks WordPress" href="http://www.guillaumevoisin.fr/tips-tricks/bien-comprendre-et-utiliser-les-hooks-wordpress">utilisation des hooks</a> est plus propre et plus efficace.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.guillaumevoisin.fr/tips-tricks/tips-wordpress-bien-utiliser-ajax/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>WordPress CMS : les metaboxes</title>
		<link>http://www.guillaumevoisin.fr/tutoriels/wordpress-cms-les-metaboxes</link>
		<comments>http://www.guillaumevoisin.fr/tutoriels/wordpress-cms-les-metaboxes#comments</comments>
		<pubDate>Fri, 27 Jan 2012 13:27:14 +0000</pubDate>
		<dc:creator>Gui</dc:creator>
				<category><![CDATA[Tutoriels]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[affichage]]></category>
		<category><![CDATA[CMS]]></category>
		<category><![CDATA[contenu]]></category>
		<category><![CDATA[metaboxes]]></category>

		<guid isPermaLink="false">http://www.guillaumevoisin.fr/?p=1841</guid>
		<description><![CDATA[Les metabox (ou boîtes à meta information) sont des données enregistrées pour un contenu spécifique (page ou article donné) et ...]]></description>
			<content:encoded><![CDATA[<p>Les <strong>metabox</strong> (ou boîtes à meta information) sont des <strong>données enregistrées pour un contenu spécifique</strong> (page ou article donné) et qui permettent par exemple de facilement modifier l&#8217;affichage du contenu selon les informations saisies.</p>
<p><span id="more-1841"></span></p>
<p>En fait, vous les utilisez à chaque fois sans que vous le sachiez vraiment. Les <strong>catégories, tags, format</strong> etc&#8230; sont autant de metaboxes.<br />
<a href="http://www.guillaumevoisin.fr/?attachment_id=1843" rel="attachment wp-att-1843"><img class="aligncenter size-full wp-image-1843" title="Metaboxes" src="http://www.guillaumevoisin.fr/blogwp/wp-content/uploads/2012/01/metaboxes.jpg" alt="" width="300" height="548" /></a></p>
<h2>Création d&#8217;une métabox</h2>
<p>Nous allons donc voir comment créer des metaboxes de <strong>manière générique</strong> et en utiliser une pour mettre en page notre contenu. Nous allons par exemple créer une metabox pour choisir la disposition d&#8217;une page.</p>
<p><a href="http://www.guillaumevoisin.fr/?attachment_id=1847" rel="attachment wp-att-1847"><img class="aligncenter size-medium wp-image-1847" title="Metabox pour la disposition d'une page" src="http://www.guillaumevoisin.fr/blogwp/wp-content/uploads/2012/01/metabox-page-552x153.jpg" alt="" width="552" height="153" /></a></p>
<h3>Définition d&#8217;une metabox</h3>
<p>Une metabox est définie selon <a title="Définition d'une metabox sur le codex WordPress" href="http://codex.wordpress.org/Function_Reference/add_meta_box" rel="external">plusieurs paramètres</a> :</p>
<ol>
<li><strong>Identifiant</strong></li>
<li><strong>Titre</strong></li>
<li>Fonction de <strong>callback</strong> (d&#8217;affichage)</li>
<li>Le <strong>type de contenu</strong> pour lequel elle sera <strong>applicable</strong> (&#8216;post&#8217;, &#8216;page&#8217;, &#8216;link&#8217;, ou &#8216;custom_post_type&#8217;)</li>
<li><strong>L&#8217;emplacement</strong> (&#8216;normal&#8217;, &#8216;advanced&#8217;, ou &#8216;side&#8217;)</li>
<li>La <strong>priorité</strong> (l&#8217;ordre d&#8217;affichage dans la page)</li>
<li>Les <strong>arguments</strong> à passer à la fonction de callback</li>
</ol>
<p>Maintenant créez un fichier <code>metabox_options.php</code> et insérer le code suivant dedans :</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php

$themename = &quot;my_theme&quot;;
$metaboxes = array(
	'page_layout' =&gt; array(
		'title'			=&gt; __('options', $themename),
		'applicableto'	=&gt; 'page',
		'priority'		=&gt; 'low',
		'location'		=&gt; 'normal',
		'tabs'			=&gt; array(
			'page_layout_options' =&gt; array(
				'title' 	=&gt; __('layout', $themename),
				'fields' 	=&gt; array(
					'layout_sidebar' =&gt; array(
						'title'			=&gt; __('layout', $themename),
						'type' 			=&gt; 'radio',
						'description'	=&gt; __('choose page layout', $themename),
						'options'		=&gt; array('full-width' =&gt; &quot;&lt;img src='&quot;.get_template_directory_uri().'/admin/img/full-width.png'.&quot;' alt='&quot;.__('full width', $themename).&quot;' title='&quot;.__('full width', $themename).&quot;' /&gt;&quot;, 'sidebar-content' =&gt; &quot;&lt;img src='&quot;.get_template_directory_uri().'/admin/img/sidebar-content.png'.&quot;' alt='&quot;.__('left sidebar', $themename).&quot;' title='&quot;.__('left sidebar', $themename).&quot;' /&gt;&quot;, 'content-sidebar' =&gt; &quot;&lt;img src='&quot;.get_template_directory_uri().'/admin/img/content-sidebar.png'.&quot;' alt='&quot;.__('right sidebar', $themename).&quot;' title='&quot;.__('right sidebar', $themename).&quot;' /&gt;&quot;)

					)
				)
			),
			'page_options' =&gt; array(
				'title' 	=&gt; __('common options', $themename),
				'fields' 	=&gt; array(
					'display_tagline' =&gt; array(
						'title'			=&gt; __('hide page title', $themename),
						'type' 			=&gt; 'checkbox',
						'description'	=&gt; '',
						'size'			=&gt; ''
					)
				)
			)
		)
	)
);
</pre>
<p><strong>Explications</strong></p>
<p>Les options ci-dessus correspondent aux paramètres des metaboxes :</p>
<pre class="brush: php; title: ; notranslate">
$metaboxes = array(
	'metabox_ID' =&gt; array(
		'title' 	=&gt; 'Titre',
		'applicableto'	=&gt; 'Type de contenu applicable',
		'priority'		=&gt; 'Priorité',
		'location'		=&gt; 'Emplacement de la metabox',
		'tabs'			=&gt; array(
			'identifiant Onglet' =&gt; array(
				'title'		=&gt; 'Titre du premier onglet de la metabox',
				'fields'	=&gt; array(
					'identifiant Champ' =&gt; array(
						'titre champ'	=&gt; 'Titre du champ',
						'type' 			=&gt; 'Type de champ',
						'description'	=&gt; 'Description du champ',
						'options'		=&gt; '(optionel) Valeur des options si type radio'
					)
				)
			)
		)
	)
);
</pre>
<p>Les libellés et descriptions utilisent <a title="Comment traduire un thème ou plugin WordPress avec Poedit" href="http://www.guillaumevoisin.fr/tutoriels/comment-traduire-un-theme-ou-plugin-wordpress-avec-poedit"><strong>gettext pour l’internationalisation</strong></a>.</p>
<h3>Chargement des options</h3>
<p>Dans un autre fichier <code>metabox_framework.php</code>, insérer le code suivant :</p>
<pre class="brush: php; title: ; notranslate">
include_once(&quot;metaboxes_options.php&quot;);

add_action( 'admin_init', 'add_metaboxes' );

function add_metaboxes()
{
	if(!empty($metaboxes))
	{
		foreach($metaboxes as $id =&gt; $metabox)
		{
			add_meta_box($id, $metabox['title'], 'show_metaboxes', $metabox['applicableto'], $metabox['location'], $metabox['priority'], $id);
		}
	}
}
</pre>
<p>Après avoir inclus nos options, nous allons ajouter les métaboxes (informer WordPress de le faire pour nous via la fonction add_action).</p>
<h2>Affichage des metaboxes</h2>
<p>Maintenant que nos metaboxes sont créées, il nous faut les <strong>afficher dans la page d&#8217;administration</strong> du contenu adéquat.</p>
<p>Toujours dans ce dernier fichier, ajouter une fonction <strong><code>show_metaboxes()</code></strong> avec le code suivant :</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php

function show_metaboxes($post, $args)
{
	global $themename, $metaboxes;

	$custom = get_post_custom($post-&gt;ID);
	$tabs = $metaboxes[$args['id']]['tabs'];

	/** Wrapper **/

	$output = &quot;&lt;div class='metabox-wrapper'&gt;&quot;;

	/** Nonce **/
	$output .= '&lt;input type=&quot;hidden&quot; name=&quot;custom_meta_box_nonce&quot; value=&quot;'.wp_create_nonce(basename(__FILE__)).'&quot; /&gt;';

	/** Menu **/
	$output .= '&lt;div id=&quot;page_options_menu&quot;&gt;&lt;ul&gt;';

	$i = 0;
	foreach($tabs as $id =&gt; $tab)
	{
		$output .= '&lt;li';
		if($i == 0)
			$output .= ' class=&quot;active&quot;';
		$output .= '&gt;&lt;a href=&quot;#'.$id.'&quot;&gt;'.__($tab['title'], $themename).'&lt;/a&gt;&lt;/li&gt;';
		$i++;
	}

	$output .= '&lt;/ul&gt;&lt;/div&gt;';

	/** Content **/
	$output .= '&lt;div id=&quot;page_options_content&quot;&gt;&lt;div class=&quot;inner&quot;&gt;';

	foreach($tabs as $id =&gt; $tab)
	{
		$fields = $tab['fields'];

		$output .= '&lt;div class=&quot;option_content&quot; id=&quot;'.$id.'&quot;&gt;';

		$iter = 0;

		foreach($fields as $id =&gt; $field)
		{
			$output .= '&lt;div class=&quot;row&quot;&gt;
					&lt;div class=&quot;label&quot;&gt;
						&lt;label for=&quot;'.$id.'&quot;&gt;'.$field['title'].'&lt;/label&gt;';
						if(!empty($field['description']))
							$output .= '&lt;small&gt;'.$field['description'].'&lt;/small&gt;';
					$output .= '&lt;/div&gt;
					&lt;div class=&quot;value&quot;&gt;';

			switch($field['type'])
			{
				case &quot;text&quot;:
					$output .= '&lt;input type=&quot;text&quot; id=&quot;'.$id.'&quot; name=&quot;'.$id.'&quot; value=&quot;'.$custom[$id][0].'&quot; size=&quot;'.$field['size'].'&quot; /&gt;';
				break;

				case &quot;checkbox&quot;:
					$output .= '&lt;input type=&quot;checkbox&quot; id=&quot;'.$id.'&quot; name=&quot;'.$id.'&quot; size=&quot;'.$field['size'].'&quot;';
					if($custom[$id][0] == &quot;on&quot;) $output .= &quot; checked='checked'&quot;;
					$output .= '/&gt;';
				break;

				case &quot;radio&quot;:
					$output .= &quot;&lt;div class='green_block'&gt;&quot;;

					$val = $custom[$id][0];
					$radio_id = $id;

					foreach($field['options'] as $id =&gt; $label) :
						if($val == $id) $checked = ' checked=&quot;checked&quot;';
						else $checked = &quot;&quot;;
						$output .= &quot;&lt;div class='radio-option'&gt;&lt;label for='&quot;.$id.&quot;_$iter'&gt;&quot;.$label.&quot;&lt;/label&gt;&lt;input$checked type='radio' name='&quot;.$radio_id.&quot;' value='&quot;.$id.&quot;' id='&quot;.$id.&quot;_$iter' /&gt;&lt;/div&gt;&quot;;
					endforeach;
					$output .= &quot;&lt;/div&gt;&quot;;
				break;
			}

			$output .= '&lt;/div&gt;&lt;/div&gt;';

			$iter++;
		}
		$output .= '&lt;/div&gt;';
	}

	$output .= '&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;clear&quot;&gt;&lt;/div&gt;&lt;/div&gt;';

	echo $output;
}
</pre>
<p><strong>Explications</strong></p>
<p>Il y a plusieurs parties importantes dans ce code.</p>
<p>Nous allons dans un premier temps générer un <a href="http://codex.wordpress.org/WordPress_Nonces" rel="external"><strong>nonce</strong></a>, une sécurité permettant de vérifier ensuite que notre code a bien l&#8217;autorisation d&#8217;enregistrer ces informations. Puis nous allons récupérer les données déjà associées à notre contenu :</p>
<pre class="brush: php; title: ; notranslate">
$custom = get_post_custom($post-&gt;ID);
$tabs = $metaboxes[$args['id']]['tabs'];

/** Nonce **/
$output .= '&lt;input type=&quot;hidden&quot; name=&quot;custom_meta_box_nonce&quot; value=&quot;'.wp_create_nonce(basename(__FILE__)).'&quot; /&gt;';
</pre>
<p>$args['id'] est le dernier paramètre que l&#8217;on a passé à la fonction add_metabox et qui nous permet ici de récupérer les onglets de la bonne metabox.</p>
<p>Ensuite, nous allons parcourir deux fois (ceci pourrait être optimisé pour n&#8217;être fait qu&#8217;une seule fois) nos <strong>onglets</strong> pour d&#8217;une part construire le <strong>menu</strong> (les onglets) et ensuite le <strong>formulaire</strong> associé.</p>
<p>Nous faisons un switch pour afficher le contenu adéquat en fonction du type d&#8217;élément souhaité :</p>
<pre class="brush: php; title: ; notranslate">
switch($field['type'])
{
	case &quot;text&quot;:
		//
	break;

	case &quot;checkbox&quot;:
		//
	break;

	...
}
</pre>
<p>Nous aurons donc quelque qui ressemble à cela :</p>
<p><a href="http://www.guillaumevoisin.fr/?attachment_id=1865" rel="attachment wp-att-1865"><img class="aligncenter size-medium wp-image-1865" title="Affichage d'une metabox" src="http://www.guillaumevoisin.fr/blogwp/wp-content/uploads/2012/01/metabox-desc-552x153.jpg" alt="" width="552" height="153" /></a></p>
<h2>Sauvegarde des metaboxes</h2>
<p>Enfin, nous allons sauvegarder toutes nos informations en créant la fonction <code>save_metaboxes</code>.</p>
<pre class="brush: php; title: ; notranslate">
add_action( 'save_post', 'save_metaboxes' );

function save_metaboxes($post_id)
{
	global $themename, $metaboxes;

	// verify nonce
	if (!wp_verify_nonce($_POST['custom_meta_box_nonce'], basename(__FILE__)))
		return $post_id;

	// check autosave
	if (defined('DOING_AUTOSAVE') &amp;&amp; DOING_AUTOSAVE)
		return $post_id;

	// check permissions
	if ('page' == $_POST['post_type']) {
		if (!current_user_can('edit_page', $post_id))
			return $post_id;
		} elseif (!current_user_can('edit_post', $post_id)) {
			return $post_id;
	}

	$post_type = get_post_type();

	// loop through fields and save the data
	foreach($metaboxes as $id =&gt; $metabox)
	{
		// check if metabox is applicable for current post type
		if($metabox['applicableto'] == $post_type)
		{
			$tabs = $metaboxes[$id]['tabs'];

			foreach($tabs as $id =&gt; $tab)
			{
				$fields = $tab['fields'];
				foreach($fields as $id =&gt; $field)
				{
					$old = get_post_meta($post_id, $id, true);
					$new = $_POST[$id];

					if ($new &amp;&amp; $new != $old)
					{
						update_post_meta($post_id, $id, $new);
					}
					elseif ('' == $new &amp;&amp; $old || !isset($_POST[$id]))
					{
						delete_post_meta($post_id, $id, $old);
					}
				}
			}
		}
	}
}
</pre>
<p>Plusieurs étapes intéressantes dans ce code :</p>
<ol>
<li>On vérifie le <em>nonce</em>, afin de s&#8217;assurer que c&#8217;est bien notre script qui a commandé cette opération</li>
<li>On vérifie que WordPress n&#8217;est pas en train d&#8217;<strong>autosaver</strong> le post, ce qui peut causer des pertes de données</li>
<li>On s&#8217;assure que la personne connectée a les <strong>droits suffisants</strong> pour effectuer cette action</li>
<li>Enfin, on boucle sur les metaboxes</li>
<li>On vérifie qu&#8217;elles s&#8217;appliquent bien à ce <strong>type de contenu</strong> (<em>get_post_type()</em>)</li>
<li>Si le meta existe, on l&#8217;ajoute ou le modifie</li>
<li>Sinon on le supprime (afin de ne pas polluer la base)</li>
</ol>
<h2>Utilisation des metaboxes dans les templates</h2>
<p>Maintenant, nos metaboxes sont prêtes à être utilisées. Nous allons donc voir comment les exploiter au sein d&#8217;un template.</p>
<p>Pour cela, nous allons utiliser le template <code>page.php</code> pour modifier l&#8217;affichage du contenu.</p>
<p>Récupération des metas de la page courante :</p>
<pre class="brush: php; title: ; notranslate">
$options = get_post_custom($post-&gt;ID);
</pre>
<p>Puis ajuster l&#8217;affichage (inclure la sidebar ou non) :</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php

$options = get_post_custom($post-&gt;ID);
$layout = $options['layout_sidebar'][0];

if(empty($layout))
	$layout = &quot;content-sidebar&quot;;

get_header();

switch($layout)
{
	case &quot;full-width&quot;:
		the_content();
	break;

	case &quot;content-sidebar&quot;:
		the_content();
		get_sidebar();
	break;

	case &quot;sidebar-content&quot;:
		get_sidebar();
		the_content();
	break;
}

get_footer();
</pre>
<p>Ce qui nous donnera selon les cas les affichages suivants :</p>
<p><a href="http://www.guillaumevoisin.fr/?attachment_id=1864" rel="attachment wp-att-1864"><img class="aligncenter size-medium wp-image-1864" title="Configurer la disposition d'une page WordPress" src="http://www.guillaumevoisin.fr/blogwp/wp-content/uploads/2012/01/page-layout-449x552.jpg" alt="" width="449" height="552" /></a></p>
<h2>Conclusion</h2>
<p>Voilà un <strong>exemple concret et générique d&#8217;utilisation des metaboxes</strong> pour améliorer l&#8217;affichage du contenu. Vous pouvez ensuite ajouter autant de metaboxes que vous le souhaitez, simplement en rajoutant des options dans le fichier d&#8217;options, et les utiliser dans vos fichiers de template.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.guillaumevoisin.fr/tutoriels/wordpress-cms-les-metaboxes/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Comprendre l&#8217;ordre d&#8217;exécution des fichiers de template WordPress</title>
		<link>http://www.guillaumevoisin.fr/wordpress/comprendre-lordre-dexecution-des-fichiers-de-template-wordpress</link>
		<comments>http://www.guillaumevoisin.fr/wordpress/comprendre-lordre-dexecution-des-fichiers-de-template-wordpress#comments</comments>
		<pubDate>Wed, 25 Jan 2012 08:27:04 +0000</pubDate>
		<dc:creator>Gui</dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[template]]></category>

		<guid isPermaLink="false">http://www.guillaumevoisin.fr/?p=1851</guid>
		<description><![CDATA[Un article qui peut s&#8217;avérer très pratique pour bien comprendre dans quel ordre les templates sont appelés. En règle générale, ...]]></description>
			<content:encoded><![CDATA[<p>Un article qui peut s&#8217;avérer très pratique pour bien comprendre <strong>dans quel ordre les templates</strong> sont appelés.</p>
<p>En règle générale, les templates sont appelés du plus spécifique au plus générique, par exemple <em>page-slug.php</em> sera appelé avant <em>page-id.php</em> lui même appelé avant <em>page.php</em>. Plus d&#8217;information sur <a href="http://wp.tutsplus.com/tutorials/the-wordpress-theme-files-execution-hierarchy/" rel="external">WP Tuts</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.guillaumevoisin.fr/wordpress/comprendre-lordre-dexecution-des-fichiers-de-template-wordpress/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress CMS : les menus</title>
		<link>http://www.guillaumevoisin.fr/tutoriels/wordpress-cms-les-menus</link>
		<comments>http://www.guillaumevoisin.fr/tutoriels/wordpress-cms-les-menus#comments</comments>
		<pubDate>Fri, 06 Jan 2012 13:51:26 +0000</pubDate>
		<dc:creator>Gui</dc:creator>
				<category><![CDATA[Tutoriels]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[CMS]]></category>
		<category><![CDATA[menus]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.guillaumevoisin.fr/?p=1804</guid>
		<description><![CDATA[La navigation est l&#8217;un des points les plus importants d&#8217;un bon CMS. Depuis la version 3.0, il n&#8217;a jamais été ...]]></description>
			<content:encoded><![CDATA[<p>La <strong>navigation</strong> est l&#8217;un des points les plus <strong>importants</strong> d&#8217;un bon CMS. Depuis la version <strong>3.0</strong>, il n&#8217;a jamais été aussi facile d&#8217;utiliser les menus dans WordPress.</p>
<p>Il est possible de créer autant de menus qu&#8217;on veut et d&#8217;y insérer autant d&#8217;entrées que souhaitées.</p>
<p><span id="more-1804"></span></p>
<h2>Activer le support des menus</h2>
<p>Premièrement, il faut <strong>activer l&#8217;utilisation des menus</strong>. Dans le fichier functions.php de votre thème, ajouter la ligne suivante :</p>
<pre class="brush: php; title: ; notranslate">
add_theme_support( 'menus' );
</pre>
<h2>Définir l&#8217;emplacement des menus</h2>
<p>Première étape, il va s&#8217;agir de choisir <strong>où insérer nos menus</strong>. En règle générale, on ajoute un menu principal en haut de page, un deuxième sous menu dans une sidebar et peut être un dernier menu pour le footer.</p>
<h2>Enregistrement d&#8217;un menu</h2>
<p>Nous allons ensuite <strong>enregistrer nos différents menus</strong> auprès de WordPress. Toujours dans le fichier <code>functions.php</code>, insérez le code suivant :</p>
<pre class="brush: php; title: ; notranslate">
register_nav_menu( 'main_navigation', 'Navigation principale' );
register_nav_menu( 'sidebar_navigation', 'Navigation secondaire' );
register_nav_menu( 'footer_navigation', 'Navigation tertiaire' );
</pre>
<p>Ceci nous permet de configurer trois zones de menus pour notre thème. On peut les visualiser dans <strong>Apparence </strong>→<strong> Menus</strong>.</p>
<p><a href="http://www.guillaumevoisin.fr/tutoriels/wordpress-cms-les-menus/attachment/support_menu" rel="attachment wp-att-1807"><img class="aligncenter size-full wp-image-1807" title="Gestion des menus dans WordPress" src="http://www.guillaumevoisin.fr/blogwp/wp-content/uploads/2012/01/support_menu.jpg" alt="" width="294" height="343" /></a></p>
<h2>Insertion des menus dans le thème</h2>
<p>Maintenant il ne reste plus qu&#8217;à insérer nos menus aux endroits où l&#8217;on souhaite les voir.</p>
<p>Prenons l&#8217;exemple du <strong>menu principal</strong>, nous allons l&#8217;insérer dans le fichier <strong><code>header.php</code></strong>.</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
if (has_nav_menu('main_navigation')){
	wp_nav_menu(
		array(
			'container' 		=&gt; 'nav';
			'container_class' 	=&gt; 'main-menu',
			'theme_location' 	=&gt; 'main_navigation'
		)
	);
} else {
	// En cas d'absence de menu
}
?&gt;
</pre>
<p>En premier lieu, nous vérifions que le menu a bien été déclaré, puis nous définissons les <a title="Options de menu WordPress" href="http://codex.wordpress.org/Function_Reference/wp_nav_menu" rel="external">paramètres du menu</a> :</p>
<ul>
<li><strong>container</strong>: définit le &laquo;&nbsp;wrapper&nbsp;&raquo; utilisé autour de la liste du menu (ie &lt; nav &gt;)</li>
<li><strong>container_class</strong> : définit la classe à ajouter au container (pour le css)</li>
<li><strong>theme_location</strong> : définit à quel zone de menu se rattacher</li>
</ul>
<p><strong>theme_location</strong> est l&#8217;option la plus importante, car c&#8217;est elle qui va définir la zone à laquelle rattacher ce menu (préalablement déclaré avec <em>register_nav()</em>).</p>
<p>Il en va de même pour les autres menus (sidebar et footer).</p>
<h2>Créer les menus et ajouter des entrées</h2>
<p>Nos menus bien enregistrés, il suffit de se rendre dans la page d&#8217;administration des menus pour <strong>créer les différents menus</strong>.</p>
<p>Pour cela il suffit de créer trois menus dans la zone de droite en spécifiant un nom puis de les<strong> associer aux zones</strong> que nous avons définies (Navigation Principale, Secondaire et Tertiaire), dans la zone de gauche.</p>
<p><a href="http://www.guillaumevoisin.fr/tutoriels/wordpress-cms-les-menus/attachment/menus" rel="attachment wp-att-1808"><img class="aligncenter size-medium wp-image-1808" title="Création de menu WordPress" src="http://www.guillaumevoisin.fr/blogwp/wp-content/uploads/2012/01/menus-552x282.jpg" alt="" width="552" height="282" /></a></p>
<p>Ensuite, il n&#8217;y a plus qu&#8217;à ajouter des entrées au menu via drag &amp; drop.</p>
<blockquote class='alert_msg info'><span class='icon'></span> Pour ajouter une description à un menu, pensez à <strong>afficher le champ description</strong>, caché par défaut, dans les options de l&#8217;écran. </blockquote>
<h2>Modifier le code html d&#8217;un menu</h2>
<p>Il est possible de <strong>modifier le code HTML</strong> généré par WordPress par défaut pour un menu.</p>
<p>Pour cela, il faut rajouter une option lors de l&#8217;insertion du menu :</p>
<pre class="brush: php; title: ; notranslate">
wp_nav_menu(
	array(
		'walker' =&gt; new description_walker()
	)
);
</pre>
<p>Ensuite il faut surcharger la classe <code>description_walker</code> avec la méthode <code>start_el</code> dans notre fichier <code>functions.php</code>, par exemple avec :</p>
<pre class="brush: php; title: ; notranslate">
class description_walker extends Walker_Nav_Menu
{
	function start_el(&amp;$output, $item, $depth, $args)
	{
		global $wp_query, $themename;
		$indent = ( $depth ) ? str_repeat( &quot;\t&quot;, $depth ) : '';

		$class_names = $value = '';

		$classes = empty( $item-&gt;classes ) ? array() : (array) $item-&gt;classes;

		$class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item ) );
		$class_names = ' class=&quot;'. esc_attr( $class_names ) . '&quot;';

		$output .= $indent . '&lt;li id=&quot;menu-item-'. $item-&gt;ID . '&quot;' . $value . $class_names .'&gt;';

		$attributes  = ! empty( $item-&gt;attr_title ) ? ' title=&quot;'  . esc_attr( $item-&gt;attr_title ) .'&quot;' : '';
		$attributes .= ! empty( $item-&gt;target )     ? ' target=&quot;' . esc_attr( $item-&gt;target     ) .'&quot;' : '';
		$attributes .= ! empty( $item-&gt;xfn )        ? ' rel=&quot;'    . esc_attr( $item-&gt;xfn        ) .'&quot;' : '';
		$attributes .= ! empty( $item-&gt;url )        ? ' href=&quot;'   . esc_attr( $item-&gt;url        ) .'&quot;' : '';

		$item_output = $args-&gt;before;
		$item_output .= '&lt;a'. $attributes .'&gt;&lt;span class=&quot;icon&quot;&gt;&lt;/span&gt;';
		$item_output .= $args-&gt;link_before .$prepend.apply_filters( 'the_title', $item-&gt;title, $item-&gt;ID ).$append;
		$item_output .= &quot;&lt;/a&gt;&quot;;
		$item_output .= $args-&gt;after;

		$output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args );
	}
}
</pre>
<p>Plus d&#8217;informations ici : <a href="http://codex.wordpress.org/Function_Reference/Walker_Class" rel="external">http://codex.wordpress.org/Function_Reference/Walker_Class</a></p>
<h3>Modifier les classes css du menu</h3>
<p>Il est également possible d&#8217;<strong>ajouter des classes CSS à une entrée de menu</strong> en <a title="Bien comprendre et utiliser les hooks WordPress" href="http://www.guillaumevoisin.fr/tips-tricks/bien-comprendre-et-utiliser-les-hooks-wordpress" rel="external">utilisant le hook</a> <code>nav_menu_css_class</code> :</p>
<pre class="brush: php; title: ; notranslate">
add_filter('nav_menu_css_class', 'add_custom_classes');

function add_custom_classes($classes, $item)
{
    if($item-&gt;title == &quot;Blog&quot;)
	{
        $classes[] = &quot;my_custom_class&quot;;
    }

    return $classes;
}
</pre>
<h2>Conclusion</h2>
<p>A partir de là, vous pouvez créer autant de menus que vous le souhaitez, et les placer à l&#8217;endroit que vous désirez dans votre thème.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.guillaumevoisin.fr/tutoriels/wordpress-cms-les-menus/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Bien comprendre et utiliser les hooks WordPress</title>
		<link>http://www.guillaumevoisin.fr/tips-tricks/bien-comprendre-et-utiliser-les-hooks-wordpress</link>
		<comments>http://www.guillaumevoisin.fr/tips-tricks/bien-comprendre-et-utiliser-les-hooks-wordpress#comments</comments>
		<pubDate>Thu, 05 Jan 2012 12:51:05 +0000</pubDate>
		<dc:creator>Gui</dc:creator>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[actions]]></category>
		<category><![CDATA[filtres]]></category>
		<category><![CDATA[hooks]]></category>

		<guid isPermaLink="false">http://www.guillaumevoisin.fr/?p=1792</guid>
		<description><![CDATA[Les hooks (ou crochet, hameçon en français) est un mécanisme permettant d&#8217;effectuer une action supplémentaire à un instant donné prévu ...]]></description>
			<content:encoded><![CDATA[<p>Les <a title="Hooks Wodpress" href="http://codex.wordpress.org/Plugin_API/Hooks" rel="external"><strong>hooks</strong></a> (ou crochet, hameçon en français) est un mécanisme permettant d&#8217;effectuer une <strong>action supplémentaire</strong> à un instant donné prévu par le système.</p>
<p>Il existe deux types de hook dans WordPress :</p>
<ul>
<li>Les <a href="http://codex.wordpress.org/Plugin_API/Action_Reference" rel="external">actions</a></li>
<li>Les <a href="http://codex.wordpress.org/Plugin_API/Filter_Reference" rel="external">filtres</a></li>
</ul>
<p><span id="more-1792"></span></p>
<h2>Les actions</h2>
<p>Tout au long du processus de construction d&#8217;une page, WordPress place des &laquo;&nbsp;hooks&nbsp;&raquo; permettant aux développeurs d&#8217;<strong>ajouter des fonctionnalités à une étape particulière</strong>. Ainsi il est facile d&#8217;enrichir le processus avec nos propres fonctions.</p>
<p>Exemple simple, l&#8217;action &laquo;&nbsp;<a title="Plugin API/Action Reference/save post" href="http://codex.wordpress.org/Plugin_API/Action_Reference/save_post">save_post</a>&nbsp;&raquo; permet de réaliser des actions supplémentaires lors de la sauvegarde d&#8217;un post (article, page ou autre). C&#8217;est par cet intermédiaire que l&#8217;on pourra sauvegarder nos méta informations (metaboxes).</p>
<p>Voici certaines des actions importantes :</p>
<ul>
<li><a title="Plugin API/Action Reference/after setup theme" href="http://codex.wordpress.org/Plugin_API/Action_Reference/after_setup_theme">after_setup_theme</a></li>
<li><a title="Plugin API/Action Reference/wp footer" href="http://codex.wordpress.org/Plugin_API/Action_Reference/wp_footer">wp_footer</a></li>
<li><a title="Plugin API/Action Reference/wp head" href="http://codex.wordpress.org/Plugin_API/Action_Reference/wp_head">wp_head</a></li>
<li><a title="Plugin API/Action Reference/admin head" href="http://codex.wordpress.org/Plugin_API/Action_Reference/admin_head">admin_head</a></li>
<li><a title="Plugin API/Action Reference/admin enqueue scripts" href="http://codex.wordpress.org/Plugin_API/Action_Reference/admin_enqueue_scripts">admin_enqueue_scripts</a></li>
<li><a title="Plugin API/Action Reference/pre get posts" href="http://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts">pre_get_posts</a></li>
<li>&#8230;</li>
</ul>
<p>Voyons comment facilement utiliser un hook pour ajouter le code Google Analytics dans le footer de votre thème.</p>
<h3>Exemple avec wp_footer</h3>
<p>Dans un fichier comme <code>functions.php</code> par exemple, ajoutez :</p>
<pre class="brush: php; title: ; notranslate">
add_action('wp_footer', 'add_google_analytics');
</pre>
<p>Puis créez la fonction <code>add_google_analytics</code> :</p>
<pre class="brush: php; title: ; notranslate">
function add_google_analytics()
{
	$ga = get_option('google_analytics');
	if(!empty($ga))
		echo stripslashes($ga);
}
</pre>
<p>Nous aurions très bien pu ajouter ce code directement dans le fichier <code>footer.php</code>. Mais ici, le code est sorti du template, ce qui est plus lisible, maintenable et réutilisable.</p>
<h2>Les filtres</h2>
<p>Le principe des filtres est de modifier une donnée construite par WordPress avant de l&#8217;afficher.</p>
<p>Voici certains filtres utiles :</p>
<ul>
<li><a title="Plugin API/Filter Reference/body class" href="http://codex.wordpress.org/Plugin_API/Filter_Reference/body_class">body_class</a></li>
<li><a title="Plugin API/Filter Reference/the content" href="http://codex.wordpress.org/Plugin_API/Filter_Reference/the_content">the_content</a></li>
<li><a title="Plugin API/Filter Reference/wp title" href="http://codex.wordpress.org/Plugin_API/Filter_Reference/wp_title">wp_title</a></li>
<li><a href="http://codex.wordpress.org/Plugin_API/Filter_Reference/excerpt_length" rel="external">excerpt_length</a></li>
<li>&#8230;</li>
</ul>
<p>Le filtre <code>the_content</code> va permettre de modifier le contenu d&#8217;un post avant de l&#8217;afficher. Très utile si vous avez des remplacements de chaînes à faire.</p>
<p>Voyons par exemple comment modifier le [...] présent par défaut à la fin des extraits d&#8217;articles.</p>
<h3>Exemple avec get_the_excerpt</h3>
<pre class="brush: php; title: ; notranslate">
add_filter('get_the_excerpt', 'new_excerpt_hellip');
</pre>
<p>La différence avec les actions, c&#8217;est le ou les paramètres passés à notre fonction qui vont nous permettre de modifier leur valeur avant de les afficher.</p>
<pre class="brush: php; title: ; notranslate">
function new_excerpt_hellip($text)
{
   return str_replace('[...]', '...', $text);
}
</pre>
<h2>Conclusion</h2>
<p>Les <strong>hooks</strong> sont un très moyen de<strong> modifier le comportement de WordPress selon nos besoins</strong> afin soit d&#8217;y ajouter de nouvelles fonctionnalités au travers des <strong>actions</strong> ou simplement d&#8217;altérer certaines de ses méthodes via les <strong>filtres</strong>.</p>
<p>Il est donc vivement recommandé de les utiliser plutôt que d&#8217;intervenir directement dans les templates de fichier.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.guillaumevoisin.fr/tips-tricks/bien-comprendre-et-utiliser-les-hooks-wordpress/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using disk: enhanced

Served from: guillaumevoisin.fr @ 2012-05-18 13:06:43 -->
