Améliorer le shortcode de notre carrousel avec les paramètres de WP_Query

Améliorer le shortcode de notre carrousel avec les paramètres de WP_Query

La semaine dernière, nous avions vu comment ajouter un carrousel avec un shortcode sur un site WordPress avec Bootstrap. La fonction qui permet de générer le carrousel utilise la fonction WP_Query pour sélectionner les articles à afficher.

Alors, à la demande générale (ou presque), voyons comment améliorer le shortcode pour ajouter des paramètres supplémentaires et coller plus à vos besoins.

Rappels des faits

Dans l’article précédent, nous avions vu comment intégrer un carrousel à votre site WordPress, directement en PHP, mais aussi dans les articles et dans les pages, grâce à un shortcode maison.

Mais ce shortcode était un peu limité, alors j’ai décidé de faire une suite, avec pour objectif de mettre en application la fonction WP_Query déjà utilisée par la fonction PHP du slider, et de lui passer de nouveaux paramètres depuis le shortcode.

En clair, je vais essayer de vous donner les outils pour améliorer vous même le shortcode à l’aide de cas pratiques.
Alors gardez bien la documentation de WP_Query sous le coude.

La dernière fois, j’avais aussi oublié de mentionner que beaucoup de thèmes WordPress premium proposaient ce genre de fonctionnalité bien intégrée au reste, particulièrement pratique si vous voulez gagner du temps.
D’ailleurs, pour encore gagner du temps sur la mise en place de votre site Web, vous pouvez vous tourner vers des services comme celui de l’hébergeur Strato.

En tout cas, cet article (et le précédent) vous sont donc destinés si votre thème ne propose pas cette fonctionnalité, ou si vous aimez mettre en place les différents éléments de votre site vous-même. Ou encore si vous voulez savoir ce qu’il y a vraiment sous le capot.

Limiter le nombre d’articles

Commençons par une application simple.

La fonction WP_Query accepte un paramètre posts_per_page qui permet de paginer les résultats, et, dans le cas qui nous intéresse, il permet de retourner un nombre limité d’articles.

En partant du shortcode de l’article de la semaine dernière, créons un nouveau paramètre limit pour le shortcode, dont la valeur par défaut (quand il n’est pas renseigné dans les paramètres du shortcode) est null.

	extract(shortcode_atts(array(
		"categories" => null,
		"tags" => null,
		"classes" => null,
		"id" => null,
		"active" => 1,
		"messageifempty" => "",
		"link" => "post",
		// new parameters
		"limit" => null,
		"order" => null,
		"orderby" => null,
		"posttypes" => "post",
		"stickyposts" => null

Remarquez que tous les nouveaux paramètres décrits dans cet article sont déjà listés. Comme ça c’est fait.

Et maintenant, si la valeur de $limit est renseignée, on l’ajoute au tableau des critères :

	if ($limit) $criterias["posts_per_page"] = $limit;

Un exemple :

[carousel tags="articles-a-la-une" limit="5" ]

Tri et ordre d’affichage

Pour connaître le champ sur lequel trier et l’ordre, WP_Query demande deux entrées dans le tableau de critères, respectivement orderby et order.

Le critère orderby prend ces valeurs :

  • none : pas de tri
  • ID : selon l’identifiant numérique
  • title : le titre
  • name : selon le slug
  • date : la date de création
  • modified : la date de la dernière modification

Il en existe d’autres, vous pouvez consulter la section du codex concernant ce paramètre pour plus d’informations.

Le paramètre order définit l’ordre du tri, entre ASC (croissant) et DESC (décroissant).

Après avoir créé deux nouveaux attributs order et orderby pour le shortcode :

	if ($order) $criterias["order"] = strtoupper($order);
	if ($orderby) $criterias["orderby"] = $orderby;

Une exemple d’utilisation :

[carousel tags="articles-a-la-une" orderby="title" order="asc" ]

Custom posts

Si vous souhaitez afficher autre chose que les articles, les pages par exemple, ou tout autre type personnalisé (les fameux custom post types), il suffit d’indiquer la liste des types avec le paramètre post_type.

La version précédente du shortcode forçait le type à post. Cette fois, avec la même définition de critère, c’est un tableau construit à partir de la valeur passée par l’attribut posttypes qui est fourni.

	$criterias = array("post_type" => explode(",", $posttypes));

Un exemple d’utilisation :

[carousel posttypes="films" ]

Celui-là affiche les pages et les articles :

[carousel posttypes="page,post" ]

Sticky posts

La dernière application consiste en l’affichage des articles marqués comme sticky posts (paramètre défini lors de la rédaction de l’article, dans ‘Visibilité’, en cochant ‘Mettre cet article en avant sur la page d’accueil’).

Une méthode décrite par le codex est de récupérer tous les identifiants numériques avec get_option("sticky_posts"), puis de passer ces identifiants au paramètre post__in de WP_Query.

Avec un nouvel attribut pour notre shortcode :

	if ($stickyposts) {
		$sticky = get_option("sticky_posts");
		$criterias["post__in"] = $sticky;
	}

Un exemple :

[carousel stickyposts="true" ]

Le shortcode complet

Et voilà ce que donne notre shortcode amélioré (qui nécessite toujours la fonction créée dans l’article précédent) :

function bootstrapCarouselShortcode($attributes, $content) {
	extract(shortcode_atts(array(
		"categories" => null,
		"tags" => null,
		"classes" => null,
		"id" => null,
		"active" => 1,
		"messageifempty" => "",
		"link" => "post",
		// new parameters
		"limit" => null,
		"order" => null,
		"orderby" => null,
		"posttypes" => "post",
		"stickyposts" => null

	), $attributes));
	$criterias = array("post_type" => explode(",", $posttypes));

	if ($stickyposts) {
		$sticky = get_option("sticky_posts");
		$criterias["post__in"] = $sticky;
	}

	if ($categories) $criterias["category_name"] = $categories;
	if ($tags) $criterias["tag"] = $tags;
	if ($limit) $criterias["posts_per_page"] = $limit;
	if ($order) $criterias["order"] = strtoupper($order);
	if ($orderby) $criterias["orderby"] = $orderby;
	return bootstrapCarousel($criterias, $classes, $id, $active, $messageIfEmpty, $link, false);
}
add_shortcode("carousel", "bootstrapCarouselShortcode");

Il a l’air toujours aussi simple, non ?

Le mot de la fin

Il reste beaucoup de possibilités offertes par WP_Query, comme par exemple l’affichage d’articles d’un auteur en particulier, ou encore ceux des sept derniers jours.

Et pour finir, encore un point que j’avais partiellement abordé : il est possible d’indiquer plusieurs tags ou plusieurs catégories dans lesquelles piocher les articles en les séparant avec une virgule.
Vous pouvez aussi demander l’affichage d’articles appartenant à plusieurs tags en même temps en les séparant avec un plus (+), comme par exemple wordpress+bootstrap pour afficher les articles qui traitent à la fois de WordPress et de Bootstrap.

Cet article vous a été utile ? Partage it !

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Si vous le souhaitez, renseignez le champ 'Nom' de cette façon : 'VotreNom@VotreMotClef' pour obtenir une ancre optimisée pour les moteurs de recherche.