Plugiciel WordPress – Blogue parallèle

Décidément, j’aime le terme “blogue parallèle”. Voilà maintenant 2 jours que j’ai installé le miens, mais dans lequel je n’écrivais rien pour quelques raisons. Je me suis servi comme plugiciel de base celui confectionné par Kates Gasis, mais trouvais qu’il y avait quelques défauts/manques. Je sais que l’auteure demande qu’on lui soumette des suggestions, mais mon manque de temps et (oh merci société d’aujourd’hui) ma soif d’avoir instantanément on fait que j’ai pris quelques heures de mon temps pour fixer ce que j’avais besoin.

D’abord, le plugiciel original ne permettait que d’afficher les titres des billets avec leur contenu et la possibilité d’afficher un lien menant à l’article. Comme je ne voulais pas avoir le contenu et seulement le lien vers les billets en tant que tel, j’ai dû modifier.

Ensuite, comme je trouvais que les billets que le blogue parallèle allait contenir ne seraient pas nécessaires ni très pertinant à ceux qui prennent mon fil rss (désolé Yan, t’es le seul que je connaisse), j’ai décidé de ne pas inclure ces billets dans mes fils RSS et ATOM. Vu le manque de documentation auquel j’ai dû faire face, voici comment j’ai procédé :

Tout le monde programmant des plugiciels pour WordPress le sait, ce dernier permet d’étendre ses fonctionnalités à l’aide de “hooks”. D’abord je me suis dit d’aller voir le site que j’ai trouvé jadis où beaucoup de ces hooks sont décris. À mon grand regret, après plusieurs minutes, je n’ai pus trouver de hook qui serait utile pour accomplir ma tâche.

J’ai donc été fouiller dans les différents fichiers sources de WordPress afin de pouvoir mieux me renseigner, mais en vain. Puis, j’ai regardé attentivement la source d’un autre plugiciel pour m’apercevoir que celui-ci utilisait le hook ‘posts_where’ afin de masquer certains billets sous certaines conditions. J’ai donc joué avec ce hook jusqu’à ce que j’aboutisse.

Voici le code :

function sideblog_where($query) {
	global $cat_to_hide, $show_in_feed, $wpdb;

	$now = current_time('mysql');
	if(is_home()){
		return $query . " AND category_id <> " . $cat_to_hide . ' ';
	}
	if(!$show_in_feed && is_feed()){
		return $query . " AND ID NOT IN (SELECT post_id FROM $wpdb->post2cat WHERE category_id = $cat_to_hide)";
	}
	return $query;
}

add_filter('posts_where','sideblog_where',10);

Explications :

  • add_filter permet à WordPress d’appeler ma fonction “sideblog_where” lorsque le hook “posts_where” est appelé, soit lorsque WordPress fait une requête de sélection des billets. C’est par lui que l’on peut redéfinir la requête SQL depuis “WHERE”.
  • sideblog_where() prend un paramètre et le retourne. Ce paramètre, c’est la requête SQL. C’est donc ce paramètre en particulier qu’il faudra modifier à l’intérieur de notre fonction.
  • if(!$show_in_feed && is_feed()) se divise en deux :
    1. si $show_in_feed est équivalent à false, c’est que j’ai décidé dans la configuration de mon plugiciel que je ne voulais pas inclure les billets du blogue parallèle dans les fils RSS et ATOM.
    2. is_feed() est une fonction de WordPress qui permet de savoir si celui-ci est entrain de générer un fil RSS ou ATOM.

    Ceci dit, si les 2 conditions sont vraies, il faut modifier notre requête, ce que je fais. Je n’irai pas expliquer la requête, car je crois que le langage SQL est assez explicite en soi et que là n’est pas le but de ce billet.

Ce n’était que ça ! Mais encore faut-il le savoir. Maintenant, je le sais et vous aussi ! Peut-être devrais-je contribuer au site ci-haut expliquant les hooks.

Finalement, je distribue les modifications du plugiciel pour votre usage personnel et votre plus grand plaisir ! C’est par ici

  • N’oublie pas la valeur de ton blog sans ton “sideblog”. Il serait intéressant d’ajouter d’autres news aussi 🙂 A++!