<?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>DevBlog &#187; wordpress</title>
	<atom:link href="http://www.devblog.fr/tag/wordpress/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.devblog.fr</link>
	<description>Blog dédié aux langages web. Scripts et ressources pour webmaster.</description>
	<lastBuildDate>Thu, 02 Sep 2010 10:42:44 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Ajouter une limite à wp_list_pages dans Wordpress</title>
		<link>http://www.devblog.fr/2010/09/02/ajouter-une-limite-a-wp_list_pages-dans-wordpress/</link>
		<comments>http://www.devblog.fr/2010/09/02/ajouter-une-limite-a-wp_list_pages-dans-wordpress/#comments</comments>
		<pubDate>Thu, 02 Sep 2010 10:40:30 +0000</pubDate>
		<dc:creator>Benoit</dc:creator>
				<category><![CDATA[Non classé]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[wp_list_pages]]></category>

		<guid isPermaLink="false">http://www.devblog.fr/?p=312</guid>
		<description><![CDATA[wp_list_pages est une fonction bien pratique de Wordpress permettant d&#8217;afficher une liste non ordonnée de pages. Si elle propose de nombreux paramètres (consultables ici), il n&#8217;est pas possible de le limiter la sortie à un nombre donné de page. Pour y parvenir, la solution la plus simple est donc stocker le résultat de wp_list_pages dans [...]]]></description>
			<content:encoded><![CDATA[<p>wp_list_pages est une fonction bien pratique de Wordpress permettant d&#8217;afficher une liste non ordonnée de pages. Si elle propose de nombreux paramètres (consultables ici), il n&#8217;est pas possible de le limiter la sortie à un nombre donné de page. Pour y parvenir, la solution la plus simple est donc stocker le résultat de wp_list_pages dans une variable grâce au paramètre echo=0 de la fonction puis d&#8217;afficher via un &#8220;for&#8221; uniquement le nombre de pages souhaitées. </p>
<p>Exemple : Je souhaite afficher quelque part sur mon site les dix dernières pages mis à jour :</p>
<pre class="brush: php">
&lt;?php
//Nombre de pages
$nbpages = 10;
//Requête et stockage des résultats
$pages = wp_list_pages(&quot;title_li=&amp;depth=-1&amp;sort_column=post_modified&amp;sort_order=DESC&amp;echo=0&quot;);
//Affichage
$pages_arr = explode(&quot;\n&quot;, $pages);
for($i=0;$i&lt;$nbpages;$i++){
echo $pages_arr[$i];
}
?&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.devblog.fr/2010/09/02/ajouter-une-limite-a-wp_list_pages-dans-wordpress/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ajouter des tailles d&#8217;images dans wordpress</title>
		<link>http://www.devblog.fr/2010/08/03/ajouter-des-tailles-dimages-dans-wordpress/</link>
		<comments>http://www.devblog.fr/2010/08/03/ajouter-des-tailles-dimages-dans-wordpress/#comments</comments>
		<pubDate>Tue, 03 Aug 2010 13:13:42 +0000</pubDate>
		<dc:creator>Virginie</dc:creator>
				<category><![CDATA[Non classé]]></category>
		<category><![CDATA[images]]></category>
		<category><![CDATA[thumbnail]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.devblog.fr/?p=308</guid>
		<description><![CDATA[Par défaut, on n&#8217;a dans l&#8217;admin de Wordpress que 3 tailles d&#8217;images que l&#8217;on peut spécifier dans Réglages > Médias : thumbnail, medium, large. De plus seule la miniature peut être rognée.
Or il se peut que l&#8217;on ait besoin de plus de tailles dans un thème.

Il suffit de rajouter dans function.php :

if ( function_exists( 'add_image_size' [...]]]></description>
			<content:encoded><![CDATA[<p>Par défaut, on n&#8217;a dans l&#8217;admin de Wordpress que 3 tailles d&#8217;images que l&#8217;on peut spécifier dans Réglages > Médias : thumbnail, medium, large. De plus seule la miniature peut être rognée.</p>
<p>Or il se peut que l&#8217;on ait besoin de plus de tailles dans un thème.<br />
<span id="more-308"></span><br />
Il suffit de rajouter dans function.php :</p>
<pre class="brush:php">
if ( function_exists( 'add_image_size' ) ) {
	add_image_size( 'portfolio', 323, 178 );
	add_image_size( 'carrousel', 253, 137, true );
// etc...
}
</pre>
<p>La function add_image_size prend 4 paramètres : le nom de la taille, la largeur, la hauteur, et un booléen optionnel indiquant si on doit croper l&#8217;image (false par défaut).</p>
<p>Ensuite, pour afficher l&#8217;image souhaitée, il suffit de passer le nom de notre nouvelle taille en paramètre à la fonction wp_get_attachment_image (ou à toute autre fonction wordpress qui prend la taille de l&#8217;image en paramètre):</p>
<pre class="brush:php">
echo wp_get_attachment_image($id_attachment,'carrousel');
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.devblog.fr/2010/08/03/ajouter-des-tailles-dimages-dans-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wordpress : Des custom post types vraiment custom</title>
		<link>http://www.devblog.fr/2010/08/02/wordpress-des-custom-post-types-vraiment-custom/</link>
		<comments>http://www.devblog.fr/2010/08/02/wordpress-des-custom-post-types-vraiment-custom/#comments</comments>
		<pubDate>Mon, 02 Aug 2010 17:12:56 +0000</pubDate>
		<dc:creator>Virginie</dc:creator>
				<category><![CDATA[Non classé]]></category>
		<category><![CDATA[custom post type]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.devblog.fr/?p=291</guid>
		<description><![CDATA[L&#8217;arrivée des custom post types dans Wordpress 3 permet de gérer d&#8217;autres types que des articles et des pages. C&#8217;est une grande avancée : on peut définir de nouveaux types bien distincts, qui ont leur propre entrée dans le menu.
Cependant, ces custom post types sont un peu limités : en effet, on peut choisir quels [...]]]></description>
			<content:encoded><![CDATA[<p>L&#8217;arrivée des custom post types dans Wordpress 3 permet de gérer d&#8217;autres types que des articles et des pages. C&#8217;est une grande avancée : on peut définir de nouveaux types bien distincts, qui ont leur propre entrée dans le menu.</p>
<p>Cependant, ces custom post types sont un peu limités : en effet, on peut choisir quels champs on souhaite, mais seulement par rapport aux champs types d&#8217;un post (ou d&#8217;une page) : titre, extrait, champs personnalisés, vignette&#8230; En gros, on peut enlever des champs inutiles (ce qui est déjà pratique), mais on ne peut pas en ajouter.</p>
<p>Du coup j&#8217;ai développé un script pour ajouter des nouveaux champs. A noter que les fonctions citées ci-après vont se placer dans le fichier functions.php du thème, il n&#8217;y a donc aucune modification des entrailles de Wordpress, et par conséquent pas de problème pour mettre ce dernier à jour.<br />
<span id="more-291"></span><br />
<a href="http://www.devblog.fr/wp-content/uploads/2010/08/screen-capture-3.png"><img src="http://www.devblog.fr/wp-content/uploads/2010/08/screen-capture-3.png" alt="" title="screen-capture-3" width="800" height="433" class="alignnone size-full wp-image-293" /></a></p>
<h2>Principe</h2>
<ol>
<li>Nous créerons un custom post type, en gardant les champs qui nous intéressent.</li>
<li>Nous créerons un tableau php dans lequel nous spécifierons les nouveaux champs souhaités ainsi que leurs types.<br />
Petite remarque : pour les champs pour lesquels on souhaite une liste de cases à cocher, je vous suggère fortement d&#8217;utiliser la fonction <a href="http://codex.wordpress.org/Function_Reference/register_taxonomy">register_taxonomy</a>, qui permet d&#8217;ajouter des catégories ou tags spécifiques à un custom post. En ajoutant des catégories à votre custom post type (càd en mettant hierarchical à true), vous aurez la même interface que pour choisir des catégories.</li>
<li>Nous allons créér une fonction que nous placerons sur le hook &#8216;edit_form_advanced&#8217;. De cette façon, le texte affiché par notre fonction viendra se placer à la fin du formulaire d&#8217;édition d&#8217;un post. Nous n&#8217;oublierons pas de tester que nous sommes en train d&#8217;éditer notre custom type, sinon, nous allons affecter les formulaires de tous les posts !<br />
Cette fonction va prendre notre tableau de champs, et pour chaque élément, afficher dans le formulaire un input, un textarea, un select ou un checkbox selon le cas.</li>
<li>A l&#8217;enregistrement du post (en s&#8217;attachant au hook &#8217;save_post&#8217;), nous prendrons tous les champs de notre tableau et l&#8217;on ajoutera/mettra à jour un champ personnalisé pour cet article.</li>
</ol>
<h2>Le code</h2>
<p>Vous pouvez récupérer le code entier ici : <a href="http://devblog.fr/demo/custom-post-types/custom.txt">code php pour des custom post types vraiment custom</a>.</p>
<h2>Explication de code</h2>
<h3>Préambule : Variables</h3>
<pre class="brush:php">
global $myposttype;
global $myCustomTypeOptions;
$myposttype='moncustomposttype'; //id de mon custom post
</pre>
<p>N&#8217;ayant pas trouvé comment faire passer des paramètres à une fonction via add_action, je me suis rabattue sur la bonne ville méthode bien sale des variables globales (si qqn peut m&#8217;éclairer sur la question des paramètres via add_action, je suis preneuse).</p>
<p>Donc, on déclare deux variables globales, une pour le nom du custom post type, et une autre pour le tableau de champs de formulaires.</p>
<h3>Etape 1 : Ajout de notre custom post type classique</h3>
<p>On définit notre custom post type, on choisit les champs types qu&#8217;il supporte.<br />
On ajoute éventuellement des catégories personnalisées.</p>
<pre class="brush:php">
add_action('init', 'moncustomposttype_init');
function moncustomposttype_init()
{
	global $myposttype;

	register_post_type($myposttype, array(
		'label' => 'Custom Posts',
		'singular_label' =>'Custom Post',
		'public' => true,
		'show_ui' => true,
		'capability_type' => 'post',
		'hierarchical' => false,
		'supports' => array('title', 'editor', 'thumbnail' )
	));

	/********** pour les checkbox à choix multiples : le plus simple est de déclarer une taxonomie hiérarchique (= catégorie)  ****************/
	register_taxonomy( 'couleurs', $myposttype, array( 'hierarchical' => true, 'label' => 'couleurs', 'query_var' => true, 'rewrite' => true ) );
}
</pre>
<h3>Etape 2 : Le tableau de champs</h3>
<p>Le tableau doit être rempli ainsi :<br />
Pour chaque champs :<br />
tableau(&#8216;name&#8217;=> Label du champ,<br />
&#8216;desc&#8217; => Petite description<br />
&#8216;id&#8217;=> l&#8217;attribut &#8220;name&#8221; du champ (c&#8217;est une bonne idée de préfixer par $myposttype_)<br />
&#8216;type&#8217; => le type du champ (parmi &#8220;checkbox&#8221;, &#8220;text&#8221;, &#8220;select&#8221;, &#8220;textarea&#8221;<br />
&#8216;options&#8217; => pour le type select : tableau des valeurs d&#8217;options<br />
&#8217;std&#8217;=>; la valeur par défaut )</p>
<pre class="brush:php">
$myCustomTypeOptions = array (
	array(
		'name' => 'Mon champ text',
        'desc' => 'Description 1',
        'id' => $myposttype.'_champtexte',
        'type' => 'text',
        'std' => ''),
     array(
		'name' => 'Mon textarea',
        'desc' => 'Description 2',
        'id' => $myposttype.'_textarea',
        'type' => 'textarea',
        'std' => 'Youpi'),
    array(
		'name' => 'Mon select',
        'desc' => '',
        'id' => $myposttype.'_choix',
        'type' => 'select',
        'options' => array('choix 1','choix 2','choix 3'),
        'std' => 'choix 2'),
	array(
		'name' => 'Mon checkbox',
        'desc' => 'Case à cocher',
        'id' => $myposttype.'_case',
        'type' => 'checkbox',
        'std' => '1')
);
</pre>
<h3>Etape 3 &#8211; La fonction qui ajoute les champs au formulaire</h3>
<pre class="brush:php">
/************** à la fin du formulaire, ajout des champs définis dans $myCustomTypeOptions ***********/
add_action('edit_form_advanced', 'moncustomposttype_form');
add_action('save_post', 'moncustomposttype_save');
function moncustomposttype_form(){

	global $myposttype;
	global $myCustomTypeOptions;

	if((isset($_GET['post_type'])) and ($_GET['post_type']==$myposttype)) /* formulaire d'ajout */
	{
		echo '
<div class="meta-box-sortables ui-sortable">';
		/* formulaire vide (ou avec les valeurs par défaut) */
		foreach ($myCustomTypeOptions as $o)
		{
			echo '
<div class="postbox">';
			echo '
<h3 class="hndle"><span>'.$o['name'].'</span></h3>
<div class="inside"><label class="screen-reader-text" for="'.$o['id'].'">'.$o['name'].'</label>';

			//fonction pour afficher le bon html en fonction du type, définie ci-après
			echo get_champ($o,$o['std']);			

			if($o['desc']!='')
				echo '

'.$o['desc'].'

';

			echo '</div>
</div>

';
		}
		echo '</div>

';

	}
	else{
		if(!isset($_GET['post_type']))
		{
			if(isset($_GET['post']))
			{
				if(get_post_type($_GET['post'])==$myposttype) /* formulaire de modification */
				{
					$id=$_GET['post'];

					/* formulaire prérempli avec les valeurs pré-existantes */
					echo '
<div class="meta-box-sortables ui-sortable">';
					foreach ($myCustomTypeOptions as $o)
					{
						echo '
<div class="postbox">';
						echo '
<h3 class="hndle"><span>'.$o['name'].'</span></h3>
<div class="inside"><label class="screen-reader-text" for="'.$o['id'].'">'.$o['name'].'</label>';

						echo get_champ($o,get_post_meta($id, $o['id'], true));			

						if($o['desc']!='')
							echo '

'.$o['desc'].'

';

						echo '</div>
</div>

';
					}
					echo '</div>

';
				}
			}
		}
	}
}

function get_champ($o,$val)
{
	switch ($o['type'])
	{
		case 'textarea':
			echo '	<textarea rows="2" cols="40" name="'.$o['id'].'" id="'.$o['id'].'">'.$val.'</textarea>';
			break;
		case 'text':
			echo '
<input type="text" style="width:100%;" name="'.$o['id'].'" id="'.$o['id'].'" value="'.$val.'"/>';
			break;
		case 'checkbox':
			echo '
<input type="checkbox" name="'.$o['id'].'" id="'.$o['id'].'" value="1" ';
			if($val==1)
				echo 'checked="checked';
			echo '/><label for="'.$o['id'].'">'.$o['name'].'</label>';
			break;
		case 'select':
			echo '
<select name="'.$o['id'].'" style="width:100%;" id="'.$o['id'].'"><option value="">-</option>';
			foreach($o['options'] as $opt)
			{
				echo '<option value="'.$opt.'"';
				if($opt==$val)
					echo 'selected="selected"';
				echo '>'.$opt.'</option>';
			}
			echo'</select>

';
			break;
	}

}
</pre>
<h3>Etape 4 : Sauvegarder nos champs dans des champs personnalisés</h3>
<pre class="brush:php">
/***************** Lors de la sauvegarde, ajout/modification d'un custom field par champs de $myCustomTypeOptions ***********/
function moncustomposttype_save(){

	global $myposttype;
	global $myCustomTypeOptions;

	if(isset($_POST['post_ID']))
	{
		$id=$_REQUEST['post_ID'];
		if(get_post_type($id)==$myposttype) /* si on édite bien un post du type $myposttype */
		{
			foreach ($myCustomTypeOptions as $o)
			{
if(isset($_POST[$o['id']]))
				update_post_meta($id, $o['id'], $_POST[$o['id']]);
			}
		}
	}
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.devblog.fr/2010/08/02/wordpress-des-custom-post-types-vraiment-custom/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Améliorer les performances de Wordpress avec &#8220;Quick Cache&#8221;</title>
		<link>http://www.devblog.fr/2010/05/25/ameliorer-les-performances-de-wordpress-avec-quick-cache/</link>
		<comments>http://www.devblog.fr/2010/05/25/ameliorer-les-performances-de-wordpress-avec-quick-cache/#comments</comments>
		<pubDate>Tue, 25 May 2010 13:30:15 +0000</pubDate>
		<dc:creator>Benoit</dc:creator>
				<category><![CDATA[Non classé]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.devblog.fr/?p=255</guid>
		<description><![CDATA[J&#8217;ai longtemps cherché et enfin trouvé un plugin de cache performant pour Wordpress.
Le principe est simple : générer des fichiers &#8220;statiques&#8221; qui seront servis aux visiteurs afin d&#8217;économiser le serveur. Notamment en évitant de surcharger inutilement le serveur MySQL et soulager le CPU en évitant un recours systématique à PHP.
Quick Cache puisque c&#8217;est son nom, [...]]]></description>
			<content:encoded><![CDATA[<p>J&#8217;ai longtemps cherché et enfin trouvé un plugin de cache performant pour Wordpress.</p>
<p>Le principe est simple : générer des fichiers &#8220;statiques&#8221; qui seront servis aux visiteurs afin d&#8217;économiser le serveur. Notamment en évitant de surcharger inutilement le serveur MySQL et soulager le CPU en évitant un recours systématique à PHP.</p>
<p><a href="http://wordpress.org/extend/plugins/quick-cache/">Quick Cache</a> puisque c&#8217;est son nom, s&#8217;installe sans problème et dispose d&#8217;un back-office très bien fait. Avec à la clé une mise en place très simple : activer simplement la fonction de cache (première option proposée), et des performances au rendez-vous. Incontournable pour tout ceux qui veulent améliorer les performances de leur site Wordpress.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.devblog.fr/2010/05/25/ameliorer-les-performances-de-wordpress-avec-quick-cache/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wordpress 2.9 en français désormais disponible</title>
		<link>http://www.devblog.fr/2010/01/05/wordpress-2-9-en-francais-desormais-disponible/</link>
		<comments>http://www.devblog.fr/2010/01/05/wordpress-2-9-en-francais-desormais-disponible/#comments</comments>
		<pubDate>Tue, 05 Jan 2010 13:06:51 +0000</pubDate>
		<dc:creator>Benoit</dc:creator>
				<category><![CDATA[Une]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[wordpress 2.9]]></category>

		<guid isPermaLink="false">http://www.devblog.fr/?p=185</guid>
		<description><![CDATA[Wordpress, le plus célèbre et peut-être le meilleur outil de gestion de contenu open source est désormais disponible en version 2.9 (et même 2.9.1 depuis quelques heures). Entièrement localisé en français , il intègre de nouvelles fonctionnalités bien sympathiques comme un éditeur d&#8217;images et une corbeille.
L&#8217;éditeur d&#8217;images, disponible lors de l&#8217;upload ou directement via le [...]]]></description>
			<content:encoded><![CDATA[<p>Wordpress, le plus célèbre et peut-être le meilleur outil de gestion de contenu open source est désormais disponible en version 2.9 (et même 2.9.1 depuis quelques heures). Entièrement <a href="http://fr.wordpress.org/">localisé en français </a>, il intègre de nouvelles fonctionnalités bien sympathiques comme un éditeur d&#8217;images et une corbeille.</p>
<p>L&#8217;éditeur d&#8217;images, disponible lors de l&#8217;upload ou directement via le gestionnaire de médias, permet notamment de rogner et de redimensionner les images uploadées. Simple et convivial l&#8217;éditeur apporte un vrai plus en supprimant l&#8217;étape souvent longue et ennuyeuse de la préparation de ses illustrations via son logiciel de retouche habituel.</p>
<p>Concernant la corbeille, c&#8217;était quelque chose d&#8217;évidement attendu puisque déjà disponible sur bon nombre de CMS.</p>
<p>Rayon déception, on attendra encore pour une meilleure prise en charge de la gestion de l&#8217;ordre des pages et un gestionnaire de média plus professionnel.  A quand la gestion de répertoires ? Peut-être pour la version 3.0, annoncée pour mars prochain.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.devblog.fr/2010/01/05/wordpress-2-9-en-francais-desormais-disponible/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
