Una categoria figlia può avere più di un genitore in WordPress?
Sto esaminando la funzione get_categories()
nel codex di WordPress per capire come restituire tutti i figli di ogni "genitore radice" (categorie senza genitori). Ad esempio, se mi interessano i figli di più "genitori radice", vorrei sapere se ci sarà più di un'istanza dello stesso figlio sotto un diverso "genitore radice".
Questo mi porta a chiedermi:
Le categorie figlie in WordPress possono avere più genitori diversi?

No, un termine può avere molti figli, ma solo un singolo genitore. Il campo parent nel database può contenere solo un singolo valore.
È una relazione gerarchica uno a molti, non una relazione molti a molti.
Lo stesso vale per gli articoli. Un articolo può avere solo 1 genitore, ma molti figli. Per aggirare questa limitazione dovresti utilizzare le tassonomie.
Una nota su wp_term_taxonomy
e la prova definitiva
È stato suggerito che lo stesso termine potrebbe avere più voci in questa tabella, permettendogli di avere più genitori e di essere condiviso tra più termini genitore.
Ecco lo schema del database:
Come puoi vedere, se lo stesso termine e tassonomia fossero referenziati più volte, ma con un genitore diverso, forse un termine potrebbe avere più genitori?
No, il term_id
e il taxonomy_id
sono entrambi univoci, una cosa del genere non sarebbe possibile creare in quella tabella senza modificarne lo schema. Per dimostrarlo, ho aperto Sequel Pro.
Qui abbiamo un termine nella mia copia locale del blog:
Ha un genitore con ID 4, proviamo ad assegnargli un secondo genitore con ID 5:
INSERT INTO `tjn2_term_taxonomy` (`term_taxonomy_id`, `term_id`, `taxonomy`, `description`, `parent`, `count`)
VALUES
(13, 13, 'category', '', 5, 0);
Quando eseguita, questa query restituisce il seguente errore:
Quindi no, un termine non può avere più di un genitore. Ma anche se potesse, non ci sarebbe alcun meccanismo nelle API per scoprirlo a parte query SQL dirette, quindi un termine del genere sarebbe inutilizzabile sia nel frontend che nelle interfacce di backend

C'è una sottigliezza di cui bisogna stare attenti qui. È necessario specificare il figlio tramite l'ID della tassonomia perché lo stesso termine può apparire in più punti di una tassonomia gerarchica. In altre parole, un termine considerato come stringa può avere più genitori, ma quel termine in realtà non è un singolo elemento della tassonomia bensì corrisponde a più elementi della tassonomia con lo stesso valore di stringa.

Intendi se un tag e una categoria condividono lo stesso slug? Certo, posso capirlo, anche se nello scenario dell'OP, se si rimane all'interno della stessa tassonomia, non dovrebbe essere un problema. Il tuo punto si applica anche ai tipi di post!

In una tassonomia gerarchica lo stesso termine può comparire in più posizioni. Considera la gerarchia delle auto con il primo livello - GM, Ford, Chrysler. Al secondo livello potrebbero avere ciascuna la sotto-categoria berlina, pickup, cioè GM->berlina e Ford->berlina dove "berlina" sarebbe lo stesso termine ma non lo stesso termine di tassonomia. Se osservi la struttura dei database di WordPress, c'è una tabella wp_terms e una wp_term_taxonomy per consentire la condivisione dei termini. I post sono strutturati diversamente. Utilizzano una singola tabella con un campo post_parent. Inoltre, la condivisione avviene all'interno della stessa tassonomia.

In altre parole, c'è un motivo per cui esiste un term_id e un term_taxonomy_id. Nota che la tabella wp_posts ha solo una colonna ID, quindi è strutturata in modo diverso.

No, non c'è modo di impostarlo tramite l'interfaccia utente o l'API, e quei campi sono unici nello schema del database, prova a eseguire l'SQL e fallirà

Naturalmente i term_taxonomy_ids sono unici, ma due diversi term_taxonomy_ids possono condividere lo stesso term_id. Prova a modificare il tuo primo 13 nel tuo insert con un term_taxonomy_id inesistente, lasciando il secondo 13 uguale, e cambia anche il parent con un altro parent esistente.

Continua a fallire con "Duplicate entry '13-category' for key 'term_id_taxonomy'" non è possibile, se non sei d'accordo ti sfido a dimostrarlo. Ma anche se fosse possibile, non è utile e completamente irrilevante per la domanda originale

Hai ragione e io ho totalmente torto. Ma, ora davvero non capisco perché ci debbano essere un term_id e un term_taxonomy_id. Comunque, mi dispiace davvero averti causato questo disturbo.

In effetti è una configurazione strana, e il team di sviluppo sta valutando di cambiarla in futuro, questo articolo di Andrew Nacin approfondisce il piano per i meta dei termini e le tabelle delle tassonomie http://make.wordpress.org/core/2013/07/28/potential-roadmap-for-taxonomy-meta-and-post-relationships/

Prova a strutturare le tue categorie con la tax-meta-class http://en.bainternet.info/wordpress-taxonomies-extra-fields-the-easy-way/.
Sarai in grado di aggiungere campi meta alle tue tassonomie (categorie, tag, taxonomie personalizzate).
