wp_future_posts v1.0

Vendredi, 17 décembre, 2010 | wordpress

Mais qu’est-ce que ce nom barbare me direz-vous?  Hé bien c’est tout simple, c’est mon 2° plugin wordpress!

En effet, hier en mangeant, Jérôme m’a confié ne pas pouvoir passer à la dernière version de wordpress (3 et des brouettes) parce qu’il avait magouillé les requêtes sql afin de ne lister sur la page d’accueil que les articles à venir, donc ceux dont la date n’est pas encore passé. Pour info, Jérôme s’occupe du site de l’école doctorale (hop un peu de pub gratuite ça fait pas de mal :p) et le site annonce les futures conférences, formations etc… c’est donc tout naturel de vouloir les annoncer en avance et pas seulement  quand les évènements sont déjà passé…

Je me suis donc penché sur la question, et j’ai fouillé un peu sur mes étagères pour voir si je ne pouvais pas faire quelque chose pour mon brave Jérôme. Je me suis alors lancer dans la fabrication d’un petit plugin répondant à son besoin. Rien de bien méchant ni de bien compliqué, juste un filtre à ajouter au framework qui modifie la requête initiale. J’ai donc écris ma fonction qui va me permettre de sélectionner non seulement les articles, mais également les articles à venir :

/*
Plugin Name: Future posts
Plugin URI: http://www.charles-guillemot.info
Description: Plugin qui permet de modifier la liste des articles en affichant les articles futurs
Author: Charles Guillemot
Version: 1.0
Author URI: http://www.charles-guillemot.info
*/

function cgg_filter_where($where = ''){
     global $wpdb, $wp_query;
     if(!$wp_query->is_admin){
          $where .= " OR ".$wpdb->prefix."posts.post_status = 'future'";
     }
     return $where;
}

La fonction reste basique. Je récupère la requête, et j’ajoute la condition qui indique de sélectionner également les articles futur. Je retourne ensuite la requête.

L’instruction conditionnelle suivante

if(!$wp_query->is_admin)

permet de désactiver la requête quand on se trouve dans l’administration du site. Sans cette condition, nous n’aurions plus accès aux anciens articles dans le panneau d’administration.

Nous avons donc notre fonction, il reste maintenant à l’appliquer. Il suffit de l’ajouter en tant que filtre comme nous l’avons déjà vu :

add_filter('posts_where', 'cgg_filter_where');

Nous récupérons le hook adéquat, qui est « posts_where » et qui est appelé pour construire la requête qui nous intéresse. On upload ça sur notre serveur, on active le plugin et le tour est joué. Comme dit, rien de bien compliqué.

Pour aller à peine plus loin, dans le cas de Jérôme, il ne veut plus du tout afficher les articles passés. Pour se faire, on modifie juste la requête de notre fonction :

$where .= " AND ".$wpdb->prefix."posts.post_date >= '".date("Y-m-d")."' OR ".$wpdb->prefix."posts.post_status = 'future'";

Cette fois, dès que la date d’un article est dépassée, on le retire de la liste.

Par contre, c’est bien joli de supprimer les articles de la liste, mais pour ceux qui souhaitent conserver quand même la possibilité de visualiser les anciens articles (les archives quoi ^^), dans notre cas, ce n’est plus possible. Hé bien soit! Pas de panique, quand on utilise wordpress, c’est comme si on était au monde des bisounours. Tout y est tout beau, tout rose. En effet, comme nous avons désactivé notre filtre sur la partie administrateur, il suffit de la désactiver également sur la page des archives, pour que cette dernière continue à jouer son rôle de mémoire. Nous modifions donc notre précédente instruction conditionnelle en :

if(!$wp_query->is_admin && !$wp_query->is_archive)

Comme d’habitude, je mets le plugin en téléchargement, si vous désirez l’essayer, histoire de voir se que ça donne
:)

Download

Téléchargez le plugin

Tags: , ,

Aucun commentaire

Laisser un commentaire

Ma blogoliste

Archives

2011 01 02 03 04 05 06 07 08 09 10 11 12
2010 01 02 03 04 05 06 07 08 09 10 11 12
2009 01 02 03 04 05 06 07 08 09 10 11 12