web-dev-qa-db-fra.com

Taxonomie personnalisée Breadcrumb Navigation

Je suis complètement nouveau dans les types de publication et les taxonomies personnalisés, alors supportez-moi. J'essaie de créer un fil d'Ariane pour la taxonomie personnalisée project-category dans le type d'article personnalisé projects. Essentiellement, j'en ai besoin pour fonctionner comme ceci:

Type de message personnalisé> Taxonomie personnalisée niveau 1> Taxonomie personnalisée niveau 2> Taxonomie personnalisée niveau 3> etc.

Chaque en-tête doit être lié à la page correspondante. J'ai ce genre de travail, mais ce n’est pas très dynamique, et il ne relie que trois niveaux de navigation. Voici mon code pour cela:

<ul>
    <li><a href="/projects">Projects</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>

Jusqu'au deuxième niveau, cela fonctionne actuellement, comme ci-dessous:

Type de message personnalisé> Niveau de taxonomie 1> Niveau de taxonomie 2

Mais si je passe à un troisième niveau, cela finit par être:

Type de message personnalisé> Niveau de taxonomie 2> Niveau de taxonomie 3

Plus je vais en profondeur, plus les niveaux sont profonds. Je sais que le problème est que je cherche juste un parent, mais je ne vois pas comment vérifier tous les parents possibles.

UPDATE: J'ai réussi à le faire fonctionner un peu mieux, mais il répertorie les choses en arrière. Voici mon code mis à jour:

<ul>
    <li><a href="<? echo home_url(); ?>/projects">Projects</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>

Au lieu de répertorier le type de message personnalisé> Niveau 1 de taxonomie> Niveau 2 de taxonomie> Le niveau 3 de taxonomie, il répertorie le type de message personnalisé> Niveau 2 de taxonomie> Niveau 1 de taxonomie> Niveau 3 de taxonomie. semble pas l’inverser.

Merci.

1
JacobTheDev

En utilisant votre méthode, je l'ai un peu modifiée pour la rendre plus viable. Voici le code, ci-dessous je vais expliquer.

<ul>
    <li><a href="<?php echo home_url(); ?>/projects">Projects</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>

Après avoir obtenu le terme, je l’assigne à un terme temporaire viable pour pouvoir l’écraser. SI ce terme a un parent, nous allons dans la boucle et obtenons les termes d'origine, mais nous l'attribuons à notre terme temporaire, car nous devons nous écarter du plus haut terme. Ainsi, lorsque la boucle s'exécute à nouveau, elle vérifie si term2 a un parent. . Nous stockons le code HTML dans un tableau car il est plus facile d’inverser et d’afficher en PHP. Si vous avez une question à propos de ce qui précède, faites-le moi savoir, j'espère que cela fonctionnera pour vous!

Oh! Aussi, vous devriez laisser WordPress s'occuper de vous procurer les liens de terme, c'est beaucoup plus fiable si les limaces changent.

5
Howdy_McGee

Je l'ai compris environ 10 minutes avant que @Howdy_McGee ait posté, mais j'ai pu utiliser une partie de leur code pour améliorer le mien. Voici ce que j'ai fini par utiliser;

$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>";
1
JacobTheDev