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


8

Une question WPSE connexe demande comment obtenir le terme en spécifiant uniquement l'ID, sans spécifier la taxonomie. Ma question est plus philosophique. Généralement, les choses 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 enregistrement à terme unique peut-il être membre de plusieurs taxonomies? Ce n'est certainement pas actuellement pris en charge dans l'API. Existe-t-il un cas d'utilisation où cela pourrait être souhaitable?

Ou le $taxonomyparamètre requis dans get_term()une queue résiduelle provient d'une incarnation antérieure de la structure de la base de données?


3
Je ne suis pas tout à fait sûr, mais je pense que c'est plus un problème de performances car le champ de taxonomie de la wp_term_taxonomytable est utilisé comme index pour cette table, ce qui rend la requête plus rapide (même si ce n'est qu'un terme).
Bainternet

@Bainternet Veuillez jeter un œil à la fin de mon A. EXPLAINdit term_id.
kaiser

1
Je pense que c'est une queue résiduelle. Enregistrement d'un ticket avec Trac: core.trac.wordpress.org/ticket/20536
Tom Auger

Réponses:


3

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 c'est nécessaire, car WordPress actuellement (depuis 2.x) a un bug qui associe deux termes avec le même nom au même term_id! Il est donc possible (quoique incorrect) qu'un seul terme soit associé à plusieurs taxonomies. Voir ce bogue: http://core.trac.wordpress.org/ticket/5809

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


C'est définitivement le cas! Ce bug m'a mordu sur une grande (plusieurs centaines) installations multisites ... Très bizarre. ET notez que le bogue a 5 ans ... Cependant, le correctif est prévu pour être inclus dans la version 3.6, donc cela peut être corrigé! (Enfin! :))
rinogo

Merci d'avoir mis à jour cette question pour choisir la bonne réponse, Tom! J'espère que cela aidera ceux qui se poseront sur cette question à l'avenir. Et merci pour la réponse / liens. Très utile.
rinogo

1
Rappel pour mettre à jour cette question - btw, n'y avait-il pas quelque chose avec un alias de terme ?
kaiser

Salut @kaiser, mettez-le à jour avec quoi? Je ne suis pas sûr qu'il y ait eu un autre mouvement positif vers une résolution des problèmes Trac mentionnés.
Tom Auger

Actuellement, sa cible est fixée à 3,7 au début . Voyons ce qui se passe. Que manque-t-il? Je n'ai pas pu suivre à la fin car il y a eu des tests unitaires d'après ce que j'ai lu.
kaiser

1

pourquoi avons-nous aussi besoin de la taxonomie? Un enregistrement à terme unique peut-il être membre de plusieurs taxonomies?

Non. Les termes sont limités pour prendre en charge les archives de termes. Et avoir les limaces deux fois fait apparaître beaucoup de minetraps ou de «wontfix» dans certains scénarios de permalien.

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

Oui: Imaginez que vous avez termes pour par exemple sizeet ont trois taxonomies nommés length, width et height(vous pouvez aussi penser à des couleurs). Mais ce n'est pas pris en charge pour les raisons décrites ci-dessus.

Généralement, les choses 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?

De regarder la table et d'exécuter un EXPLAIN, term_id est la clé primaire. Je suppose que sur des systèmes plus grands, il pourrait être plus rapide de ne rechercher que des termes spécifiques à la taxonomie en utilisant une jointure (lente) que de tout interroger, de les trier et de filtrer ce dont vous avez besoin.


D'après les sons des choses alors, c'est soit là par erreur (peut-être resté du schéma précédent) ou c'est là pour un futur cas où vous pourriez être autorisé à avoir des slugs en double (peu probable). Quoi qu'il en soit, je ne suis pas sûr que vous ayez répondu à ma question.
Tom Auger

@TomAuger "Y a-t-il un cas d'utilisation où cela pourrait être souhaitable": Oui. Mais le contre- poids pèse plus. Un terme dans la taxe A peut avoir le même nom que celui dans la taxe B, mais une signification différente par exemple. Donc, si vous vous interrogez sur le «poids» dans les taxonomies «importance» et «frais d'expédition», qu'est-ce qui serait «vraiment lourd»?
kaiser

Oui, mais ici nous parlons du terme ID, pas du terme NAME. L'ID dissipe déjà complètement le terme de tout autre terme (quelle que soit la taxonomie) qui pourrait avoir le même nom. Notez qu'il s'agit moins d'une question de base de données et plus de la raison pour laquelle elle a été laissée dans le code principal.
Tom Auger

@TomAuger Cela aurait été plus facile si vous aviez suivi ce Q à la fin de décembre. J'aurais maintenant retravaillé ceci: /
kaiser
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.