Come visualizzare i termini figli della tassonomia genitore del termine corrente?
Vorrei visualizzare un elenco di termini figli in base alla mia tassonomia corrente.
Nome della tassonomia ='course'
Photoshop(=termine figlio)
- ps-thematic#1(= termine figlio del figlio)
- ps-thematic#2
- ...
After Effects
ae-thematic#1
ae-thematic#2
...
Another course
- zz-thematic#1
- zz-thematic#1
Quindi, nel mio file taxonomy-course-photoshop.php
, vorrei visualizzare ps-thematic#1, ps-thematic#2, ecc.
Ho trovato molte domande e risposte su questo argomento.
Ne ho provate diverse.
Senza successo...
Ora sono molto confuso tra get_terms
, get_children_term
. O $args= array('parent' => $this_term->term_id,...}
Il mio ultimo tentativo è stato questo topic, che sembra perfetto, ma ottengo un messaggio di errore: Catchable fatal error: Object of class WP_Error could not be converted to string in
Grazie per qualsiasi aiuto.

Penso che tu possa semplicemente usare get_terms()
per questo. Questo è solo del codice minimale, immagino che tu voglia aggiungere anche permalink, descrizioni dei termini o altre cose.
Comunque, ho testato questo codice (ora testato con la tassonomia "course") e funziona.
Cerco di commentare il codice il meglio possibile man mano che procediamo:
// il nostro slug della tassonomia corrente
// Se vuoi ottenere la tassonomia corrente automaticamente prova a usare $wp_query->get_queried_object();
$taxonomy = 'course';
// otteniamo i termini della tassonomia 'course', ma solo i termini di livello superiore con (parent => 0)
$top_level_terms = get_terms( array(
'taxonomy' => $taxonomy,
'parent' => '0',
'hide_empty' => false,
) );
// solo se esistono effettivamente dei termini, procediamo
if ($top_level_terms) {
echo '<ul class="top-level-terms">';
foreach ($top_level_terms as $top_level_term) {
// l'id del termine di livello superiore, ci servirà più avanti
$top_term_id = $top_level_term->term_id;
// il nome del termine di livello superiore
$top_term_name = $top_level_term->name;
// la tassonomia corrente utilizzata
$top_term_tax = $top_level_term->taxonomy;
// nota che il tag di chiusura </li> è impostato più avanti, così possiamo aggiungere correttamente un sottolivello
echo '<li class="top-level-term"><strong>'.$top_term_name.'</strong>';
// qui otteniamo i termini figli dei figli
// per questo usiamo 'child_of' => $top_term_id
// Ho anche impostato 'parent' => $top_term_id qui, con questa riga vedrai solo questo livello e nessun altro figlio ulteriore
$second_level_terms = get_terms( array(
'taxonomy' => $top_term_tax, // potresti anche usare $taxonomy come definito nelle prime righe
'child_of' => $top_term_id,
'parent' => $top_term_id, // disabilita questa riga per vedere più elementi figli (termini figli dei figli)
'hide_empty' => false,
) );
// inizia un secondo elemento di lista se abbiamo termini di secondo livello
if ($second_level_terms) {
echo '<ul class="second-level-terms">';
foreach ($second_level_terms as $second_level_term) {
$second_term_name = $second_level_term->name;
echo '<li class="second-level-term">'.$second_term_name.'</li>';
}// END foreach
echo '</ul><!-- END .second-level-terms -->';
}// END if
echo '</li><!-- END .top-level-term -->';
}// END foreach
echo '</ul><!-- END .top-level-terms -->';
}// END if
Prova anche a usare print_r($top_level_term);
per esempio nel primo ciclo foreach. Con questo, puoi vedere tutte le informazioni che arrivano con un singolo termine.
Direi che dovresti usare questo codice nel normale template dell'archivio tassonomico e non usare il file taxonomy-course-photoshop.php
. Perché altrimenti avresti bisogno di un file template separato per ogni singolo termine, e questo non è pratico.
Modifica: Inoltre, assicurati di avere alcuni post assegnati ai singoli termini e sottotermini. Altrimenti, i termini non verranno visualizzati affatto!
Aggiornamento: Sì, puoi ottenere automaticamente i dati della tassonomia e del termine correnti.
Se stai lavorando all'interno di taxonomy-course.php
allora puoi provare questo:
// ottieni l'oggetto corrente
$current = $wp_query->get_queried_object();
// prova var_dump($current); per vedere tutti i dati disponibili!
// restituisce l'ID del termine corrente
// es. l'ID del termine "Photoshop" è "26", quindi otteniamo "26" se stiamo visualizzando "Photoshop"
$current_term_id = $current->term_id;
// restituisce il nome pulito del termine corrente
// es. restituisce "Photoshop"
// o "ps-thematic#1" se siamo su un termine figlio di "Photoshop"
$current_name = $current->name;
// restituisce lo slug della tassonomia corrente in cui ci troviamo
// es. restituirà "course"
$current_taxonomy = $current->taxonomy;
// restituisce l'ID del genitore, se ne abbiamo uno
// es. se stiamo visualizzando "ps-thematic#1" restituirà l'ID di "Photoshop", 26
// se stiamo visualizzando "Photoshop", restituirà 0, perché "Photoshop" è un termine di livello superiore
$current_parent = $current->parent;
// mostra il nome del termine corrente, es. "Photoshop"
echo '<strong>'.$current_name.'</strong>';
$sub_terms = get_terms( array(
'taxonomy' => $current_taxonomy,
'child_of' => $current_term_id,
'hide_empty' => false,
) );
// inizia solo se esistono dei sottotermini
if ($sub_terms) {
// prova var_dump($sub_terms); per vedere tutti i dati disponibili!
echo '<ul class="sub-terms">';
foreach ($sub_terms as $sub_term) {
// prova var_dump($sub_term); per vedere tutti i dati disponibili!
// mostra solo il nome per l'esempio, "ps-thematic#1"
echo '<li>'.$sub_term->name.'</li>';
}// END foreach
echo '</ul><!-- END .sub-terms -->';
}// END if
Quindi se stiamo visualizzando "Photoshop", la funzione sopra mostra SOLO:
Photoshop
- ps-thematic#1
- ps-thematic#2
Non mostra "After Effects" o i figli, ae-thematic#1 o ae-thematic#2.
Dai anche un'occhiata usando var_dump($current);
.
Vedrai tutte le informazioni disponibili. Come vedrai sopra, per esempio, ho lasciato del codice nella funzione $current_parent = $current->parent;
.
Per esempio potresti verificare:
// verifica se il genitore corrente non è = 0
if ($current_parent != '0') {
// codice se il genitore NON è 0
// questo significa sempre che stiamo visualizzando un figlio
} else {
// codice se il genitore è 0
// se il genitore è 0 siamo sicuri di essere su un livello superiore
}
Ma ci sono altre informazioni/dati in $current
che potresti usare.
Spero che questo sia d'aiuto.

Grazie, funziona davvero! Grazie ancora di più perché la tua risposta è così ben commentata, paziente e pedagogica! Rimane un problema: i termini (genitori e figli) sono visualizzati correttamente. Ma vengono visualizzati TUTTI i termini della mia tassonomia. Sto cercando di visualizzare solo i termini figlio del genitore corrente.

Intendo:
$top_level_terms = termine genitore corrente (esempio: Photoshop) (Mi trovo in taxonomy-course.php)
$second_level_terms = termini figli del mio genitore (es: thematic-photoshop01, thematic-photoshop01...)
Hai scritto:
$top_level_terms = get_terms(array...) È possibile aggiungere qualcosa per ottenere il termine corrente?
$top_level_terms = get_queried_object()->name;
Ma ripeto, ti ringrazio moltissimo per il tempo che hai già dedicato

@cha Ho appena aggiornato la mia risposta, vedi se questo aiuta. Ho anche ricreato la tua struttura di tassonomia/termini e ora stavo usando anche il file template taxonomy-course.php
. Solo per essere sicuro che funzioni in questo file.
