web-dev-qa-db-ja.com

カスタム分類ブレッドクラムナビゲーション

私はカスタム投稿タイプとカスタム分類法にまったく慣れていないので、私と一緒にいてください。カスタム投稿タイプprojects内にカスタム分類法project-categoryのブレッドクラムナビゲーションを作成しようとしています。基本的に、私はこのように動作するためにそれが必要です:

カスタム投稿の種類>カスタム分類レベル1>カスタム分類レベル2>カスタム分類レベル3>など.

各見出しは対応するページにリンクされている必要があります。私はこの 種類の 作業をしていますが、あまり動的ではなく、3つのレベルのナビゲーションをリンクするだけです。これが私のコードです。

<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>

第2レベルまでは、これは現在以下のように動作します。

カスタム投稿の種類>分類レベル1>分類レベル2

しかし、私が第三段階に行けば、それは結局のところです:

カスタム投稿の種類>分類レベル2>分類レベル3

私が深くなればなるほど、レベルは深くなります。私は問題はImがただ1人の親をチェックすることであるということを知っています、しかし私はすべての可能な親をチェックする方法を理解することができません。

更新:私はそれをもう少しうまく機能させることができました、しかしそれは後ろに物事をリストしています。これが私の最新のコードです。

<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>

[カスタム投稿タイプ]> [分類レベル1]> [分類レベル2]> [分類レベル3]の代わりに、[カスタム投稿タイプ]> [分類レベル2]> [分類レベル1]> [分類レベル3]と表示します。それを逆にするようです。

ありがとう。

1
JacobTheDev

あなたの方法を使用して、私はそれをより実行可能にするためにそれを少し編集しました。これが以下のコードです。

<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>

あなたが用語を入手した後、私はそれを上書きできるように実行可能な一時的な用語に割り当てます。その項に親がある場合はループに入り、元の項を親にします。ただし、最上位の語まで煮詰める必要があるため、これを一時語に割り当てます。 。 HTMLでは逆にして表示する方が簡単なので、HTMLを配列に格納します。あなたが上記について質問があるならば、私に知らせてください、うまくいけばそれはあなたのために働く!

ああ!また、WordPressにリンクという用語をあなたに代わってもらうようにしてください。ナメクジが変われば、はるかに信頼性が高くなります。

5
Howdy_McGee

@Howdy_McGeeが投稿する約10分前にそれを考え出しました、しかし私は私のものを改善するために彼らのコードの一部を使うことができました。これが私が使ったものです。

$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