Navi FAQ

Plugin WordPress/WooCommerce : questions/réponses sur les articles, pages, produits et catégories de produits — avec regroupement optionnel par thème et schéma SEO FAQPage.

Version 0.1.0 WordPress 6.0+ PHP 7.4+
Voir le dépôt sur GitHub →

Pourquoi ce plugin

Les plugins FAQ existants (ex. FAQ Magic) gèrent les articles, pages et produits, mais pas les catégories de produits WooCommerce — aucun moyen natif d'ajouter une FAQ à une page d'archive de catégorie. Navi FAQ comble ce manque, avec une structure de données propre et un regroupement des questions par thème pour les FAQ plus étoffées.

Développé comme plugin compagnon de Saito Navi.

Où c'est stocké

Chaque FAQ — qu'elle soit sur un article, une page, un produit ou une catégorie — est stockée dans une seule meta, _navi_faq_items (post meta ou term meta selon le cas), sous forme de tableau :

array(
    'question' => 'Livrez-vous à l\'international ?',
    'answer'   => '<p>Oui, ...</p>', // HTML limité (wp_kses_post)
    'group'    => 'Commandes & Livraison', // optionnel, '' = pas de thème
)

Une seule source de vérité, un seul format, quel que soit l'endroit où la FAQ est éditée ou affichée.

💡 Couverture extensible sans toucher au code : les types de contenu (post, page, product) et les taxonomies (product_cat) sont filtrables via navi_faq_post_types et navi_faq_taxonomies.

Éditer une FAQ — fiche produit

Sur une fiche produit, la FAQ vit dans un panneau autonome « Navi » (metabox WordPress classique, add_meta_box()), sous l'éditeur de description. Chaque question est une ligne repliable : titre + thème au clic, question et réponse (éditeur visuel TinyMCE) une fois dépliée.

ℹ️ Si le plugin compagnon Saito Navi est aussi actif, son module Stories s'ajoute comme second onglet interne de ce même panneau « Navi » — FAQ et Stories partagent alors un seul emplacement plutôt que d'avoir chacune sa propre entrée dans « Données produit ». Sans Saito Navi, seul l'onglet FAQ s'affiche (pas de « meuble » d'onglets pour un seul onglet).
Panneau Navi sur une fiche produit — une question dépliée avec son éditeur, les suivantes repliées
Panneau Navi sur une fiche produit — une question dépliée, les suivantes repliées

Cliquer sur l'en-tête d'une question la déplie et affiche ses champs : thème optionnel, question (« telle qu'un client pourrait la poser »), réponse en HTML limité.

Une ligne dépliée avec son éditeur TinyMCE, en contexte dans l'écran complet
Une ligne dépliée avec son éditeur, en contexte dans l'écran complet

Éditer une FAQ — catégorie de produit

Un écran d'édition de terme (catégorie) n'a pas de add_meta_box() — WordPress y injecte des champs différemment ({taxonomy}_edit_form_fields). Navi FAQ y reproduit quand même l'habillage visuel d'un postbox (bordure, bandeau de titre « Navi ») pour que les deux écrans donnent la même impression de « boîte », même si le mécanisme WordPress sous-jacent diffère.

Boîte FAQ sur l'écran d'édition d'une catégorie de produit
Boîte FAQ sur l'écran d'édition d'une catégorie de produit

C'est exactement le même composant d'édition (JS, rendu des lignes, éditeur, dupliquer, import/export) que sur la fiche produit — seul l'habillage autour change pour s'adapter à l'écran WordPress.

Bas de l'écran catégorie : liste de destinations pour dupliquer, incluant les produits
Bas de l'écran catégorie : liste de destinations pour dupliquer, incluant les produits

Dupliquer des FAQ vers d'autres fiches

Sous la liste des questions, un bloc « Dupliquer ces FAQ vers... » permet de copier le jeu de questions actuellement affiché (y compris non enregistré) vers une ou plusieurs autres fiches — articles, pages, produits ou catégories.

Bloc de duplication : recherche de destination + liste à cocher
Bloc de duplication : recherche de destination + liste à cocher

Le champ « Rechercher une destination » filtre la liste en direct pendant la frappe (ici, taper « acc » ne garde que « My account » et « Category: Accessoires ») :

Filtre de recherche appliqué sur la liste des destinations
Filtre de recherche appliqué sur la liste des destinations
⚠️ La duplication remplace les FAQ existantes des destinations cochées par celles actuellement enregistrées sur la fiche source. Le plugin le rappelle explicitement dans l'interface : penser à sauvegarder ses modifications avant de dupliquer.

Côté technique : un clic sur « Dupliquer vers la sélection » déclenche une requête AJAX (wp_ajax_navi_faq_duplicate) protégée par un nonce dédié (navi_faq_duplicate), sans rechargement de page.

Importer / exporter en JSON

Chaque écran d'édition inclut aussi un mini import/export pour sauvegarder ou réutiliser un jeu de questions en dehors de WordPress :

Bloc Importer / Exporter (JSON)
Bloc Importer / Exporter (JSON)

Pratique pour dupliquer une trame de FAQ entre deux installations WordPress, ou garder une sauvegarde hors base de données.

Ce que voit le visiteur

Accordéon simple

Sans thème renseigné sur les questions, la FAQ s'affiche en accordéon simple (<details>/<summary> natifs) :

FAQ produit en front — un item ouvert, style accordéon
FAQ produit en front — un item ouvert, style accordéon

Sur une page de catégorie

Les catégories de produits n'ont pas de zone de contenu où poser un shortcode à la main — Navi FAQ y affiche donc la FAQ automatiquement, en haut de la page d'archive :

FAQ affichée automatiquement en haut d'une page de catégorie
FAQ affichée automatiquement en haut d'une page de catégorie

Regroupement par thème (onglets)

Donner le même thème à plusieurs questions les regroupe automatiquement sous un même onglet en front. Une seule catégorie de thème (ou aucune) : accordéon simple, pas d'onglets inutiles pour rien. Navigation clavier flèches gauche/droite/Home/End entre onglets (pattern ARIA Tabs).

Shortcodes

ShortcodeEffet
[navi_faq]FAQ du contexte courant : article/page/produit affiché, ou page d'archive d'une taxonomie couverte
[navi_faq_all]Toutes les FAQ du site, groupées par titre — pour une page « Questions fréquentes » centralisée

SEO — schéma FAQPage (JSON-LD)

Le plugin génère côté serveur un schéma FAQPage en JSON-LD, uniquement là où le contenu est réellement visible (recommandation Google) :

Pas de schéma « fantôme » pointant vers du contenu qui n'existe pas réellement sur la page.

Résumé technique

Architecture, hooks, fichiers
  • Donnée : une seule meta _navi_faq_items (post meta ou term meta), tableau question / answer (HTML limité, wp_kses_post) / group.
  • Admin fiche produit : includes/navi-panel.php — metabox autonome navi_panel_box (add_meta_box()), avec un système d'onglets internes (navi_product_panel_tabs) activé seulement si 2 fonctionnalités Navi ou plus sont enregistrées.
  • Admin catégorie : includes/admin.php, fonction navi_faq_render_term_field(), accrochée sur {taxonomy}_edit_form_fields — pas de add_meta_box() possible sur un écran de terme, d'où le .navi-panel-box qui reproduit l'habillage visuel à la main.
  • Duplication : AJAX wp_ajax_navi_faq_duplicate, nonce navi_faq_duplicate, remplace les FAQ des destinations cochées.
  • Front : includes/frontend.php — shortcodes navi_faq et navi_faq_all, accordéon <details>/<summary>, onglets ARIA si plusieurs thèmes, schéma FAQPage JSON-LD injecté conditionnellement.
  • Couverture filtrable sans toucher au code : navi_faq_post_types (défaut post, page, product) et navi_faq_taxonomies (défaut product_cat).
🧪 Version 0.1.0 — base fonctionnelle testée en environnement de développement local (captures ci-dessus prises sur cette instance). Pas encore soumis à WordPress.org.