30 décembre 2009 §
Les widgets, bien qu'améliorer depuis WordPress 2.8 (avec la nouvelle classe PHP et la multiplicité de ces derniers), sont toujours une source de frustration pour les utilisateurs.
Par exemple, n'ajouter un widget que sur une certaine page reste encore mission impossible ou presque !
Ici, je vais vous montrer avec 2 bouts de code, comment on peut générer automatiquement une barre de sidebar pour chaque page de votre blog/site sous WordPress, sans oublier une sidebar par défaut pour le reste du blog et les pages n'ayant aucun widget spécifique !
Étape 1 : Enregistrement automatique des nouvelles sidebars
Ici, on procède en 2 étapes,dans un premier temps on enregistre la sidebar par défaut, puis on récupère la liste complète des pages disponibles de votre blog via la fonction get_pages() et on fait une boucle dessus pour enregistrer chaque sidebar.
<?php
if ( function_exists('register_sidebar') ) {
// Default sidebar
register_sidebar(array(
'id' => "sidebar-default",
'name' => 'Sidebar par défaut',
'before_widget' => '<li id="%1$s">',
'after_widget' => '</div></li>',
'before_title' => '<h2>',
'after_title' => '</h2><div>',
));
// One sidebar by page
$_pages = get_pages();
foreach( (array) $_pages as $_page ) {
register_sidebar(array(
'id' => "sidebar-$_page->ID",
'name' => esc_html($_page->post_title),
'before_widget' => '<li id="%1$s">',
'after_widget' => '</div></li>',
'before_title' => '<h2>',
'after_title' => '</h2><div>',
));
}
unset($_pages, $_page);
wp_reset_query();
}
?>
Étape 2 : Appel de la sidebar depuis votre thème
(Code généralement à placer dans le fichier sidebar.php de votre thème)
Ici il ne faut pas oublier d'ajouter la variable globale $wp_query, grâce à cette dernière nous récupérons l'ID de l'objet actuellement chargé, et je vérifie que je suis bien sur une page et que la sidebar est utilisée. (autrement dit qu'elle contient au moins un widget). Si ça n'est pas le cas, je charge la sidebar par défaut.
<?php
global $wp_query;
if ( function_exists('dynamic_sidebar') ) {
if ( is_page() && is_active_sidebar( 'sidebar-' . $wp_query->queried_object_id ) ) {
dynamic_sidebar( 'sidebar-' . $wp_query->queried_object_id );
} else {
dynamic_sidebar( 'sidebar-default' );
}
}
?>
Vous pouvez retrouver l'intégralité du code depuis cette page pastebin
17 mars 2009 §
Pour mes besoins perso, j’ai utilisé le thème Carrington (complexe, mais bien foutu quoi que l’on dise !) et je n’ai pas trouvé de traduction pour la version 1.3 du thème.
De ce fait, j’ai repris la traduction de la version 1.0 faite par l’équipe de l’Atelier Mammouth que j’ai mis à jour (5-6 nouvelles chaines). J’ai également changé certaines traductions (billets -> articles) et quelques fautes d’orthographe.
J’ai également viré le copyright de traduction, que je trouve assez inutile lorsqu’on utilise un fichier Po/Mo. Hop je mets à disposition les 2 fichiers PO et MO, ils sont à placer dans le dossier du thème « carrington-blog ».
2 mars 2009 §
Lorsqu'on travaille sur des thèmes assez complexes, disons orienté magazine, on a généralement besoin d'afficher un nombre d'articles différents selon la ou on se situe... 5 pour la recherche, 8 pour les archives, etc.
Pour y parvenir, il y a 2 possibilités, installer une extension ou créer une fonction dans le thème.
- L'extension a l'avantage d'être configurable depuis la console d'administration, le défaut c'est qu'on charge un peu plus de choses dans WordPress... Et puis pourquoi mettre personnalisable quelque chose de statique dans la vie de tous les jours...
- La deuxième méthode consiste à placer une fonction directement dans le fichier functions.php de votre thème. Cette fonction sera associée au filtre "pre_get_posts" de WordPress.
Fonction d'exemple:
add_filter( 'pre_get_posts', 'quantity_per_view' );
function quantity_per_view( $wp_query = '' ) {
if ( is_search() ) { // recherche
$wp_query->query_vars['posts_per_page'] = 9;
} elseif ( is_category() ) { // Category
$wp_query->query_vars['posts_per_page'] = 8;
} elseif ( is_tag() ) { // Tag
$wp_query->query_vars['posts_per_page'] = 8;
} elseif ( is_author() ) { // Auteur
$wp_query->query_vars['posts_per_page'] = 8;
} elseif ( is_date() ) { // Archive
$wp_query->query_vars['posts_per_page'] = 8;
}
return $wp_query;
}
Ici, on permet de spécifier une quantité différente pour la vue, les catégories, les tags, les auteurs et les archives... La valeur que vous fixerez écrasera l'option présente dans la page de réglages "Lecture" de WordPress.
Je conclurai en disant que cette méthodologie est l'unique bonne méthode pour spécifier le nombre d'articles par page. Utilise la fonction query_posts() est une aberration digne de tout bon webdesigner en herbe pour la simple et bonne raison que vous effectuerez le double de requête SQL...
Cela aura comme conséquence d'augmenter la charge serveur et le temps de génération des pages ;) Si les créateurs de thèmes magazine US (Mimbo et ses petits cousins) me lisent (ce qui est compliqué), prenez de la graine !
18 février 2008 §
Il existait l’excellent outil activeCollab, je dis bien « il existait » vu que ce dernier est passé du coté obscure de la force en devenant propriétaire et payant.
Quelques personnes motivées ont repris les sources de la version 0.7.1 d’ activeCollab, qui était sous licence GPL.
Le nouveau projet, renommé ProjectPier, corrige divers bugs et failles de sécurité. Il apporte également de nouveaux thèmes, donc certains très réussi !

Pour finir en beauté, la traduction française existe aussi :)
24 septembre 2007 §
Fran6 ayant expliqué les 6 nouveautés « utilisateur », je me « tape » les 4 nouveautés « Développeur ».
(en fait on fait un puzzle géant sur internet :D)
Pour faire différent, je me base sur la même source que lui, soit l’excellent article de Aaron Brazell sur les 10 nouveautés de WP 2.3 :).
Tout le monde suit ? Ou plutôt s’accroche ?
On est parti…
La fonction $wpdb->prepare()
En fait, c’est une fausse nouveauté… Les développeurs ont juste réalisé une première implémentation à la va-vite d’une méthode vous permettant de sécuriser vos requêtes contre les injections SQL.
Concrètement il s’agit d’une bonne habitude à prendre pour l’avenir dans le développement de plugins et d’extensions pour thèmes.
Donc à l’utilisation, ça donne ceci:
function getData() {
global $wpdb;
$query = "SELECT ID FROM $wpdb->posts";
$query = $wpdb->prepare( $query );
$results = $wpdb->get_results( $query );
}
Rien de bien compliqué :)
Et comme on dit chez moi (et chez vous surement), à utiliser et abuser :)
Atomlib
Un ajout tardif dans le développement dans WordPress 2.3.
Atomlib est une librairie en PHP facilitant l’utilisation et l’exploitation de fil Atom. (un format concurrent au RSS).
Concrètement il ajoute à WordPress, un ensemble de fonction, exploitable par les plugins et différents thèmes, pour la production de fil Atom ou tout simplement la syndication.
Pas d’exemple sous la main. Ça sera l’objet d’un article :)
Deprecated Functions
Au programme des fonctions dépréciées (donc à ne plus utiliser), nous avons:
permalink_link() à remplacer par the_permalink()
permalink_single_rss() à remplacer par the_permalink_rss()
Bien entendu ces fonctions restent utilisables, mais aucune garantie n’est prévue lors des prochaines mises à jour de WordPress.
Pluggable RSS Library
Enfin… Cela fait des mois que l’on demande à virer la « dépassée » librairie de syndication RSS « Magpie » et WordPress 2.3 apporte enfin des choses à ce niveau.
Non on ne quitte pas encore « Magpie », mais cette librairie devient « pluggable » ou enfichable :)
Cela veut dire que demain, on pourra très facilement la remplacer par SimplePie grâce à un petit plugin, et générer enfin des flux RSS sans se soucier de l’encodage de ces derniers :)
Sans oublier les features de cache, de multi URL, etc.
Pour finir…
Le dernier point technique que notre ami Aaron ne cite pas, s’agit du nouveau schéma de base de donnée pour la taxinomie.
Mais j’ai expliqué ce dernier point sur un article de WordPress Francophone.
Voilà, si vous n’avez rien compris à tout cela, lisez l’article de Fran6, sinon posez vos éventuelles questions ;)
28 juillet 2007 §
Vous avez repéré un thème ou un plugin internationalisé qui vous plait ?
Traduisez-le et partagez-le à la communautée !
( Si le thème ou plugin en question n’est pas internationalisé, consultez la partie 3 de l’excellent article de Marc Charlet. )
Télécharger et installer Poedit
Direction le site internet de l’outil : http://www.poedit.net/
Vous trouverez sur la page de téléchargement une version pour chaque plateforme (Windows, Mac OS et Linux).
Prenez la bonne version et installez-la ! ( pour windows: Next – I’accept – Next – Next- Next – Next – Install – Finish )
Précision sur le fonctionnement de l’internationalisation dans WordPress
WordPress permet dans son implémentation de délimiter les traductions dans des « domaines ». On peut faire l’analogie avec le découpage de la France en départements / régions.
Pour cela, les fonctions d’internationalisations disposent de plusieurs paramètres :
function __($text, $domain = ‘default’)
function _e($text, $domain = ‘default’)
Le premier paramètre ($text) correspond à la chaine de texte à traduire. Tandis que le deuxième ($domain) correspond au domaine de traduction. On peut d’ailleurs remarquer que si on n’utilise pas de deuxième paramètre, le domaine prend la valeur « default ». (le cas des chaines originales de WordPress)
Le fichier PO/MO présent dans le pack français traduit l’ensemble du domaine « default » de WordPress.
Exemple: Une chaine de texte du domaine « default » traduit par le pack français.
<?php _e(‘Anonymous’); ?>
Attention: N’étendez pas la traduction par défaut à d’autres plugins ou thèmes, au risque d’avoir de nombreux problème lors des mises à jour du pack français…
Vous l’aurez compris, il faut que votre thème ou plugin, dispose de son propre domaine de traduction pour toutes les chaines à traduire. Si ça n’est pas le cas, uniformiser le nom du domaine.
Exemple: Une chaine du plugin SimpleTagging, utilisant le domaine « simpletagging ».
<?php _e(‘Simple Tagging: Options’, ‘simpletagging’); ?>
Le principe est le même pour les thèmes et les plugins.
Nommage des fichiers de traduction (PO/MO)
Selon le cas, plugin ou thème, le nommage des fichiers de traduction est différent, explications !
Les thèmes
C’est le cas le plus simple, votre fichier de traduction doit juste être nommé dans le code de langue utilisé.
Exemple pour un WordPress français, il faudra juste nommé vos fichiers en fr_FR.po et fr_FR.mo et les placer dans le même dossier que votre thème.
Plus généralement, il faudra que vos fichiers soient nommer de la même façon que la constante « WPLANG » fixée dans le fichier wp-config.php
define (‘WPLANG’, ‘fr_FR’);
Les plugins
Cette fois-çi c’est un tout petit peu plus compliqué, votre fichier doit être nommé de la façon suivante : domaine – code langue .mo
Exemple pour le plugin SimpleTagging (rappel, le domaine de traduction est « simpletagging ») :
simpletagging-fr_FR.po
simpletagging-fr_FR.mo
Attention: Tout cela ne vaut que si vos plugins et thèmes sont bien développés… si cela ne fonctionne pas le plus simple est de contacter l’auteur pour savoir quelle est la spécificité. (il n’est pas rare de voir des dossiers « languages » dans les plugins, le cas échant déplacer vos fichiers de traduction dedans)
Créer un fichier PO et POT depuis les sources dans Poedit
L’ancienne méthode en ligne de commande est révolue ! (sauf cas spécifique)
Poedit vous permet de créer directement un fichier PO depuis les sources de votre plugin ou thème.
Mon exemple traitera d’un plugin, mais c’est le même principe pour les thèmes !
- Lancer Poedit
- Cliquer « Fichier – Nouveau catologue »
- Une fenêtre configuration apparait
- Compléter l’onglet « Info projet »
- Compléter l’onglet « Chemins »
- Ajouter un chemin grâce au bouton :
- Copier/coller le chemin de votre projet à l’aide de la barre d’adresse ou saisissez-la manuellement (cliquer pour agrandir)


- Compléter l’onglet « Mots clé »
- Ajouter un mot clé grâce au bouton:
- Ajouter les mots clés : ‘__’, ‘_e’ et ‘_c’
- Résultat à obtenir:
- Appuyer sur Ok
- Enregistrer le fichier avec comme nom, le domaine de votre plugin (exemple: exemple.po)
- Si tout se déroule bien, Poedit vous affiche une fenêtre avec les chaines ajoutées et éventuellement supprimées.
- Ne commencez pas tout de suite la traduction.
- Enregistrer le fichier et fermer Poedit.
- Dupliquer le fichier exemple.po en exemple.pot
- Supprimer le fichier exemple.mo créé automatiquement lors de l’enregistrement
- Renommer le fichier exemple.po en exemple-fr_FR.po
- Vous pouvez alors éditer ce fichier avec Poedit et réaliser la traduction française
- Le fichier POT permettra à d’autres personnes d’éventuellement traduire votre thème/plugin sans s’embêter à générer un fichier PO depuis les sources.
Mise à jour de votre traduction (POT)
Si vous effectuez des modifications dans les sources du plugins ou du thème:
- Il vous suffit de renommer le fichier exemple.pot en fichier exemple.po
- De le mettre à jour, pour cela:
- Menu « Catalogue » – « Mise à jour depuis les sources »
- Vous aurez un aperçu des ajouts et des suppressions
- Valider
- Enregistrer et fermer Poedit
- Renommer le fichier exemple.po en exemple.pot
- Supprimer le fichier exemple.mo créé automatiquement lors de l’enregistrement
Vous disposez alors d’un fichier POT à jour.
Mise à jour de votre traduction PO depuis un fichier POT
- Ouvrer votre traduction exemple-fr_FR.po avec Poedit
- Cliquer sur le sur menu « Catalogue – Mettre à jour depuis fichier POT »
- Sélectionner le fichier POT
- Valider les modifications
- Traduiser les nouvelles chaines
- Enregistrer !
Vous disposez d’un fichier de traduction à jour.
Bonne traduction ;)
22 juillet 2007 §
Edit: Je viens juste de voir que Fran6 avait pondu un article du même style… je sors…
Lorsqu’on travaille la première fois avec WordPress, le nombre de fichiers présents dans le thème par défaut, 18 pour être précis, peut paraître déroutant. Pourtant, la logique derrière est très simple et surtout très souple à l’usage…
Pour bien comprendre, rien ne vaut un petit schéma :)
(source: http://codex.wordpress.org/Template_Hierarchy)
Comme on peut le voir sur ce schéma, WordPress dispose de 8 vues différentes :
- Page d’accueil
- Article unique (avec les commentaires en général)
- Page statique
- Catégorie
- Auteur
- Vues relatives aux dates (années, mois, jours)
- Recherche
- Erreur 404
Cas général
Selon l’adresse entrée par le visiteur, WordPress va sélectionner la vue correspondante. Si le fichier de la vue en question existe, WordPress lance le template, sinon il appelle le template par défaut, index.php
Voila le cas le plus simple… Cependant, WordPress est plus puissant et permet d’aller un peu plus loin dans la logique pour certaines vues. Les vues en question sont les pages statiques, les catégories et dans une moindre mesure les vues auteurs et relatives aux dates.
Cas spécifique 1 : Les pages statiques de WP
WordPress permet grâce aux pages statiques, d’afficher un contenu (contact, CV, présentation) hors de la chronologie du blog. Il est également possible de créer des templates spécifiques pour ces pages.
Pour cela, vous pouvez vous inspirer du tutoriel de fran6, mais revenons à nos moutons…
Dans le cas où votre page possède un template personnalisé, WordPress tentera de le lancer, sinon il chargera le fichier page.php. Enfin si ce dernier n’existe pas, il charger le fichier index.php (le cas général)
Soit : votretemplateperso.php –> page.php –> index.php
Cas spécifique 2 : Les catégories de WP
Ce deuxième cas est un peu moins souple que les templates des pages. En effet cette fois-ci, le nom de vos template sera obligatoirement formaté en « category-X.php », X étant l’ID de la catégorie. La logique est la même que pour les pages.
Soit: category-X.php –> category.php –> archive.php –> index.php
Cas spécifique 3 : Le fichier archive.php
Ce fichier est commun aux vues relatives aux articles du blog, c’est-à-dire catégorie, auteur et vues relatives aux dates.
Il s’intercale juste avant le fichier index.php
Soit: category-X.php –> category.php –> archive.php –> index.php
ou: author.php –> archive.php –> index.php
ou encore: date.php –> archive.php –> index.php
Conclusion
Tout ce que je viens d’expliquer ici textuellement est affiché sur le schéma ci-dessus… Un peu de logique de programmation vous permettra en un clin d’oeil de comprendre la logique de WP ;)
Vous trouverez d’autres ressources sur la page Template Hierarchy du codex WordPress.org
20 juillet 2007 §
Lors de la recherche d’un thème pour le blog de Seb, j’ai eu l’occasion de découvrir plusieurs thèmes de bonne facture.
Ces derniers étant disponibles uniquement en anglais, j’ai pris le temps de les traduire et aussi les améliorer (suppression de dépendances à des plugins inutiles, remplacement de UTW par Simple Tagging, indentation du code, etc.).
Au programme aujourd’hui le thème « Hello 2007″ et « Minyx ».
Ils sont tous les 2 compatibles, WordPress 2.1 et supérieur, ainsi que Widgets.
Vous pouvez les trouver en téléchargement sur la page de mon blog dédiée aux thèmes WordPress ! (menu supérieur)
À noter, que je vais mettre à jour, durant l’été, les thèmes actuels afin de les rendre compatible WP 2.1 et supérieur et Widgets.