Skip to content

feat: scope query loops to Tag/Category term archives - #127

Open
charl0tee wants to merge 1 commit into
feat/query-pagination-request-timefrom
feat/tag-category-archive
Open

feat: scope query loops to Tag/Category term archives#127
charl0tee wants to merge 1 commit into
feat/query-pagination-request-timefrom
feat/tag-category-archive

Conversation

@charl0tee

Copy link
Copy Markdown
Contributor

Contexte

Quand on visite une page de Tag (ou de Category), on veut afficher le template d'archive rempli avec les infos du terme courant et de la page courante pour la query loop.

Aujourd'hui, sur superstack, ni Tag ni Category ne sont résolus comme nœuds : seuls ContentType (archive de type de contenu), Page et Post le sont. Il n'existe donc aucune archive de taxonomie, et le bloc core/query ne sait pas se limiter au terme visité.

Cette PR ajoute le support complet des archives Tag/Category.

Ce que fait cette PR

WordPress

  • Expose le champ fseTemplate sur Tag et Category, résolu via la hiérarchie de templates (tag-{slug}tagarchive, idem pour category).

Next.js

  • Résout les nœuds Tag/Category (nouveaux fragments + fichiers de template data + entrées dans le tableau types de get-node-by-uri), de sorte que leur template d'archive s'affiche.
  • Ajoute term ({ taxonomy, databaseId }) au BlockDataContext, rempli à partir du nœud résolu et propagé dans le pipeline d'enrichissement des blocs.
  • Le getData du bloc core/query lit context.term et filtre la requête contentNodes via categoryIn / tagIn.

La page courante était déjà gérée par la pagination request-time — cette PR ne fait qu'ajouter le scoping par terme par-dessus.

Dépendance / base

⚠️ Empilée sur #126 (feat/query-pagination-request-time) : le scoping réutilise le BlockDataContext et le passage de contexte (page, baseUri) introduits par cette PR. La base de cette PR est donc feat/query-pagination-request-time et non future — à re-cibler sur future une fois #126 mergée.

Vérifications

  • npx tsc --noEmit : aucune nouvelle erreur (les erreurs restantes — next.config.ts, src/stories/* — préexistent et sont hors périmètre).
  • php -l OK sur register-fse-templates.php.

Notes

  • Multilang neutre par défaut (isMultilang: false) ; les fragments incluent languageFields/translationsFields (vides hors multilang) et translatable: true, sur le modèle de SinglePost.
  • Pas encore de SEO (seoTaxFragment) sur ces archives — ajoutable dans un second temps si besoin.

🤖 Generated with Claude Code

Resolve Tag and Category nodes as term archives that render their FSE
archive template, and scope the archive's `core/query` loop to the
current term at request time.

- WP: expose `fseTemplate` on Tag and Category (tag/category → archive
  template hierarchy).
- Next: resolve Tag/Category nodes (fragments + template data + node
  types), thread the current term through the block-data context, and
  filter the `contentNodes` query by `categoryIn`/`tagIn`.

Builds on the request-time block-data context from #126.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@charl0tee
charl0tee requested review from kuuak and snugglejuice July 29, 2026 13:30
@charl0tee

Copy link
Copy Markdown
Contributor Author

@kuuak @snugglejuice Same same, pour le support des Tag et Category comme archives

// Scope the loop to the current term archive (Tag/Category page) when one is
// in context, so the query returns only that term's posts.
const term = context?.term ?? null;
const categoryIn = term?.taxonomy === 'category' ? [term.databaseId] : null;

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@charl0tee Il faudrait avoir une constante qui défini les noms de nos catégories, extraire dans une fonction, + ajouter une doc dans le readme pour ça

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant