¿Puede una categoría hija tener más de un padre en WordPress?
Estoy revisando la función get_categories()
en el codex de WordPress para ver cómo puedo devolver todos los hijos de cada "padre raíz" (categorías que no tienen padres). Por ejemplo, si estoy interesado en los hijos de múltiples "padres raíz", me gustaría saber si habrá más de una instancia del mismo hijo bajo un "padre raíz" diferente.
Esto me lleva a preguntar:
¿Pueden las categorías hijas en WordPress tener múltiples padres diferentes?

No, un término puede tener muchos hijos, pero solo un único padre. El campo parent en la base de datos solo puede contener un único valor.
Es una relación jerárquica de uno a muchos, no una relación de muchos a muchos.
Lo mismo ocurre con las publicaciones. Una publicación puede tener solo 1 padre, pero muchos hijos. Para solucionar eso, usarías taxonomías.
Una nota al margen sobre wp_term_taxonomy
y prueba contundente
Se ha sugerido que el mismo término podría tener múltiples entradas en esta tabla, permitiéndole tener múltiples padres y ser compartido entre varios términos padres.
Aquí está el esquema de la base de datos:
Como puedes ver, si el mismo término y taxonomía se refirieran múltiples veces, pero con un padre diferente, ¿quizás un término podría tener múltiples padres?
No, el term_id
y el taxonomy_id
son ambos únicos, tal cosa no sería posible de crear en esa tabla sin cambiar su esquema. Para demostrar esto, abrí Sequel Pro.
Aquí tenemos un término en mi copia local de mi blog:
Tiene un padre de 4, intentemos darle un segundo padre de 5:
INSERT INTO `tjn2_term_taxonomy` (`term_taxonomy_id`, `term_id`, `taxonomy`, `description`, `parent`, `count`)
VALUES
(13, 13, 'category', '', 5, 0);
Cuando se ejecuta, esta consulta da el siguiente error:
Entonces no, un término no puede tener más de un padre. Pero incluso si pudiera, no habría ningún mecanismo en las APIs para descubrirlo sin usar sentencias SQL directas, por lo que tal término sería inútil e inutilizable en las interfaces de usuario del frontend y backend

Hay un detalle sutil del que hay que tener cuidado aquí. Debes especificar el hijo por ID de taxonomía porque el mismo término puede aparecer en múltiples lugares dentro de una taxonomía jerárquica. En otras palabras, un término considerado como una cadena puede tener múltiples padres, pero ese término en realidad no es un único elemento de taxonomía, sino que corresponde a múltiples elementos de taxonomía con el mismo valor de cadena.

¿Te refieres a si una etiqueta y una categoría comparten el mismo slug? Claro, puedo ver eso, aunque si estás trabajando dentro de la misma taxonomía en el escenario del OP, no debería ser un problema. ¡Tu punto también aplica a los tipos de post!

En una taxonomía jerárquica el mismo término puede aparecer en múltiples lugares. Considera la jerarquía de autos con primer nivel - GM, Ford, Chrysler. En el segundo nivel cada uno podría tener la subcategoría sedán, camioneta, es decir, GM->sedán y Ford->sedán donde "sedán" sería el mismo término pero no el mismo término de taxonomía. Si observas la estructura de las bases de datos de WordPress, hay una tabla wp_terms y una tabla wp_term_taxonomy para permitir el compartir términos. Los posts están estructurados de manera diferente. Usan una sola tabla con un campo post_parent. Además, el compartir ocurre dentro de la misma taxonomía.

En otras palabras, hay una razón por la cual existe un term_id y un term_taxonomy_id. Ten en cuenta que la tabla wp_posts solo tiene una columna ID, por lo que realmente está estructurada de manera diferente.

No, no hay forma de configurar eso en la interfaz de usuario o en la API, y esos campos son únicos en el esquema de la base de datos. Prueba a ejecutar el SQL y fallará.

Por supuesto, los term_taxonomy_ids son únicos, pero dos term_taxonomy_ids diferentes pueden compartir el mismo term_id. Intenta cambiar tu primer 13 en tu inserción por un term_taxonomy_id inexistente, dejando el segundo 13 igual y también cambia el parent por otro parent existente.

Sigue fallando "Entrada duplicada '13-category' para la clave 'term_id_taxonomy'". No es posible, si no estás de acuerdo, te reto a que lo demuestres. Pero incluso si fuera posible, no es de utilidad y completamente irrelevante para la pregunta original.

Tienes razón y estoy totalmente equivocado. Pero, ahora realmente no entiendo por qué debe haber un term_id y un term_taxonomy_id. De todos modos, lamento mucho haberte causado este problema.

De hecho es una configuración extraña, y el equipo central está evaluando cambiarla en el futuro. Este artículo de Andrew Nacin cubre el plan para los metadatos de términos y las tablas de taxonomía con más detalle http://make.wordpress.org/core/2013/07/28/potential-roadmap-for-taxonomy-meta-and-post-relationships/

Intenta estructurar tus categorías con la clase tax-meta-class http://en.bainternet.info/wordpress-taxonomies-extra-fields-the-easy-way/.
Podrás añadir campos meta a tus taxonomías (categorías, etiquetas, taxonomías personalizadas).
