¿Por qué get_term () requiere taxonomía? ¿Los term_ids no son únicos?

8

Una pregunta relacionada con WPSE pregunta cómo obtener el término especificando solo ID, sin especificar taxonomía. Mi pregunta es más filosófica. En general, las cosas en el núcleo de WP están ahí por una razón. Estoy tratando de entender por qué term_id no puede ser la clave principal del término, ¿por qué también necesitamos la taxonomía? ¿Puede un solo registro de término ser miembro de múltiples taxonomías? Eso ciertamente no es compatible actualmente con la API. ¿Hay algún caso de uso en el que esto sea deseable?

¿O es el $taxonomyparámetro requerido en get_term()una cola vestigial de una encarnación anterior de la estructura de la base de datos?

Tom Auger
fuente
3
No estoy completamente seguro, pero creo que es más un problema de rendimiento ya que el campo de taxonomía de la wp_term_taxonomytabla se usa como índice para esa tabla, lo que hace que la consulta sea más rápida (incluso si es solo un término).
Bainternet
@Bainternet Por favor, eche un vistazo al final de mi A. EXPLAINdice term_id.
kaiser
1
Creo que es una cola vestigial. Registro de un ticket con Trac: core.trac.wordpress.org/ticket/20536
Tom Auger el

Respuestas:

3

He registrado un boleto contra esto con trac: http://core.trac.wordpress.org/ticket/20536

Sin embargo, resulta que por el momento ES necesario, ya que WordPress actualmente (desde 2.x) tiene un error que SÍ asocia dos términos con el mismo nombre al mismo term_id. Entonces es posible (aunque incorrecto) que un solo término se asocie con más de una taxonomía. Vea este error: http://core.trac.wordpress.org/ticket/5809

Es bastante amplio, por lo que la implementación de la solución tendrá que ser probada de forma exhaustiva. Intentaré recordar actualizar esta pregunta si hay algún desarrollo.

Tom Auger
fuente
Este es definitivamente el caso! Este error me mordió en una gran instalación de varios sitios (varios cientos) ... Muy raro. Y tenga en cuenta que el error tiene 5 años ... Sin embargo, el parche está programado para su inclusión en la versión 3.6, por lo que esto puede solucionarse. (¡Finalmente! :))
rinogo
¡Gracias por actualizar esta pregunta para elegir la respuesta correcta, Tom! Esperemos que esto ayude a quienes lleguen a esta cuestión en el futuro. Y gracias por la respuesta / enlaces. Muy útil.
rinogo
1
Recordatorio para actualizar esta pregunta : por cierto, ¿no había algo con alias de término ?
kaiser
Hola @kaiser, ¿actualízalo con qué? No estoy seguro de que haya habido otro movimiento positivo hacia una resolución de los problemas de Trac mencionados.
Tom Auger
Actualmente su objetivo está establecido en 3.7-temprano . Veamos qué pasa. ¿Lo que falta? No pude seguir al final ya que hubo una prueba unitaria de lo que leí.
kaiser
1

¿Por qué necesitamos también la taxonomía? ¿Puede un solo registro de término ser miembro de múltiples taxonomías?

No. Los términos tienen babosas para admitir archivos de términos. Y tener las babosas dos veces trae muchas trampas mineras o "wontfix" en algunos escenarios de enlaces permanentes.

¿Hay algún caso de uso en el que esto sea deseable?

Sí: imagine que tiene términos para, por ejemplo, sizey tiene tres taxonomías nombradas length, width y height(también podría pensar en colores). Pero eso no es compatible por las razones escritas anteriormente.

En general, las cosas en el núcleo de WP están ahí por una razón. Estoy tratando de entender por qué term_id no puede ser la clave principal del término, ¿por qué necesitamos también la taxonomía?

Desde mirar la mesa y ejecutar un EXPLAIN, term_id es la clave principal. Supongo que en sistemas más grandes podría ser más rápido consultar solo términos específicos de taxonomía utilizando una unión (lenta) que consultar todos, ordenarlos y filtrar lo que necesita.

emperador
fuente
Por el sonido de las cosas, entonces, o está allí por error (tal vez sobrante del esquema anterior) o está allí para algún caso futuro en el que se le permita tener babosas duplicadas (poco probable). En cualquier caso, no estoy seguro de que hayas respondido mi pregunta.
Tom Auger
@TomAuger "¿Hay algún caso de uso en el que esto sea deseable?": Sí. Pero la contra pesa más. Un término en el impuesto A puede tener el mismo nombre que uno en el impuesto B, pero un significado diferente, por ejemplo. Entonces, si está preguntando "peso" en taxonomías "importancia" y "costos de envío", ¿qué sería "realmente pesado"?
kaiser
Sí, pero aquí estamos hablando de ID de término, no de NOMBRE de término. La ID ya desambigua completamente el término de cualquier otro término (en cualquier taxonomía) que pueda tener el mismo nombre. Tenga en cuenta que esto es menos una pregunta de la base de datos y más sobre por qué se dejó en el código central.
Tom Auger
@TomAuger Hubiera sido más fácil si siguieras esta Q a fines de diciembre. Ahora habría vuelto a trabajar en esto: /
kaiser