web-dev-qa-db-fra.com

Pourquoi get_term () nécessite-t-il une taxonomie? Les term_ids ne sont-ils pas uniques?

Une question WPSE connexe demande comment obtenir le terme en spécifiant uniquement un ID, sans spécifier de taxonomie. Ma question est plus philosophique. Généralement, les éléments contenus dans WP core sont là pour une raison. J'essaie de comprendre pourquoi term_id ne peut pas être la clé primaire du terme - pourquoi avons-nous également besoin de la taxonomie? Un seul enregistrement de terme peut-il être membre de plusieurs taxonomies? Ce n'est certainement pas actuellement pris en charge dans l'API. Y a-t-il un cas d'utilisation où cela pourrait être souhaitable?

Ou le paramètre requis $taxonomy dans get_term() est-il une queue résiduelle d'une incarnation antérieure de la structure de la base de données?

8
Tom Auger

J'ai enregistré un ticket contre cela avec trac: http://core.trac.wordpress.org/ticket/20536

Cependant, il s'avère que pour le moment IS nécessaire, car WordPress (depuis la version 2.x) a un bogue qui associe deux termes du même nom au même term_id! Il est donc IS possible (bien que incorrect) d'associer un terme unique à plusieurs taxonomies. Voir ce bogue: http://core.trac.wordpress.org/ticket/5809

Il est assez large et la mise en œuvre du correctif devra être testée de manière approfondie. Je vais essayer de me rappeler de mettre à jour cette question s'il y a des développements.

3
Tom Auger

pourquoi avons-nous également besoin de la taxonomie? Un seul enregistrement de terme peut-il être membre de plusieurs taxonomies?

Les termes ont des slugs pour supporter les archives de termes. Et avoir les slugs deux fois fait apparaître beaucoup de minetraps ou "wontfix" dans certains scénarios de permalien.

Y a-t-il un cas d'utilisation où cela pourrait être souhaitable?

Oui: imaginez que vous ayez des conditions pour, par exemple, size et avoir trois taxonomies nommées length, width et height (vous pouvez aussi penser aux couleurs). Mais ce n'est pas supporté pour les raisons écrites ci-dessus.

Généralement, les éléments contenus dans WP core sont là pour une raison. J'essaie de comprendre pourquoi term_id ne peut pas être la clé primaire du terme - pourquoi avons-nous également besoin de la taxonomie?

En regardant la table et en exécutant une EXPLAIN, term_id est la clé primaire. J'imagine que sur les grands systèmes, il serait peut-être plus rapide d'interroger uniquement les termes spécifiques à la taxonomie à l'aide d'une jointure (lente) plutôt que de les interroger tous, de les trier et de les filtrer.

1
kaiser