Navigazione a Breadcrumb per Tassonomia Personalizzata in WordPress
Sono completamente nuovo ai custom post type e alle tassonomie personalizzate, quindi abbiate pazienza. Sto cercando di creare una navigazione a breadcrumb per la tassonomia personalizzata project-category
all'interno del custom post type projects
. In sostanza, deve funzionare così:
Custom Post Type > Livello 1 Tassonomia > Livello 2 Tassonomia > Livello 3 Tassonomia > ecc.
Ogni voce deve essere linkata alla pagina corrispondente. Ho un codice che più o meno funziona, ma non è molto dinamico e supporta solo tre livelli di navigazione. Ecco il mio codice attuale:
<ul>
<li><a href="/projects">Progetti</a></li>
<?
$term = get_term_by("slug", get_query_var("term"), get_query_var("taxonomy") );
$parent = get_term($term->parent, get_query_var("taxonomy"));
if ($parent->name != "") {
echo "<li><a href=\"/project-category/" . $parent->slug . "\">" . $parent->name . "</a></li>";
}
if (is_tax("project-category")) {
$term = get_term_by("slug", get_query_var("term"), get_query_var("taxonomy"));
$tax_term_breadcrumb_taxonomy_slug = $term->taxonomy;
echo "<li><a href=\"/project-category/" . $term->slug . "\">" . $term->name . "</a></li>";
}
?>
</ul>
Fino al secondo livello questo codice funziona, mostrando:
Custom Post Type > Livello 1 Tassonomia > Livello 2 Tassonomia
Ma se scendo al terzo livello, ottengo:
Custom Post Type > Livello 2 Tassonomia > Livello 3 Tassonomia
Più scendo in profondità, più i livelli si spostano. So che il problema è che sto controllando solo un parent, ma non riesco a capire come controllare tutti i possibili parent.
AGGIORNAMENTO: Sono riuscito a migliorare il codice, ma ora elenca gli elementi al contrario. Ecco il codice aggiornato:
<ul>
<li><a href="<? echo home_url(); ?>/projects">Progetti</a></li>
<?
$term = get_term_by("slug", get_query_var("term"), get_query_var("taxonomy") );
$parent = get_term($term->parent, get_query_var("taxonomy"));
while ($parent->term_id) {
echo "<li><a href=\"" . home_url() . "/project-category/" . $parent->slug . "\">" . $parent->name . "</a></li>";
$parent = get_term($parent->parent, get_query_var("taxonomy"));
}
echo "<li><a href=\"" . home_url() . "/project-category/" . $term->slug . "\">" . $term->name . "</a></li>";
?>
</ul>
Invece di mostrare Custom Post Type > Livello 1 Tassonomia > Livello 2 Tassonomia > Livello 3 Tassonomia, mostra Custom Post Type > Livello 2 Tassonomia > Livello 1 Tassonomia > Livello 3 Tassonomia. Il problema è nel ciclo while, ma non riesco a invertire l'ordine.
Grazie.

Utilizzando il tuo metodo, l'ho modificato un po' per renderlo più funzionale. Ecco il codice, di seguito spiegherò.
<ul>
<li><a href="<?php echo home_url(); ?>/projects">Progetti</a></li>
<?php
$term = get_term_by("slug", get_query_var("term"), get_query_var("taxonomy") );
$tmpTerm = $term;
$tmpCrumbs = array();
while ($tmpTerm->parent > 0){
$tmpTerm = get_term($tmpTerm->parent, get_query_var("taxonomy"));
$crumb = '<li><a href="' . get_term_link($tmpTerm, get_query_var('taxonomy')) . '">' . $tmpTerm->name . '</a></li>';
array_push($tmpCrumbs, $crumb);
}
echo implode('', array_reverse($tmpCrumbs));
echo '<li><a href="' . get_term_link($tmpTerm, get_query_var('taxonomy')) . '">' . $term->name . '</a></li>';
?>
</ul>
Dopo aver ottenuto il termine, lo assegno a un termine temporaneo modificabile così posso sovrascriverlo. SE quel termine ha un genitore entriamo nel ciclo e otteniamo il genitore del termine originale, ma lo assegniamo al nostro termine temporaneo perché dobbiamo risalire fino al termine più alto, così quando il ciclo viene eseguito nuovamente verifica se term2 ha un genitore. Memorizziamo l'HTML in un array perché è più semplice invertirlo e visualizzarlo in PHP. Se hai domande su quanto sopra fammi sapere, spero funzioni per te!
Oh! Inoltre dovresti lasciare che WordPress si occupi di ottenere i link dei termini per te, è molto più affidabile se gli slug cambiano.

Ho capito circa 10 minuti prima che @Howdy_McGee postasse, ma sono riuscito a utilizzare parte del suo codice per migliorare il mio. Ecco cosa ho ottenuto alla fine:
$term = get_term_by("slug", get_query_var("term"), get_query_var("taxonomy") );
$parent = get_term($term->parent, get_query_var("taxonomy"));
$parentItems = array();
while ($parent->term_id) {
array_push($parentItems,"<li><a href=\"" . home_url() . "/project-category/" . $parent->slug . "\">" . $parent->name . "</a></li>");
$parent = get_term($parent->parent, get_query_var("taxonomy"));
}
echo implode (array_reverse($parentItems));
echo "<li><a href=\"" . home_url() . "/project-category/" . $term->slug . "\">" . $term->name . "</a></li>";
