【2024】WordPressのオリジナルテーマでパンくずリストを自作する方法

ホームページ作成

ホームページやWebサイトを作成する上で、「パンくずリスト」はユーザーにとってわかりやすくサイト内を移動しやすくするだけでなく、SEOの改善にも貢献する有効なナビゲーション手法です。特に大規模なサイトや、複数のカテゴリを持つサイトでは、ユーザー体験の向上に大きく寄与します。今回はZeroStartで作成しているパンくずリストの作成方法を解説していきます。

今回つくるもの

作成・編集するファイル

  • content-panlist.php
  • stylecss(scss)

テンプレートパーツファイルを作成する

パンくずリストはあらゆるページで呼び出されるパーツになるため、まずはcontent-panlist.phpというテンプレートパーツを作成していきましょう。

<div class="pan-list">
    <div class="container">
        <ul>
            <li>
                <a href="<?php echo esc_url( home_url( '/' ) ); ?>">
                    <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-home" width="44"
                        height="44" viewBox="0 0 24 24" stroke-width="1.5" stroke="#ffffff" fill="none"
                        stroke-linecap="round" stroke-linejoin="round">
                        <path stroke="none" d="M0 0h24v24H0z" fill="none" />
                        <path d="M5 12l-2 0l9 -9l9 9l-2 0" />
                        <path d="M5 12v7a2 2 0 0 0 2 2h10a2 2 0 0 0 2 -2v-7" />
                        <path d="M9 21v-6a2 2 0 0 1 2 -2h2a2 2 0 0 1 2 2v6" />
                    </svg>
                    ホーム
                </a>
            </li>
            <?php
            if ( is_page() && $post->post_parent ) {
                // 分岐1: 親ページが指定されている固定ページ
                $parent_id = $post->post_parent;
                $breadcrumbs = array();
                while ( $parent_id ) {
                    $page = get_post( $parent_id );
                    $breadcrumbs[] = sprintf( '<li><a href="%s">%s</a></li>', esc_url( get_permalink( $page->ID ) ), esc_html( get_the_title( $page->ID ) ) );
                    $parent_id = $page->post_parent;
                }
                $breadcrumbs = array_reverse( $breadcrumbs );
                foreach ( $breadcrumbs as $crumb ) {
                    echo $crumb;
                }
                echo '<li>' . esc_html( get_the_title() ) . '</li>';
            } elseif ( is_singular( 'post' ) ) {
                // 分岐2: 投稿ページ
                $categories = get_the_category();
                if ( $categories ) {
                    $category = $categories[0];
                    echo '<li><a href="' . esc_url( get_category_link( $category->term_id ) ) . '">' . esc_html( $category->name ) . '</a></li>';
                }
                echo '<li>' . esc_html( get_the_title() ) . '</li>';
            } elseif ( is_singular( 'sample' ) ) {
                // 分岐3: カスタム投稿タイプ「sample」の個別投稿ページ
                echo '<li><a href="' . esc_url( get_post_type_archive_link( 'sample' ) ) . '">サンプル一覧</a></li>';
                echo '<li>' . esc_html( get_the_title() ) . '</li>';
            } elseif ( is_post_type_archive( 'sample' ) ) {
                // 分岐4: カスタム投稿タイプ「sample」のアーカイブページ
                echo '<li>サンプル一覧</li>';
            } elseif ( is_page() ) {
                // 分岐5: 親ページを持たない固定ページ
                echo '<li>' . esc_html( get_the_title() ) . '</li>';
            }

            if ( is_category() ) {
                $category = get_the_category();
                $current_cat_id = $category[0]->cat_ID;
                $parent_cat_id = $category[0]->category_parent;
                if ( $parent_cat_id != 0 ) {
                    // echo '<li>' . get_category_parents( $parent_cat_id, true, '</li>' );
                }
                echo '<li>' . single_cat_title( '', false ) . '</li>';
            } elseif ( is_404() ) {
                echo '<li>404 Not Found</li>';
            } elseif ( is_search() ) {
                echo '<li>Search Results for "' . get_search_query() . '"</li>';
            } elseif ( is_tag() ) {
                echo '<li>Tag: ' . single_tag_title( '', false ) . '</li>';
            } elseif ( is_author() ) {
                echo '<li>Author: ' . get_the_author_meta( 'display_name', get_query_var( 'author' ) ) . '</li>';
            } elseif ( is_day() ) {
                echo '<li>' . get_the_date() . '</li>';
            } elseif ( is_month() ) {
                echo '<li>' . get_the_date( 'F Y' ) . '</li>';
            } elseif ( is_year() ) {
                echo '<li>' . get_the_date( 'Y' ) . '</li>';
            } elseif ( is_archive() && !is_post_type_archive( 'sample' ) ) {
                echo '<li>Archive</li>';
            } elseif ( is_home() ) {
                echo '<li>Blog</li>';
            }
            ?>
        </ul>
    </div>
</div>

冗長ではありますが、やっている処理は至ってシンプルです。

それぞれのページの種類に合わせて分岐を用意し、それに対応するリンクの生成や親ページ・親カテゴリを生成するようにしています。

カスタム投稿タイプを利用している場合は、カスタム投稿タイプ用の分岐もしっかり用意しましょう。

style.css(scss)を編集する

style.css(scss)には以下のコードを記述していきます。

.pan-list {
    width: 100%;
    background-image: linear-gradient(to right, #fa709a 0%, #fee140 100%);

    .container {
        width: 1200px;
        margin: auto;
    }

    ul {
        display: flex;
        flex-wrap: wrap;

        li {
            list-style: none;
            display: flex;
            align-items: center;
            color: #fff;
            font-size: 12px;
            padding: 8px;
            margin-right: 10px;
            width: max-content;

            a {
                display: flex;
                align-items: center;
                color: #fff;
                font-size: 12px;
            }

            svg {
                height: 15px;
                width: 15px;
                margin-right: 5px;
            }
        }

        li:nth-child(n+2) {
            position: relative;

            &::before {
                content: '>';
                position: absolute;
                top: 0;
                bottom: 0;
                left: -10px;
                color: #fff;
                display: block;
                height: max-content;
                width: max-content;
                margin: auto;
            }
        }
    }
}

それぞれのページで呼び出す

content-panlist.phpを作成しstyle.cssへの追記が完了したら、パンくずリストが必要なページで呼び出していきましょう。

呼び出す時は以下のコードを使用します。

<?php get_template_part('template-parts/content', 'contact'); ?>

まとめ

今回はZeroStartで作成しているパンくずリストの作成方法を解説しました。パンくずリストがある場合とない場合ではユーザーの操作性だけでなく、SEOの観点から見ても大きな差が出る部分になるので、ホームページやWebサイトを作成する際は積極的に取り入れていきましょう。

ZeroStartでは初期費用0円でお客様に合わせたオリジナルテーマを使用したホームページ作成を行っています!ホームページ作成についてご相談がございましたらお気軽にご連絡ください!

ホームページ作成の
ご相談・申込みはこちら

ZeroStartではホームページ作成における充実したノウハウを駆使し、
お客様が愛着を持てるホームページを作成致します。
ホームページ作成でご不安や不明点等お気軽にご相談ください