Une boutique WooCommerce avec Gridbuilder

WP Gridbuilder est une extension très complète qui permet de concevoir des grilles, des filtres et des vignettes pour tout type de contenus.

Dans cet exemple je l’utilise pour remplacer la liste d’affichage par défaut de WooCommerce pour les produits. Je montre notamment comment rendre contextuel l’affichage des produits dans une grille gérée par WP Gridbuilder. Par contextuel, j’entends que les produits affichés par la grille soient automatiquement filtrés en fonction de la catégorie courante.

Avant tout, afin de justifier l’utilisation de WP Gridbuilder, voici la grille standard WooCommerce :

Sukellos WordPress Ajout Role

Et voici ce qu’on obtient très simplement avec WP Gridbuilder en utilisant un des modèles proposés, par exemple la vignette Carnelian :

Sukellos WordPress Ajout Role

J’ai choisi de préserver la configuration WooCommerce de cette page comme la boutique afin de simplifier la gestion des constructions d’URL et du fil d’Arianne.

Il a donc fallu que je surcharge le modèle de page utilisé par WooCommerce pour générer la boutique en le plaçant dans le thème enfant :

/wp-content/themes/twentynineteen-child/woocommerce/archive-product.php

Ce fichier contient la boucle d’affichage des produits par WooCommerce que j’ai remplacée par le shortcode wpgb_grid de la grille 1 fourni par WP Gridbuilder :

Copier

Filtrer les produits par catégorie de manière contextuelle

Une fois cette manipulation effectuée, on se rend compte en cliquant sur les termes de catégories que la grille affiche tout le temps tous les produits, quelque soit la catégorie courante… alors qu’un cookie reste un cookie, et un donut un donut.

Grâce au tableau de bord fourni par WP Gridbuilder, il est bien entendu possible de configurer une grille pour qu’elle n’affiche que les produits d’une catégorie donnée. Mais il sera alors nécessaire de dupliquer autant de grilles et de surcharges de modèle de page WooCommerce qu’il y a de catégories de produits. Ce travail peut sembler envisageable pour quelques catégories, mais absolument cauchemardesque voire impossible pour des centaines voir milliers de catégories qui changeraient régulièrement.

La solution réside donc dans l’utilisation d’un hook fourni par WP Gridbuilder qui permet de filtrer la grille de manière programmatique :

wp_grid_builder/grid/query_args

Ce filtre comprend deux paramètres :

  • $query_args tableau qui contient les paramètres de la requête
  • $grid_id identifiant de la grille

Ce filtre repose sur l’utilisation d’une des requêtes WP_Query, WP_Term_Query ou WP_User_Query, selon le type de contenu filtré. Cela signifie que $query_args est formaté exactement de la même manière que lorsqu’on les utilise directement.

Par exemple, pour afficher uniquement les produits de la catégorie cookies:

Copier

Le code intégral

Le code à placer dans le fichier functions.php du thème enfant :

Copier

Ce filtre est appelé lors de l’affichage de toutes les grilles du site. Il est donc nécessaire de vérifier qu’il s’agit bien de la grille 1.

Ensuite, il est facile de récupérer le terme et la taxonomie courante dans le cas où la page affichée est celle d’une catégorie, puisqu’elles sont définies comme global. Sinon, dans la page boutique, ces variables sont à null.

Quelques liens pour approfondir

Besoin d’une assistance technique par un expert WordPress ?
Optez pour un crédit temps de quelques heures

Laisser un commentaire