<?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>Diije</title>
	<atom:link href="http://www.diije.fr/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.diije.fr</link>
	<description>SEO, WordPress &#38; cie</description>
	<lastBuildDate>Thu, 10 May 2012 06:37:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Astuce plugin WordPress : WyPiekacz</title>
		<link>http://www.diije.fr/wordpress-astuce-rapide-wypiekacz/</link>
		<comments>http://www.diije.fr/wordpress-astuce-rapide-wypiekacz/#comments</comments>
		<pubDate>Wed, 25 Apr 2012 08:00:19 +0000</pubDate>
		<dc:creator>Julien Deneuville</dc:creator>
				<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.diije.fr/?p=349</guid>
		<description><![CDATA[Dans le contexte actuel, bon nombre de webmasters de sites de communiqués de presse se font du souci et font le ménage sur leurs sites. Pour beaucoup, un excellent moyen de faire un premier tri automatique des articles soumis est &#8230; <a href="http://www.diije.fr/wordpress-astuce-rapide-wypiekacz/">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Dans le contexte actuel, bon nombre de webmasters de sites de communiqués de presse se font du souci et font le ménage sur leurs sites.<br />
Pour beaucoup, un excellent moyen de faire un premier tri automatique des articles soumis est le plugin WordPress <a href="http://wordpress.org/extend/plugins/wypiekacz/">WyPiekacz</a>, dont vous pourrez trouver une <a href="http://boost.bookmarks.fr/WyPiekacz-FR.zip">traduction en français</a> réalisée par l&#8217;excellent <a href="http://twitter.com/bertimus">bertimus</a>.<br />
Ce plugin bien utile permet d&#8217;appliquer automatiquement des règles pour forcer par exemple un nombre minimum de mots ou maximum de liens. Si un article ne respecte pas les règles configurées, il reste en brouillon et le plugin nous affiche un beau message en rouge qui nous explique pourquoi on n&#8217;a pas le droit de publier.<br />
<span id="more-349"></span><br />
Jusqu&#8217;ici tout va bien. Sauf que, quand on modifie l&#8217;article concerné et qu&#8217;on le publie, le message reste stocké en base de données, dans la table <code>wp_postmeta</code>. Rien de grave quand on ne parle que de quelques articles, mais sur un site un peu fréquenté, ça peut représenter des centaines d&#8217;enregistrements en base.</p>
<p>Alors voilà une petite commande SQL à exécuter sur votre base de données et qui m&#8217;a fait gagner <strong>jusqu&#8217;à 60Mo</strong> sur un des sites que j&#8217;administre :p</p>
<pre class="brush: sql; title: ; notranslate">DELETE FROM wp_postmeta WHERE 'meta_key' = 'WyPiekacz_msg';</pre>
<p>Prenez soin de remplacer le préfixe wp_ par le préfixe correspondant à votre configuration !</p>
<p>Attention quand même quand vous modifiez votre base de données en live, pensez à faire une sauvegarde <img src='http://www.diije.fr/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Il ne reste plus qu&#8217;à espérer que le plugin soit mis à jour pour prendre en compte ce bug.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.diije.fr/wordpress-astuce-rapide-wypiekacz/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Installer votre serveur de développement en local avec VirtualBox et Ubuntu Server</title>
		<link>http://www.diije.fr/installer-serveur-developpement-local-virtualbox-ubuntu-server/</link>
		<comments>http://www.diije.fr/installer-serveur-developpement-local-virtualbox-ubuntu-server/#comments</comments>
		<pubDate>Wed, 11 Apr 2012 08:30:39 +0000</pubDate>
		<dc:creator>Julien Deneuville</dc:creator>
				<category><![CDATA[Divers]]></category>

		<guid isPermaLink="false">http://www.diije.fr/?p=226</guid>
		<description><![CDATA[Lorsque l&#8217;on développe des sites web, il est bien utile d&#8217;avoir un serveur où faire ses tests, ne serait-ce que pour éviter de casser un site déjà en ligne. Pour cette raison, il n&#8217;est pas rare d&#8217;installer sur sa machine &#8230; <a href="http://www.diije.fr/installer-serveur-developpement-local-virtualbox-ubuntu-server/">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Lorsque l&#8217;on développe des sites web, il est bien utile d&#8217;avoir un serveur où faire ses tests, ne serait-ce que pour éviter de casser un site déjà en ligne. Pour cette raison, il n&#8217;est pas rare d&#8217;installer sur sa machine locale des programmes tels que EasyPHP ou WAMP Server (sous windows). Mais ces logiciels sont souvent assez limités, et parfois assez loin de la réalité d&#8217;un serveur web. Pour cette raison, j&#8217;ai pour habitude de configurer une machine virtuelle me servant de serveur local, sur laquelle j&#8217;installerai le strict minimum pour faire tourner mes projets en cours de développement. Le but du jeu est de configurer la machine virtuelle pour qu&#8217;elle fonctionne exactement de la même façon que si je me connectais à un serveur distant chez mon hébergeur.</p>
<p><img alt="VirtualBox &#038; Ubuntu Server, c&#039;est de la dynamite !" src="http://www.diije.fr/wp-content/uploads/2012/05/virtualbox-ubuntu-1.jpg" title="VirtualBox &#038; Ubuntu Server" class="aligncenter" width="550" height="183" /></p>
<p>Puisque la configuration d&#8217;une telle machine est parfois un poil compliquée, voici un tutoriel pour créer pas à pas votre propre serveur local avec VirtualBox et Ubuntu Serveur.<span id="more-226"></span></p>
<h2>Installer VirtualBox</h2>
<p>Tout d&#8217;abord, pourquoi VirtualBox ? Bah, parce que c&#8217;est gratuit, déjà. Et mine de rien, les machines virtuelles, c&#8217;est quand même bien pratique, notamment parce qu&#8217;on peut faire des instantanés, sorte de sauvegarde de l&#8217;état de la machine à un instant T. Idéal pour revenir en arrière après une mise à jour foireuse par exemple <img src='http://www.diije.fr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Commençons par télécharger l&#8217;installeur. Vous devriez trouver votre bonheur <a href="https://www.virtualbox.org/wiki/Downloads">sur le site officiel</a> ou dans les paquets de votre distribution linux. L&#8217;installation de VirtualBox en elle-même ne devrait là encore ne pas vous poser de problème.</p>
<h2>Télécharger Ubuntu Server</h2>
<p>Là encore, pourquoi Ubuntu, et pourquoi en version serveur ? Bon, ok, c&#8217;est gratuit aussi. Ubuntu est l&#8217;une des distributions les plus populaires, et dispose d&#8217;une communauté assez large pour que dans la quasi totalité des cas, quelqu&#8217;un aura déjà rencontré (et avec un peu de chance, aura déjà résolu) le problème que vous vous apprêtez à rencontrer à votre tour.<br />
Quant au choix de la version serveur, c&#8217;est une question d&#8217;utilité et de performances : d&#8217;une part dans la plupart des cas, il est assez peu utile d&#8217;avoir une interface graphique sur votre serveur ; d&#8217;autre part, les machines virtuelles étant souvent assez gourmandes en mémoire vive, se passer d&#8217;une interface graphique permet aussi de limiter la mémoire allouée à notre serveur, et donc de garantir de meilleures performances pour l&#8217;ordinateur hôte (théoriquement). </p>
<p>Vous devriez pouvoir télécharger un iso de la dernière version francophone de Ubuntu Server sur <a href="http://ubuntu-fr.org/telechargement?variante=server">ubuntu-fr.org</a> <img src='http://www.diije.fr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Cela étant, rien ne vous empêche de choisir une autre distribution et/ou une version dotée d&#8217;une interface gratuite, le reste de ce tutoriel reste applicable.</p>
<h2>Installer la machine virtuelle</h2>
<p>Une fois l&#8217;iso sauvegardé sur votre ordinateur, lancez VirtualBox et créez une nouvelle machine virtuelle :</p>
<p><img alt="Création d'une machine virtuelle avec VirtualBox" src="http://www.diije.fr/wp-content/uploads/2012/05/virtualbox-ubuntu-2.jpg" title="Machine virtuelle avec VirtualBox" class="aligncenter" width="550" height="385" /></p>
<p>La création d&#8217;une nouvelle machine virtuelle se faisant de manière assez intuitive, laissez-vous guider dans les différentes étapes.<br />
Nul besoin d&#8217;allouer une quantité importante de mémoire vive, 512Mo ou moins devraient suffire si vous n&#8217;envisagez pas de traiter des masses de données.</p>
<p><img alt="Allouez la mémoire vive pour votre machine virtuelle" src="http://www.diije.fr/wp-content/uploads/2012/05/virtualbox-ubuntu-3.jpg" title="Allocation mémoire avec VirtualBox" class="aligncenter" width="550" height="391" /></p>
<p>De même, la taille du disque dur virtuel n&#8217;est pas très importante, puisqu&#8217;en général on n&#8217;a pas de gros besoins pour des sites web. J&#8217;ai pour habitude de créer des disques dynamiques (<em>VirtualBox Disc Image</em>) de 10Go, ce qui est normalement amplement suffisant.</p>
<p><img alt="Creéez un disque virtuel pour votre machine virtuelle" src="http://www.diije.fr/wp-content/uploads/2012/05/virtualbox-ubuntu-4.jpg" title="Création d'une image de disque virtuelle" class="aligncenter" width="550" height="388" /></p>
<p>Une fois les différentes étapes remplies, votre machine est créée. Mais elle est vide, et il faut maintenant y installer notre OS. Pour cela, il va falloir &laquo;&nbsp;insérer&nbsp;&raquo; le disque d&#8217;installation, c&#8217;est à dire l&#8217;iso de Ubuntu Server que vous venez de télécharger. Dans le menu <em>Configuration</em> de votre machine virtuelle, rendez-vous dans l&#8217;onglet <em>Stockage</em> puis indiquez le chemin vers l&#8217;iso : </p>
<p><img alt="Reliez l'iso d'Ubuntu Server à votre nouvelle machine virtuelle" src="http://www.diije.fr/wp-content/uploads/2012/05/virtualbox-ubuntu-5.jpg" title="Ajout d'une image iso" class="aligncenter" width="550" height="216" /></p>
<p>Il suffira ensuite de lancer la machine virtuelle, de la laisser démarrer sur le cdrom et de procéder à l&#8217;installation somme toute standard de votre OS. J&#8217;ai pour habitude de n&#8217;installer aucun paquet à ce moment de la création de notre serveur, et de le faire à la main par la suite (ce qu&#8217;on va voir tout de suite), mais libre à vous d&#8217;essayer :p</p>
<h2>Configurer la machine virtuelle</h2>
<p>Maintenant que nous avons une machine virtuelle en parfait état de fonctionnement, il va falloir la transformer en un véritable serveur web, en y installant les éléments indispensables au bon fonctionnement de la plupart des sites.</p>
<p>Commencez par installer <strong>Apache</strong>, en tapant la commande suivante en ligne de commande :</p>
<pre class="brush: bash; gutter: false; title: ; notranslate">sudo apt-get install apache2</pre>
<p>Même chose pour <strong>PHP</strong> (je vous assure, le HTML c&#8217;est bien, mais c&#8217;est vite limité) :</p>
<pre class="brush: bash; gutter: false; title: ; notranslate">sudo apt-get install php5 libapache2-mod-php5</pre>
<p><strong>MySQL</strong>, histoire de pouvoir stocker des données :</p>
<pre class="brush: bash; gutter: false; title: ; notranslate">sudo apt-get install mysql-server</pre>
<p>Et <strong>PhpMyAdmin</strong> pour avoir une belle interface web pour gérer nos bases de données :</p>
<pre class="brush: bash; gutter: false; title: ; notranslate">sudo apt-get install libapache2-mod-auth-mysql php5-mysql phpmyadmin</pre>
<p>Redémarrez Apache pour qu&#8217;il prenne en compte ses nouveaux amis :</p>
<pre class="brush: bash; gutter: false; title: ; notranslate">sudo /etc/init.d/apache2 restart</pre>
<p>Enfin, je vous conseille deux petites manips. Tout d&#8217;abord, placez un lien symbolique vers phpmyadmin dans <code>/var/www</code>, pour pouvoir y accéder plus facilement depuis la racine du serveur web :</p>
<pre class="brush: bash; gutter: false; title: ; notranslate">sudo ln -s /usr/share/phpmyadmin/ /var/www/phpmyadmin</pre>
<p>Puis ajoutez-vous au groupe <code>www-data</code> (le groupe du processus Apache) et rendez-le propriétaire de <code>/var/www</code> (prenez soin de remplacer <em>username</em> par votre login) :</p>
<pre class="brush: bash; gutter: false; title: ; notranslate">sudo usermod -a -G www-data username
sudo chown -R username:www-data /var/www/</pre>
<p>C&#8217;est presque prêt, ne reste qu&#8217;à redémarrer pour s&#8217;assurer que tout se passe bien au démarrage de la machine virtuelle :</p>
<pre class="brush: bash; gutter: false; title: ; notranslate">sudo reboot</pre>
<p></p>
<h2>Configurer le réseau</h2>
<p>Maintenant que nous avons un serveur web fonctionnel, il va falloir y accéder depuis l&#8217;extérieur, ou au moins depuis la machine hôte. Plusieurs possibilités existent, mais je vous conseille d&#8217;utiliser celle que je vais vous décrire, qui fonctionnera quel que soit l&#8217;OS hôte.</p>
<p>Commencez par arrêter votre machine virtuelle :</p>
<pre class="brush: bash; gutter: false; title: ; notranslate">sudo shutdown -h now</pre>
<p>Rendez-vous ensuite dans le menu <em>Préférences</em> de VirtualBox (général et non d&#8217;une machine virtuelle) puis dans l&#8217;onglet <em>Réseau</em>. Nous allons modifier le réseau privé hôte par défaut de VirtualBox (à priori <code>vboxnet0</code>) en cliquant sur le tournevis, et en renseignant l&#8217;onglet <em>Interface</em> comme ceci :</p>
<p><img alt="Configuration de l'adresse IP de la carte réseau hôte" src="http://www.diije.fr/wp-content/uploads/2012/05/virtualbox-ubuntu-6.jpg" title="Configuration du réseau : interface" class="aligncenter" width="450" height="202" /></p>
<p>Et l&#8217;onglet <em>Serveur DHCP</em> comme ceci :</p>
<p><img alt="Configuration de l'interface réseau hôte-invité" src="http://www.diije.fr/wp-content/uploads/2012/05/virtualbox-ubuntu-7.jpg" title="Configuration du réseau : dhcp" class="aligncenter" width="450" height="201" /></p>
<p>C&#8217;est bon, vous pouvez cliquer sur OK <img src='http://www.diije.fr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Ensuite, dans la configuration de votre machine virtuelle, ajoutez une interface réseau en vous rendant dans l&#8217;onglet <em>Configuration > Réseau</em> et en activant tout simplement la carte n°2 en mode <em>Réseau privé hôte</em> :</p>
<p><img alt="Ajout d'une seconde carte réseau à la machine virtuelle" src="http://www.diije.fr/wp-content/uploads/2012/05/virtualbox-ubuntu-8.jpg" title="Configuration du réseau : machine virtuelle" class="aligncenter" width="550" height="402" /></p>
<p>Veillez à conserver la carte n°1 active en mode NAT.</p>
<p>Démarrez ensuite la machine virtuelle pour éditer sa configuration réseau. Une fois logué, tapez :</p>
<pre class="brush: bash; gutter: false; title: ; notranslate">sudo nano /etc/network/interfaces</pre>
<p>Modifiez le fichier pour qu&#8217;il ressemble à ça (il s&#8217;agit en fait de configurer votre nouvelle carte réseau, aka <em>eth1</em>) :</p>
<pre class="brush: bash; gutter: false; title: ; notranslate">
# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet dhcp

auto eth1
iface eth1 inet static
        address 10.0.0.2
        netmask 255.255.255.0
</pre>
<p>Vous venez de spécifier une IP fixe pour la seconde carte réseau, qui permettra de faire en sorte que la machine invitée soit toujours accessible depuis la même adresse.</p>
<p>Pour finir, redémarrez les interfaces réseau pour que les modifications soient prises en compte :</p>
<pre class="brush: bash; gutter: false; title: ; notranslate">sudo /etc/init.d/networking restart</pre>
<p>Vous devriez pouvoir accéder au serveur web de votre machine virtuelle en tapant <code>http://10.0.0.2</code> dans la barre d&#8217;adresse de votre navigateur :</p>
<p><img alt="La page d'accueil par défaut d'Apache, synonyme que tout fonctionne correctement" src="http://www.diije.fr/wp-content/uploads/2012/05/virtualbox-ubuntu-9.jpg" title="Ca marche !" class="aligncenter" width="500" height="100" /></p>
<p>Une fois ces différentes étapes réalisées, je vous conseille d&#8217;enregistrer un premier instantané de votre machine virtuelle (touche &laquo;&nbsp;<code>host</code>&nbsp;&raquo; + T, la touche &laquo;&nbsp;<code>host</code>&nbsp;&raquo; étant par défaut la touche <code>Pomme/CMD</code> sur Mac et la touche <code>CTRL</code> droite sur les autres OS) :</p>
<p><img alt="Création d'un instantané avec VirtualBox" src="http://www.diije.fr/wp-content/uploads/2012/05/virtualbox-ubuntu-10.jpg" title="Instantané VirtualBox" class="aligncenter" width="273" height="290" /></p>
<p>N&#8217;hésitez pas à détailler l&#8217;intitulé et la description de chaque Instantané afin de savoir où vous en étiez dans votre travail.<br />
Ainsi, si quelque chose foire pendant la suite, vous pourrez facilement revenir en arrière en sélectionnant la sauvegarde que vous souhaitez via l&#8217;onglet <em>Instantanés</em> du menu principal de VirtualBox :</p>
<p><img alt="Restauration d'un instantané avec VirtualBox" src="http://www.diije.fr/wp-content/uploads/2012/05/virtualbox-ubuntu-11.jpg" title="Restauration d'instantané VirtualBox" class="aligncenter" width="400" height="214" /></p>
<p>Les instantanés sont un des principaux atouts des machines virtuelles, je vous recommande donc très fortement de les utiliser !</p>
<h2>Installer les additions invité</h2>
<p>Un autre des nombreux atouts de VirtualBox, c&#8217;est le partage de dossiers entre la machine hôte et la machine invitée, possible au travers des <em>additions invité</em>. Ces fameuses additions sont en fait des greffons ajoutés à votre machine virtuelle et qui permettent l&#8217;interfaçage avec la machine hôte. Pour les installer, vous devez d&#8217;abord installer quelques paquets essentiels dès qu&#8217;on touche au noyau linux :</p>
<pre class="brush: bash; gutter: false; title: ; notranslate">sudo apt-get install build-essential linux-headers-`uname -r` dkms</pre>
<p>Il faut ensuite monter l&#8217;image disque contenant les additions invité. Pour cela, rendez-vous dans le menu <em>Périphériques</em> de votre machine virtuelle et cliquez sur <em>Installer les additions invité</em>. L&#8217;image iso sera ajoutée à votre machine virtuelle. Il suffit ensuite de la monter avec la commande :</p>
<pre class="brush: bash; gutter: false; title: ; notranslate">sudo mount /dev/cdrom /media/cdrom/</pre>
<p>Une fois l&#8217;image iso montée, lancez l&#8217;installation des additions invité :</p>
<pre class="brush: bash; gutter: false; title: ; notranslate">cd /media/cdrom/
sudo sh ./VBoxLinuxAdditions.run</pre>
<p>Et voilà, les additions invité sont installées. Peu de différence pour vous puisque la plupart ne sont utiles que lorsque l&#8217;on utilise une interface graphique, mais ça sera bien utile pour la suite quand même.<br />
Pour que les additions soient bien prises en compte, éteignez encore une fois la machine virtuelle :</p>
<pre class="brush: bash; gutter: false; title: ; notranslate">sudo shutdown -h now</pre>
<p></p>
<h2>Créer un dossier partagé</h2>
<p>Un dossier partagé sera, comme son nom l&#8217;indique, un espace de stockage partagé entre la machine hôte et la machine virtuelle. Vous aurez donc l&#8217;équivalent d&#8217;un FTP sauf qu&#8217;il sera connecté automatiquement et totalement intégré à votre explorateur de fichiers favori.<br />
Voyons comment le paramétrer.</p>
<h3>Sur la machine hôte</h3>
<p>Rendez-vous dans le menu de configuration de votre machine virtuelle, dans l&#8217;onglet <em>Dossiers partagés</em>. Vous pourrez alors ajouter un répertoire de partage de façon temporaire ou permanente, choisir l&#8217;étendue des droits pour la machine virtuelle, ou encore paramétrer le montage automatique ou manuel du dossier. Surtout, vous lui donnerez un nom qu&#8217;il va falloir retenir parce que vous en aurez besoin pour la suite.</p>
<p><img alt="Configuration d'un dossier partagé VirtualBox" src="http://www.diije.fr/wp-content/uploads/2012/05/virtualbox-ubuntu-12.jpg" title="Dossiers partagés Virtualbox : la machine hôte" class="aligncenter" width="450" height="265" /></p>
<h3>Sur la machine invitée</h3>
<p>Redémarrez la machine virtuelle, et montez le dossier partagé avec la commande suivante (en prenant soin de remplacer &laquo;&nbsp;NOM_DU_DOSSIER_DE_PARTAGE&nbsp;&raquo; par &#8230; le nom du dossier de partage :p) :</p>
<pre class="brush: bash; gutter: false; title: ; notranslate">sudo mount -t vboxsf NOM_DU_DOSSIER_DE_PARTAGE /var/www</pre>
<p>Si tout se passe bien, le dossier de partage sera monté à la place de <code>/var/www</code>, le répertoire de base par défaut d&#8217;Apache. Autrement dit, votre dossier partagé contiendra tous les sites hébergés sur votre serveur. Libre à vous évidemment de modifier ce comportement, en changeant le point de montage (<code>/var/www</code>) et/ou la configuration d&#8217;Apache.</p>
<p>Vous pouvez maintenant configurer votre dossier de partage pour qu&#8217;il soit monté automatiquement au démarrage de votre machine virtuelle. Pour cela, il vous faut éditer <code>/etc/fstab</code> :</p>
<pre class="brush: bash; gutter: false; title: ; notranslate">sudo nano /etc/fstab</pre>
<p>Ajoutez la ligne suivante à la fin du fichier :</p>
<pre class="brush: bash; title: ; notranslate">NOM_DU_DOSSIER_DE_PARTAGE	/var/www	vboxsf	umask=0022,gid=33,uid=33	0	0</pre>
<p>Comme précédemment, veillez à remplacer NOM_DU_DOSSIER_DE_PARTAGE par le nom de votre dossier <img src='http://www.diije.fr/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
Le 2e paramètre est le point de montage, le 3e le système de fichiers (à ne pas modifier, c&#8217;est le système de fichiers propre aux dossiers partagés de VirtualBox). Pour le reste, si vous ne comprenez pas, mieux vaut ne pas y toucher <img src='http://www.diije.fr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Pour tester le bon fonctionnement de ce paramétrage, redémarrez votre serveur virtuel. En cas de problème, n&#8217;hésitez pas à retourner dans le menu de configuration de votre machine virtuelle et à désactiver le montage automatique du dossier partagé.</p>
<p>Enfin, pour résoudre les problèmes de droits d&#8217;écriture et de lecture éventuels, exécutez les deux commandes suivantes (en remplaçant USERNAME par votre login unix) :</p>
<pre class="brush: bash; gutter: false; title: ; notranslate">sudo usermod -a -G vboxsf USERNAME
sudo usermod -a -G vboxsf www-data</pre>
<p>Ceci ajoutera USERNAME (vous) et www-data (l&#8217;utilisateur par défaut d&#8217;Apache) au groupe vboxsf, qui a normalement tous les droits sur les dossiers partagés VirtualBox.</p>
<h2>Installer openssh pour le copier-coller</h2>
<p>Dernière petite astuce : le copier-coller. Sur une installation classique d&#8217;une machine virtuelle munie d&#8217;une interface graphique, lorsqu&#8217;on installe les additions invité VirtualBox, il est possible de faire des copier-coller entre la machine hôte et la machine virtuelle, dans les deux sens. Malheureusement, cette fonctionnalité est dépendante de l&#8217;interface graphique, dont votre nouveau serveur de développement est dépourvu.</p>
<p>La solution pour palier à ce problème est d&#8217;installer openssh :</p>
<pre class="brush: bash; gutter: false; title: ; notranslate">sudo apt-get install openssh-server</pre>
<p>Connectez-vous ensuite à votre machine virtuelle depuis le terminal de votre machine hôte (pour ceux qui utilisent Windows, <a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html">PuTTy</a> est votre ami) :</p>
<pre class="brush: bash; gutter: false; title: ; notranslate">ssh USERNAME@10.0.0.2</pre>
<p>Pour rappel, 10.0.0.2 est l&#8217;adresse locale de votre serveur virtuel.</p>
<p>Vous avez donc maintenant un serveur de développement en local totalement fonctionnel, et vous pouvez éditer les fichiers de vos sites directement depuis votre machine hôte en utilisant les dossiers partagés. En plus, grâce aux instantanés, vous pouvez vous amuser à bidouiller la configuration de votre serveur sans risque de pertes de données puisque vous pourrez revenir en arrière à tout moment ! </p>
<p>Astuce de dernière minute pour ceux qui auraient tout lu : pour pouvoir également effectuer des <em>rollbacks</em> sur les fichiers de vos sites, voire synchroniser ces derniers entre plusieurs postes, pensez à utiliser un logiciel de gestion de versions comme Subversion, ou même <a href="http://db.tt/2nzWVYE">DropBox</a>.</p>
<p>Il ne vous reste plus qu&#8217;à faire preuve d&#8217;imagination pour vos futurs sites <img src='http://www.diije.fr/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.diije.fr/installer-serveur-developpement-local-virtualbox-ubuntu-server/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Quick Hack : Empêcher la connexion pour les abonnés</title>
		<link>http://www.diije.fr/wordpress-hack-empecher-connexion-abonnes/</link>
		<comments>http://www.diije.fr/wordpress-hack-empecher-connexion-abonnes/#comments</comments>
		<pubDate>Wed, 04 Apr 2012 19:40:53 +0000</pubDate>
		<dc:creator>Julien Deneuville</dc:creator>
				<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.diije.fr/?p=330</guid>
		<description><![CDATA[Suite à une question de l&#8217;ami Hervé de Infiniclick, dont je vous recommande au passage l&#8217;excellent forum (et puisque je fais de la pub, pas de jaloux, le forum de Kaddiern est très bien aussi :p), voici un petit hack &#8230; <a href="http://www.diije.fr/wordpress-hack-empecher-connexion-abonnes/">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Suite à une question de l&#8217;ami Hervé de Infiniclick, dont je vous recommande au passage l&#8217;<a href="http://forum.veille-seo.com/">excellent forum</a> (et puisque je fais de la pub, pas de jaloux, le <a href="http://www.seosphere.com/forum/">forum de Kaddiern</a> est très bien aussi :p), voici un petit hack à placer dans le fichier <code>functions.php</code> du thème de votre blog WordPress.</p>
<p style="text-align: center;"><img class="aligncenter" title="Tire-toi de là, spammeur !" src="http://www.diije.fr/wp-content/uploads/2012/05/sens-interdit.jpg" alt="Un panneau sens interdit original" width="320" height="320" /></p>
<p>Son but ? Interdire aux utilisateurs Abonnés de se connecter à votre interface d&#8217;administration.<br />
<span id="more-330"></span></p>
<p>Placez donc ce bout de code dans le fichier <code>functions.php</code> de votre thème :</p>
<pre class="brush: php; title: ; notranslate">
function dfr_control_login() {
	//ne s'applique pas aux contributeurs, auteurs, éditeurs, admins
	if (!current_user_can('edit_posts') ){
		wp_logout();
	}
}
add_action('wp_login','dfr_control_login');
</pre>
<p>Lorsqu&#8217;un utilisateur se connecte, l&#8217;action <code>wp_login</code> est déclenchée, et notre fonction s&#8217;exécute. Si l&#8217;utilisateur en question n&#8217;a pas l&#8217;autorisation d&#8217;éditer des articles (la capacité <code>edit_posts</code> pour WordPress), on exécute la fonction <a href="http://codex.wordpress.org/Function_Reference/wp_logout"><code>wp_logout()</code></a> qui va automatiquement le déconnecter.</p>
<p>Les abonnés qui tenteront de se connecter seront donc tout de suite ramenés sur l&#8217;écran de login. Le gros défaut de ce hack est qu&#8217;il ne fournit aucune explication à l&#8217;utilisateur à qui l&#8217;on a interdit de se connecter, ce qui peut être assez frustrant. J&#8217;espère que cela vous donnera envie de creuser un peu plus pour trouver moyen de mieux faire, et si c&#8217;est le cas, partagez donc votre solution en commentaires !</p>
<p>Enfin, je vous encourage à consulter la liste des <a href="http://codex.wordpress.org/Roles_and_Capabilities">rôles et capacités de WordPress</a> au cas où vous souhaiteriez adapter ce code pour interdire le login à un type d&#8217;utilisateur particulier <img src='http://www.diije.fr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.diije.fr/wordpress-hack-empecher-connexion-abonnes/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>WP Link Analysis : afficher les liens contenus dans un article</title>
		<link>http://www.diije.fr/wp-link-analysis/</link>
		<comments>http://www.diije.fr/wp-link-analysis/#comments</comments>
		<pubDate>Mon, 13 Feb 2012 09:30:24 +0000</pubDate>
		<dc:creator>Julien Deneuville</dc:creator>
				<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.diije.fr/?p=228</guid>
		<description><![CDATA[A la veille de la Saint Valentin, un petit cadeau pour vous ! Lorsqu&#8217;on administre une plateforme de blogs ou un blog multi-utilisateurs, il est parfois utile de jeter un œil aux liens placés dans les articles par les différents &#8230; <a href="http://www.diije.fr/wp-link-analysis/">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>A la veille de la Saint Valentin, un petit cadeau pour vous !</p>
<p>Lorsqu&#8217;on administre une plateforme de blogs ou un blog multi-utilisateurs, il est parfois utile de jeter un œil aux liens placés dans les articles par les différents contributeurs. En effet, il n&#8217;est pas rare d&#8217;avoir affaire à quelques spammeurs, qui n&#8217;hésitent pas à bourrer leurs contenus de liens vers leurs sites de qualité discutable.<br />
Je ne sais pas pour vous, mais me concernant, je préfère que mes sites ne servent pas de splog <img src='http://www.diije.fr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><img alt="Analysez les liens à l&#039;intérieur de vos articles" src="http://www.diije.fr/wp-content/uploads/2012/02/wp-link-analysis-569x184.jpg" title="WP Link Analysis" class="aligncenter" width="569" height="184" /></p>
<p>Malheureusement, passer en revue les liens insérés dans les contenus peut s&#8217;avérer très chronophage, d&#8217;autant plus quand certains petits malins s&#8217;arrangent pour que leurs liens ne soient pas facilement visibles (plusieurs liens qui se succèdent, des liens sans anchor text, &#8230;).<span id="more-228"></span></p>
<p>J&#8217;ai donc mis au point ce petit plugin qui permet de gagner un temps considérable sur les tâches de modération de vos sites. Une fois installé et activé, vous verrez apparaître une metabox sur l&#8217;interface d&#8217;administration de votre site, avec les url cibles (href) et ancres des liens présents dans l&#8217;article en cours de modération :</p>
<p><img alt="Voir les liens d&#039;un article d&#039;un seul coup d&#039;oeil avec WP Link Analysis" src="http://www.diije.fr/wp-content/uploads/2012/05/wp-link-analysis-1.jpg" title="Analyse des liens d&#039;un article" class="aligncenter" width="722" height="348" /></p>
<p>En un coup d&#8217;oeil, on peut voir la totalité des liens de l&#8217;article et les visiter si besoin. Plus besoin de devoir parcourir à l&#8217;oeil nu le code source !</p>
<p>Il n&#8217;est pas impossible que ce plugin évolue prochainement pour vous proposer davantage de fonctionnalités, mais en attendant je vous encourage à télécharger dès maintenant <a href="http://downloads.wordpress.org/plugin/wp-link-analysis.zip">WP Link Analysis sur wordpress.org</a> !</p>
<p><a href="http://wordpress.org/extend/plugins/wp-link-analysis/">La page du plugin sur wordpress.org</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.diije.fr/wp-link-analysis/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>Que deviendront les plateformes de liens en 2012</title>
		<link>http://www.diije.fr/seo-avenir-plateformes-netlinking-2012/</link>
		<comments>http://www.diije.fr/seo-avenir-plateformes-netlinking-2012/#comments</comments>
		<pubDate>Sun, 22 Jan 2012 06:00:08 +0000</pubDate>
		<dc:creator>Julien Deneuville</dc:creator>
				<category><![CDATA[Référencement Naturel]]></category>

		<guid isPermaLink="false">http://www.diije.fr/?p=181</guid>
		<description><![CDATA[Aujourd&#8217;hui, vous allez être inondés de contenus. A l’initiative de Daniel de Seomix, nous sommes 17 à publier, le même jour à la même heure, notre avis sur les perspectives que nous réserve 2012 en ce qui concerne les plateformes &#8230; <a href="http://www.diije.fr/seo-avenir-plateformes-netlinking-2012/">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Aujourd&#8217;hui, vous allez être inondés de contenus. A l’initiative de <a href="http://www.seomix.fr/">Daniel de Seomix</a>, nous sommes 17 à publier, le même jour à la même heure, notre avis sur les perspectives que nous réserve 2012 en ce qui concerne les plateformes de contenus sur le web. Je vous encourage donc à aller voir le point de vue des collègues :</p>
<ul>
<li><a href="http://4h18.com/2012/01/diig-communique-presse-reseaux-sociaux-2012">4h18</a></li>
<li><a href="http://blog.axe-net.fr/plateformes-communiques-presse-referencement-2012/">Axenet</a></li>
<li><a href="http://www.blog-referencement-seo.fr/black-hat/utiliser-facilement-rapidement-sans-risques-les-digg-bookmarks-en-black-hat.php">Bruno Hug</a></li>
<li><a href="http://cwm-consulting.over-blog.com/article-plateformes-de-contenus-et-referencement-en-2012-96887735.html">CWM Consulting</a></li>
<li><a href="http://www.informatclic.com/acpdigg/">Djolhan</a></li>
<li><a href="http://el-annuaire.blogspot.com/2012/01/plateformes-de-contenus-et_21.html">Elannu</a></li>
<li><a href="http://www.emarketingtuner.com/mesurer-le-succes-des-plateformes-de-contenu/">Florian Giudicelli</a></li>
<li><a href="http://blog.infiniclick.fr/articles/annuaire-cp-digg-une-moderation-exigeante.html">Infiniclick</a></li>
<li><a href="http://www.jambonbuzz.com/referencement/levolution-des-backlinks-de-cp">Jambon Buzz</a></li>
<li><a href="http://www.keeg.fr/2012/01/22/communique-presse-liens-referrer/">Keeg</a></li>
<li><a href="http://www.naunaute.com/annuaires-cp-digg-like-2012-85">Lionel Miraton</a></li>
<li><a href="http://www.vuduweb.fr/referencement-naturel/avenir-annuaire-portail-seo-2012/">Nicolas Robineau</a></li>
<li><a href="http://blog.abondance.com/2012/01/net-blingbling-une-prestation-de_22.html">Olivier Andrieu</a></li>
<li><a href="http://www.renaud-joly.fr/index.php/post/audit-seo">Renaud Joly</a></li>
<li><a href="http://www.seoblackout.com/2012/01/22/outils-netlinking-2012/">SeoBlackout</a></li>
<li><a href="http://www.seomix.fr/referencement/naturel/seo-plateforme-netlinking/">SeoMix</a></li>
</ul>
<p>Après cette belle liste de liens qui m&#8217;a pris au moins 15 minutes à mettre en forme, il est temps de passer aux choses sérieuses. Alors voilà, my 2 cents.</p>
<h2>Etat des lieux</h2>
<p>Je suis à la fois utilisateur et administrateur de plateformes de contenus, qu’il s’agisse de blogs, d’annuaires, de communiqués de presse ou de digg-likes. J’ai donc une vision des deux côtés de la barrière, si barrière il y a, puisqu’après tout, soyons clairs, le but du jeu reste de faire des liens.</p>
<p>La prolifération des plateformes de communiqués de presse ces derniers temps, qu’ils soient thématiques ou généraliste, est à première vue une bonne chose pour les référenceurs qui les utilisent : davantage de domaines référents, davantage d’endroits où placer ses liens.<br />
<span id="more-181"></span><br />
Mais cette prolifération risque également d’attirer les yeux du grand G sur ce type de plateformes. On aura beau créer des sites réservés à certaines thématiques, cacher les noms des auteurs ou publier des contenus sans liens pour noyer le poisson, certains ont déjà commencé à <a href="http://www.seo-fail.com/coup-de-gueule/la-facticite-dun-lien-selon-google.shtml">intéresser les équipes de lutte anti-spam et autres Quality Raters</a>.</p>
<h2>Duper Google</h2>
<div class="wp-caption aligncenter" style="width: 436px"><img alt="Google Panda, filtre sur l&#039;index de Google destiné à lutter contre les fermes de contenus" src="http://www.diije.fr/wp-content/uploads/2012/05/google-panda.png" title="Google Panda, le filtre censé lutter contre les fermes de contenus" width="426" height="164" /><p class="wp-caption-text">Après Panda, que nous réserve Google en 2012 ?</p></div>
<p>Aujourd&#8217;hui l&#8217;enjeu n&#8217;est plus de trouver des endroits où publier ses contenus, mais plutôt de trouver le moyen de maquiller suffisamment nos fermes de liens pour qu&#8217;elles n&#8217;attirent pas l&#8217;attention. Je vois des idées fuser dans tous les sens : CMS exotiques, liens vers des sites d&#8217;autorité, &laquo;&nbsp;un contenu sans liens sortants pour 2 contenus avec&nbsp;&raquo;, interview de votre site &#8230; Au moins la sphère SEO n&#8217;a pas cessé de fourmiller, c&#8217;est plutôt bon signe.</p>
<p>Il est évident que, la plupart des sites de communiqués de presse SEO, des annuaires ou des digg-likes utilisant des solutions techniques très similaires voire identiques, il doit bien être possible quand on a la puissance de calcul d&#8217;un moteur de recherche de les détecter. Encore que &#8230; Est-il si facile pour un algorithme de déterminer quel site est une ferme de liens et quel autre présente du &laquo;&nbsp;contenu pertinent&nbsp;&raquo; ? Doit-on s&#8217;attendre à voir fleurir en 2012 un filtre ou une mise à jour de l&#8217;algo destinée particulièrement à lutter contre la génération de liens &laquo;&nbsp;non-naturels&nbsp;&raquo; ?</p>
<p>Je crois pour ma part que nos plateformes de publication ont, pour la plupart, encore de beaux jours devant elles. </p>
<h2>Et après ?</h2>
<p>Malgré tout, on se retrouve aujourd&#8217;hui avec une multitude de sites dont la plupart n&#8217;apportent que peu de jus et sont assez peu utilisés. Finalement les plateformes dignes d&#8217;intérêt sont toujours les mêmes, et on en a déjà fait le tour. Bien sûr, leur utilisation reste toujours intéressante, et on peut compter sur leurs administrateurs pour faire en sorte qu&#8217;elles évoluent.</p>
<p>Mais le modèle du site de communiqués de presse gratuit a peut être fait son temps. Certains ont déjà choisi de lancer des offres payantes permettant de publier des contenus chez eux, et je les comprends : après tout, modérer les articles soumis (je ne parlerai pas de la qualité desdits articles, je ne voudrais vexer personne :p), c&#8217;est du temps. Passer du temps bénévolement pour aider des prestataires à satisfaire leurs clients, ça va 5 minutes. Je ne vois pas de raisons pour que ce type de services ne se développe pas, d&#8217;autant que la qualité suit.</p>
<p>Je pense que nous devons donc continuer d&#8217;être imaginatifs, et trouver de nouvelles pistes pour le netlinking. Nouvelles ou pas d&#8217;ailleurs, puisqu&#8217;après tout, certaines vieilles recettes fonctionnent toujours aussi bien <img src='http://www.diije.fr/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.diije.fr/seo-avenir-plateformes-netlinking-2012/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>Quick Hack : Déclencher des actions</title>
		<link>http://www.diije.fr/wordpress-hack-declencher-actions/</link>
		<comments>http://www.diije.fr/wordpress-hack-declencher-actions/#comments</comments>
		<pubDate>Mon, 21 Nov 2011 13:30:37 +0000</pubDate>
		<dc:creator>Julien Deneuville</dc:creator>
				<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.diije.fr/?p=169</guid>
		<description><![CDATA[Si vous avez déjà consulté ou mis en place des hacks sur votre blog WordPress, vous devez sans nul doute avoir déjà rencontré la fonction add_action( $tag , $function ). Cette fonction permet d&#8217;indiquer à WordPress qu&#8217;il faut exécuter une &#8230; <a href="http://www.diije.fr/wordpress-hack-declencher-actions/">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Si vous avez déjà consulté ou mis en place des hacks sur votre blog WordPress, vous devez sans nul doute avoir déjà rencontré la fonction <code>add_action( $tag , $function )</code>. Cette fonction permet d&#8217;indiquer à WordPress qu&#8217;il faut exécuter une fonction (<code>$function</code>) donnée lorsque l&#8217;action (<code>$tag</code>) est déclenchée.</p>
<p>WordPress propose déjà une foultitude d&#8217;<a href="http://codex.wordpress.org/Plugin_API/Action_Reference">actions prédéfinies</a> dans le noyau. Toutes ces actions (ou <em>hooks</em>) sont déclenchées par les différentes requêtes possibles sur un blog WordPress. Mais il est possible d&#8217;aller plus loin !<span id="more-169"></span></p>
<h2>Déclenchez vous-même une action</h2>
<p>Il arrive souvent, lorsqu&#8217;on développe un thème ou un plugin, qu&#8217;on ait besoin de déclencher une action à un endroit précis d&#8217;une page (par exemple) et que cette action ne soit malheureusement pas activée à cet endroit.<br />
Dans ce cas-là la plupart du temps, on modifie la page en question pour y insérer un appel à la fonction qui va bien. Certes, ça fonctionne, et c&#8217;est suffisant lorsqu&#8217;on n&#8217;a qu&#8217;une seule fonction à utiliser.<br />
Mais lorsque l&#8217;on veut pouvoir faire des choses un peu plus complexes, par exemple exécuter toutes les fonctions correspondantes à une action, on se retrouve souvent limité. Pourtant, une fonction existe dans le <code>core</code> de WordPress pour déclencher des actions : <code>do_action()</code> !</p>
<p>En fait, il suffit d&#8217;insérer dans votre code la ligne suivante pour déclencher une action en particulier, et donc exécuter toutes les fonctions qui s&#8217;y sont &laquo;&nbsp;branchées&nbsp;&raquo; :</p>
<pre class="brush: php; title: ; notranslate">&lt;?php do_action( $tag ); ?&gt;</pre>
<p>Il vous suffit donc de trouver la bonne action à déclencher, et le tour est joué !</p>
<p><a href="http://xkcd.com/149/"><img alt="Sudo make me a sandwich" src="http://imgs.xkcd.com/comics/sandwich.png" title="Make me a sandwich" class="aligncenter" width="360" height="299" /></a></p>
<h2>Créez vos propres actions !</h2>
<p>Avec cette fonction, vous pouvez également créer vos propres actions, tout simplement en remplaçant <code>$tag</code> par un nom d&#8217;action qui n&#8217;existe pas dans le <em>core</em> de WordPress (ni dans vos plugins ou votre thème), et en y branchant ensuite les fonctions qui vont bien.<br />
De cette façon, vous pouvez adapter encore un peu plus ce CMS à vos besoins.</p>
<p>Vous trouverez davantage d&#8217;informations et des exemples d&#8217;utilisation de <code>do_action</code> sur <a href="http://codex.wordpress.org/Function_Reference/do_action">la page du Codex correspondante</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.diije.fr/wordpress-hack-declencher-actions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Autoriser l&#8217;emploi de HTML dans les descriptions de catégories</title>
		<link>http://www.diije.fr/wordpress-autoriser-emploi-html-descriptions-categories/</link>
		<comments>http://www.diije.fr/wordpress-autoriser-emploi-html-descriptions-categories/#comments</comments>
		<pubDate>Sun, 13 Nov 2011 10:20:33 +0000</pubDate>
		<dc:creator>Julien Deneuville</dc:creator>
				<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.diije.fr/?p=158</guid>
		<description><![CDATA[Ce petit hack m&#8217;a été inspiré par une discussion sur le forum veille SEO, lancé par Hervé. Dans sa configuration de base, WordPress n&#8217;autorise l&#8217;emploi que de quelques balises HTML seulement dans les descriptions des catégories (a, strong notamment). Cependant, &#8230; <a href="http://www.diije.fr/wordpress-autoriser-emploi-html-descriptions-categories/">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Ce petit hack m&#8217;a été inspiré par une discussion sur le <a href="http://forum.veille-seo.com/">forum veille SEO</a>, lancé par <a href="https://twitter.com/Infiniclick">Hervé</a>.</p>
<p>Dans sa configuration de base, WordPress n&#8217;autorise l&#8217;emploi que de quelques balises HTML seulement dans les descriptions des catégories (a, strong notamment). Cependant, dans nos réflexions de SEO, on apprécie souvent de pouvoir travailler la description des catégories, ne serait-ce que pour limiter le <em>duplicate content</em>. Et pour cela, on aimerait bien avoir la possibilité d&#8217;utiliser d&#8217;autres balises HTML.</p>
<p>Un petit bout de code à placer dans le fichier <code>functions.php</code> de votre thème permet de régler ce léger problème :<span id="more-158"></span></p>
<pre class="brush: php; title: ; notranslate">
$filters = array('term_description','category_description','pre_term_description');
foreach ( $filters as $filter ) {
    remove_filter($filter, 'wp_filter_kses');
    remove_filter($filter, 'strip_tags');
}
</pre>
<p>Un peu d&#8217;explications : WordPress considère les catégories comme des <em>terms</em>, traités de la même façon que les tags ou les taxonomies. Quand on crée ou modifie une catégorie, elle est donc soumise aux mêmes règles que n&#8217;importe quel terme. Dans des termes un peu plus techniques, les filtres <code>term_description</code> et <code>pre_term_description</code> s&#8217;appliquent de la même façon que <code>category_description</code>, au moment où la description est enregistrée en base de données.<br />
Pour pousser la réflexion un peu plus loin, il suffirait d&#8217;ajouter les filtres adéquats dans l&#8217;array <code>$filters</code> pour pouvoir également utiliser du HTML dans les descriptions de tags ou de taxonomies.</p>
<p>Quant aux filtres que nous retirons, <code><a href="http://codex.wordpress.org/Function_Reference/wp_filter_kses">wp_filter_kses</a></code> fait appel à la librairie <a href="http://sourceforge.net/projects/kses/">kses</a> pour retirer une bonne partie des balises HTML présentes dans une chaîne de caractères, en ne laissant que certaines balises autorisées (strong, a, em &#8230;).<br />
Enfin, la fonction PHP <code><a href="http://php.net/manual/fr/function.strip-tags.php">strip_tags</a></code> retire notamment le code PHP et JavaScript. Nous avions vu l&#8217;utilisation de cette fonction adaptée pour WordPress lorsque nous voulions <a hre="http://www.diije.fr/wordpress-supprimer-html-commentaires/">supprimer le HTML dans les commentaires</a>.</p>
<p>Avec ces 5 lignes de code, nous pouvons maintenant ajouter toutes les balises que nous voulons dans les descriptions de nos catégories. Faites vous plaisir !</p>
<p>Ce petit hack illustre encore une fois les larges possibilités offertes par WordPress en quelques lignes de code. Pour les plus pressés ou pour ceux qui ne souhaitent pas se pencher dans le code, sachez qu&#8217;il existe des plugins qui vous permettront de faire la même chose et ajouteront un éditeur Wysiwyg pour vous faciliter la rédaction des descriptions. N&#8217;étant pas un fervent utilisateur de plugins, je vous laisse chercher <img src='http://www.diije.fr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Articles complémentaires :</p><ul>
<li><a href='http://www.diije.fr/wordpress-supprimer-html-commentaires/' rel='bookmark' title='Supprimer les balises HTML dans les commentaires'>Supprimer les balises HTML dans les commentaires</a></li>
<li><a href='http://www.diije.fr/wordpress-supprimer-html-titre-articles/' rel='bookmark' title='Supprimer le html dans le titre des articles'>Supprimer le html dans le titre des articles</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://www.diije.fr/wordpress-autoriser-emploi-html-descriptions-categories/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Créer une metabox d&#8217;information sur l&#8217;auteur dans l&#8217;administration WordPress</title>
		<link>http://www.diije.fr/wordpress-creation-metabox-informations-auteur/</link>
		<comments>http://www.diije.fr/wordpress-creation-metabox-informations-auteur/#comments</comments>
		<pubDate>Fri, 30 Sep 2011 08:00:27 +0000</pubDate>
		<dc:creator>Julien Deneuville</dc:creator>
				<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.diije.fr/?p=110</guid>
		<description><![CDATA[Si vous administrez un site multi-utilisateurs, comme un blog communautaire ou un site de Communiqués de Presse SEO par exemple, vous êtes sûrement confrontés à la problématique de la modération des utilisateurs. Il est parfois nécessaire d&#8217;accéder à la page &#8230; <a href="http://www.diije.fr/wordpress-creation-metabox-informations-auteur/">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Si vous administrez un site multi-utilisateurs, comme un blog communautaire ou un site de <a href="http://www.aujourd-hui.com/">Communiqués de Presse SEO</a> par exemple, vous êtes sûrement confrontés à la problématique de la modération des utilisateurs. Il est parfois nécessaire d&#8217;accéder à la page d&#8217;édition du profil d&#8217;un utilisateur, le plus souvent pour modifier son rôle sur le site.</p>
<p>Aujourd&#8217;hui, je vous propose de rajouter une metabox sur la page d&#8217;ajout et d&#8217;édition d&#8217;articles, qui ne s&#8217;affichera qu&#8217;aux administrateurs du site, et leur permettra de pouvoir aller directement sur le profil de l&#8217;auteur de l&#8217;article, sans passer par la liste de tous les utilisateurs, sans effectuer une recherche parmi les utilisateurs, sans passer par la case départ et malheureusement sans toucher 20 000F.<span id="more-110"></span></p>
<p>Pour les pressés, je vous propose d&#8217;aller voir directement <a href="http://www.diije.fr/wordpress-creation-metabox-informations-auteur/#code">le code complet</a>. Pour les autres, voyons les choses un peu plus en détail.</p>
<p>Commençons par la création d&#8217;une metabox. Les metaboxes sont tous les blocs visibles sur les pages d&#8217;édition de l&#8217;interface d&#8217;administration de WordPress :</p>
<p><img alt="La metabox &quot;format&quot; pour choisir le format d&#039;un post dans WordPress" src="http://www.diije.fr/wp-content/uploads/2012/05/wordpress-metabox-format.png" title="Une metabox WordPress" class="aligncenter" width="287" height="186" /></p>
<p>Vous pouvez très facilement les réduire, les déplacer, les cacher ou afficher davantage de boites en cliquant sur &laquo;&nbsp;Options de l&#8217;écran&nbsp;&raquo; en haut à droite de la page. Et il est très facile d&#8217;en ajouter de nouvelles grâce à la fonction <code><a href="http://codex.wordpress.org/Function_Reference/add_meta_box">add_meta_box()</a></code> :</p>
<pre class="brush: php; title: ; notranslate">
//création de la metabox (id css, titre, fonction contenu, type de page, contexte, priorité)
function dfr_author_metabox() {
	add_meta_box( 'dfr_author_metabox', 'Auteur', 'dfr_author_metabox_callback', 'post', 'side', 'high');
}
//affichage de la metabox
if (current_user_can('manage_options')) {
	add_action('admin_init', 'dfr_author_metabox', 1);
}
</pre>
<p>On indique à la fonction add_meta_box l&#8217;id css de notre nouvelle metabox (doit être unique, sinon attendez-vous à des problèmes <img src='http://www.diije.fr/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ), le titre du bloc, la fonction de <em>callback</em>, c&#8217;est à dire celle qui gèrera l&#8217;affichage du contenu, le type de post sur lequel on veut ajouter la metabox (post, page ou type personnalisé), le <em>contexte</em> (au centre, sur la colonne de droite &#8230;) et la priorité (l&#8217;ordre d&#8217;affichage en quelque sorte, plus la metabox est prioritaire, plus son emplacement sera proche du haut de la page).</p>
<p>Ensuite on s&#8217;assure de n&#8217;afficher notre metabox qu&#8217;aux utilisateurs qui peuvent gérer les options (<code>if (current_user_can('manage_options'))</code>), c&#8217;est à dire aux administrateurs. Si vous souhaitez permettre également aux éditeurs de voir la metabox, il faudra utiliser une capacité de niveau moins élevé pour ce test.</p>
<p>Enfin, si notre utilisateur est effectivement administrateur du site, on ajoute la metabox (avec une priorité 1 ici pour qu&#8217;elle soit vraiment très haut dans la page).</p>
<p>Reste à savoir ce que notre boîte va afficher :</p>
<pre class="brush: php; title: ; notranslate">
//contenu de la metabox
function dfr_author_metabox_callback() {
	global $wpdb;

	$author_ID = get_post($post-&gt;ID)-&gt;post_author;
	$role = $wpdb-&gt;get_var(&quot;SELECT meta_value FROM {$wpdb-&gt;usermeta} WHERE meta_key = '{$wpdb-&gt;prefix}capabilities' AND user_id = {$author_ID}&quot;);
	$rarr = unserialize($role);
	$roles = is_array($rarr) ? array_keys($rarr) : array('non-user');

	?&gt;&lt;ul&gt;
	&lt;li&gt;&lt;?php the_author_meta('nickname',$author_ID); ?&gt; (&lt;?php echo $roles[0]; ?&gt;)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;&lt;?php echo get_author_posts_url($author_ID); ?&gt;&quot;&gt;&lt;?php the_author_posts(); ?&gt; article(s) publié(s)&lt;/a&gt;&lt;/li&gt;
	&lt;?php
	if( function_exists( 'get_compteur' )) {
		?&gt;&lt;li&gt;&lt;?php echo get_compteur($author_ID); ?&gt; article(s) refusé(s)&lt;/li&gt;&lt;?php
	}
	?&gt;
	&lt;li&gt;&lt;a href=&quot;&lt;?php echo get_bloginfo('url'); ?&gt;/wp-admin/user-edit.php?user_id=&lt;?php echo $author_ID; ?&gt;&quot;&gt;Editer le profil&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;&lt;?php
}
</pre>
<p>On commence par récupérer l&#8217;ID de l&#8217;auteur, ce qui nous permettra de récupérer plus facilement les informations dont on a besoin.<br />
Ensuite on récupère le rôle de l&#8217;auteur de l&#8217;article. Ce rôle est enregistré dans la base de données, sous la forme d&#8217;une variable sérialisée, qu&#8217;on va donc convertir avec <code><a href="http://php.net/manual/fr/function.unserialize.php">unserialize()</a></code>. On obtient un tableau contenant les rôles éventuels de l&#8217;auteur. Si on n&#8217;en trouve aucun, on lui attribue le &laquo;&nbsp;rôle&nbsp;&raquo; <em>non-user</em>.</p>
<p>Passons ensuite à l&#8217;affichage proprement dit. J&#8217;ai choisi d&#8217;afficher l&#8217;identifiant (<code>nickname</code>) de l&#8217;auteur, son rôle, un lien vers ses articles déjà publiés (avec un compteur du nombre d&#8217;articles publiés), et si mon magnifique plugin <a href="http://wordpress.org/extend/plugins/wp-compteur/">wp-compteur</a> est installé, le nombre d&#8217;articles refusés pour cet auteur.<br />
Enfin, j&#8217;ai ajouté un lien permettant d&#8217;aller modifier le profil de l&#8217;utilisateur si besoin était.</p>
<p>Rien ne vous empêche d&#8217;ajouter d&#8217;autres informations si vous le souhaitez.</p>
<p><a name="code">Le code complet :</a></p>
<pre class="brush: php; title: ; notranslate">
if (is_admin()) {
	//création de la metabox (id css, titre, fonction contenu, type de page, contexte, priorité)
	function dfr_author_metabox() {
		add_meta_box( 'dfr_author_metabox', 'Auteur', 'dfr_author_metabox_callback', 'post', 'side', 'high');
	}
	//affichage de la metabox
	if (current_user_can('manage_options')) {
		add_action('admin_init', 'dfr_author_metabox', 1);
	}
	//contenu de la metabox (html)
	function dfr_author_metabox_callback() {
		global $wpdb;

		$author_ID = get_post($post-&gt;ID)-&gt;post_author;
		$role = $wpdb-&gt;get_var(&quot;SELECT meta_value FROM {$wpdb-&gt;usermeta} WHERE meta_key = '{$wpdb-&gt;prefix}capabilities' AND user_id = {$author_ID}&quot;);
		$rarr = unserialize($role);
		$roles = is_array($rarr) ? array_keys($rarr) : array('non-user');

		?&gt;&lt;ul&gt;
		&lt;li&gt;&lt;?php the_author_meta('nickname',$author_ID); ?&gt; (&lt;?php echo $roles[0]; ?&gt;)&lt;/li&gt;
		&lt;li&gt;&lt;a href=&quot;&lt;?php echo get_author_posts_url($author_ID); ?&gt;&quot;&gt;&lt;?php the_author_posts(); ?&gt; article(s) publié(s)&lt;/a&gt;&lt;/li&gt;
		&lt;?php
		if( function_exists( 'get_compteur' )) {
			?&gt;&lt;li&gt;&lt;?php echo get_compteur($author_ID); ?&gt; article(s) refusé(s)&lt;/li&gt;&lt;?php
		}
		?&gt;
		&lt;li&gt;&lt;a href=&quot;&lt;?php echo get_bloginfo('url'); ?&gt;/wp-admin/user-edit.php?user_id=&lt;?php echo $author_ID; ?&gt;&quot;&gt;Editer le profil&lt;/a&gt;&lt;/li&gt;
		&lt;/ul&gt;&lt;?php
	}
}
</pre>
<p>J&#8217;espère que ce petit hack vous sera utile pour gérer vos sites communautaires <img src='http://www.diije.fr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.diije.fr/wordpress-creation-metabox-informations-auteur/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Autoriser l&#8217;upload de medias par les contributeurs</title>
		<link>http://www.diije.fr/wordpress-autoriser-upload-contributeurs/</link>
		<comments>http://www.diije.fr/wordpress-autoriser-upload-contributeurs/#comments</comments>
		<pubDate>Mon, 19 Sep 2011 08:30:34 +0000</pubDate>
		<dc:creator>Julien Deneuville</dc:creator>
				<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.diije.fr/?p=134</guid>
		<description><![CDATA[Le rôle Contributeur est très utile sur les sites multi-utilisateurs puisque très restrictif. En effet, un contributeur ne peut qu&#8217;ajouter un article, l&#8217;éditer ou le supprimer, puis le soumettre à la relecture. Les articles ainsi proposés peuvent donc être relus &#8230; <a href="http://www.diije.fr/wordpress-autoriser-upload-contributeurs/">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Le rôle Contributeur est très utile sur les sites multi-utilisateurs puisque très restrictif. En effet, un contributeur ne peut qu&#8217;ajouter un article, l&#8217;éditer ou le supprimer, puis le soumettre à la relecture. Les articles ainsi proposés peuvent donc être relus par un éditeur ou un administrateur, qui pourra alors choisir de les publier ou non.</p>
<p>Cela dit, le rôle de contributeur est parfois un peu trop limité : par défaut, WordPress interdit aux contributeurs l&#8217;upload de médias via le fameux menu <em>Envoyer/Insérer</em> :</p>
<p><img src="http://www.diije.fr/wp-content/uploads/2011/09/envoyer-inserer-569x61.jpg" alt="La fonction Envoyer/Insérer de WordPress" title="La fonction Envoyer/Insérer de WordPress" class="alignnone size-full wp-image-138" width="569" height="61"/><br />
<span id="more-134"></span><br />
Pourtant, cette fonction est parfois indispensable. Plutôt que de passer vos contributeurs en auteurs, je vous propose de rajouter les quelques lignes suivantes au fichier <code>functions.php</code> de votre thème :</p>
<pre class="brush: php; title: ; notranslate">
if ( current_user_can('contributor') &amp;&amp; !current_user_can('upload_files') )
	add_action('admin_init', 'dfr_upload_contributeurs');

function dfr_upload_contributeurs() {
	$contributor = get_role('contributor');
	$contributor-&gt;add_cap('upload_files');
}
</pre>
<p>On commence par vérifier que l&#8217;utilisateur actuel est contributeur, et qu&#8217;il ne peut pas uploader de média (pour éviter d&#8217;exécuter la fonction pour rien). Si c&#8217;est le cas, on ajoute à l&#8217;aide de <code>dfr_upload_contributeurs()</code> la capacité <code>upload-files</code> au rôle Contributeur. De cette manière, les contributeurs verront eux aussi apparaître le menu <em>Envoyer/Insérer</em> sur la page d&#8217;ajout et d&#8217;édition d&#8217;articles.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.diije.fr/wordpress-autoriser-upload-contributeurs/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Générer un extrait automatique pour chaque article</title>
		<link>http://www.diije.fr/wordpress-generer-extrait-automatiquement/</link>
		<comments>http://www.diije.fr/wordpress-generer-extrait-automatiquement/#comments</comments>
		<pubDate>Tue, 06 Sep 2011 08:00:05 +0000</pubDate>
		<dc:creator>Julien Deneuville</dc:creator>
				<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.diije.fr/?p=104</guid>
		<description><![CDATA[L&#8217;extrait dans WordPress est un court résumé du texte que l&#8217;on peut afficher à différents endroits du thème, notamment pour éviter que le contenu entier du texte ne soit dupliqué sur la page d&#8217;accueil, la page de l&#8217;article, les pages &#8230; <a href="http://www.diije.fr/wordpress-generer-extrait-automatiquement/">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>L&#8217;extrait dans WordPress est un court résumé du texte que l&#8217;on peut afficher à différents endroits du thème, notamment pour éviter que le contenu entier du texte ne soit dupliqué sur la page d&#8217;accueil, la page de l&#8217;article, les pages d&#8217;archives, de catégories, de tags &#8230;</p>
<p>Si la fonction native de WordPress <code><a href="http://codex.wordpress.org/Function_Reference/the_excerpt">the_excerpt()</a></code> permet d&#8217;afficher l&#8217;extrait configuré dans l&#8217;interface d&#8217;administration, ou à défaut les 55 premiers mots de l&#8217;article (en retirant les éventuelles balises de code source), ce comportement n&#8217;est pas toujours adapté à nos usages.</p>
<p>Suite à la demande de l&#8217;ami <a href="http://twitter.com/BrunoHug">Bruno Hug</a>, je vous propose une petite fonction à placer dans le fichier <code>functions.php</code> de votre thème, pour personnaliser quelque peu le comportement de WordPress concernant l&#8217;extrait.<span id="more-104"></span></p>
<pre class="brush: php; title: ; notranslate">
add_action( 'save_post', 'dfr_custom_excerpt', 10, 1);
function dfr_custom_excerpt($post_id) {
	//récupération de l'extrait et du contenu du post
	global $wpdb;
	$sql = &quot;SELECT post_content,post_excerpt FROM &quot;.$wpdb-&gt;prefix.&quot;posts WHERE ID = &quot;.$post_id;
	$result = $wpdb-&gt;get_row($sql);

	//si un extrait existe
	if($result-&gt;post_excerpt) {
		//on en retire le code et on ne garde que les 150 premiers caractères
		$extrait = substr(wp_strip_all_tags($result-&gt;post_excerpt),0,150);
		//on met à jour la base de données
		$wpdb-&gt;update($wpdb-&gt;prefix.&quot;posts&quot;,
			array('post_excerpt'=&gt;$extrait),
			array('post_id'=&gt;$post_id)
		);
	}
	//sinon on utilise le contenu
	else {
		//on supprime les tags HTML et on prend les 150 premiers caractères
		$extrait = substr(wp_strip_all_tags($result-&gt;post_content),0,150);
		$wpdb-&gt;update($wpdb-&gt;prefix.&quot;posts&quot;,
			array('post_excerpt'=&gt;$extrait),
			array('post_id'=&gt;$post_id)
		);
	}
}
</pre>
<p>Le fonctionnement est très simple : quand un article est sur le point d&#8217;être sauvegardé en base de données, le filtre <code>save_post</code> est déclenché, et notre fonction s&#8217;exécute :</p>
<pre class="brush: php; title: ; notranslate">
add_action( 'save_post', 'dfr_custom_excerpt', 10, 1);
</pre>
<p>Cette ligne permet également de définir un ordre de priorité pour l&#8217;exécution de notre fonction (le 3e argument, laissé ici à la valeur par défaut : 10) et de spécifier quand c&#8217;est possible le nombre d&#8217;argument que notre fonction accepte (ici 1, référez-vous au <a href="http://codex.wordpress.org/Plugin_API/Action_Reference">Codex WordPress</a> pour savoir quelles actions permettent le passage d&#8217;arguments). L&#8217;argument en question sera ici l&#8217;ID de l&#8217;article.</p>
<p>On se sert ensuite de la variable globale <code>$wpdb</code> qui permet les accès à la base de données pour récupérer l&#8217;extrait et le contenu du post. Ensuite, si un extrait a été configuré par l&#8217;utilisateur, on en supprime purement et simplement tout le code HTML, JavaScript, CSS, PHP &#8230; de la même manière qu&#8217;on l&#8217;a fait pour <a href="http://www.diije.fr/wordpress-supprimer-html-commentaires/">supprimer le HTML dans les commentaires</a> ou <a href="http://www.diije.fr/wordpress-supprimer-html-titre-articles/">dans les titres</a>. On en profite pour en réduire la longueur à 150 caractères à l&#8217;aide de la fonction PHP <code><a href="http://php.net/manual/fr/function.substr.php">substr()</a></code>.<br />
Si aucun extrait n&#8217;a été rédigé, on appliquera le même traitement aux 150 premiers caractères de l&#8217;article. Enfin l&#8217;extrait sera sauvegardé en base de données.</p>
<p>De cette manière, vous êtes certains d&#8217;avoir toujours un extrait formaté de la même manière à afficher dans vos pages. N&#8217;hésitez pas à personnaliser cette fonction pour l&#8217;adapter à vos besoins !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.diije.fr/wordpress-generer-extrait-automatiquement/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

