LoginSignup
1
1

More than 3 years have passed since last update.

Wordpressでプラグインを使わずにパンくずリストを実装する方法。

Posted at

一番簡単に実装するならYoastのパンくずリストを使おう。SEO対策ですでに入れてると思うのでついでに使うのが吉。

Yoast入れてるなら次のコードでパンくずリストを設置できる。

<?php
if ( function_exists('yoast_breadcrumb') ) {
  yoast_breadcrumb( '<div id="breadcrumbs">','</div>' );
}
?>

プラグイン使わずパンくずリストを実装する

以下のコードをfunctions.phpに追記する。

パラメータにはhtmlタグ用のclassを指定する配列を入れている。

if ( ! function_exists( 'my_custom_breadcrumb' ) ) {
    /**
     * Desiplay Breadcrumb
     * $class = ['ol' => 'ol-class','li' => 'li-class','a' => 'a-class','bar' => 'bar-class',];
    */
    function my_custom_breadcrumb($class) {
        global $post;
        if ( !is_front_page() ) {
            echo '<ol class="'.$class['ol'].'" itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb">';

            echo '<li class="'.$class['li'].'" itemprop="title"><a class="'.$class['a'].'" href="'.home_url().'" itemprop="url">Home</a></li>';
            echo '<li class="'.$class['bar'].'">/</li>';

            if ( is_home() ) {
                $title = wp_title('',false,'');
                echo '<li class="'.$class['li'].'" itemprop="title">'.$title.'</li>';
            } elseif ( is_category() ) {
                $cat_id = get_query_var('cat');
                $cat_link = get_category_link( $cat_id );
                $cat_name = get_cat_name( $cat_id );

                echo '<li class="'.$class['li'].'" itemprop="title">';
                echo '<a class="'.$class['a'].'" href="'.$cat_link.'">'.$cat_name.'</a></li>';
            } elseif ( is_single() ) {
                $category = get_the_category();
                $cat_link = get_category_link( $category[0]->term_id );
                $cat_name = $category[0]->cat_name;

                echo '<li class="'.$class['li'].'" itemprop="title">';
                echo '<a class="'.$class['a'].'" href="'.$cat_link.'">'.$cat_name.'</a></li>';
                echo '<li class="'.$class['bar'].'">/</li>';
                echo '</li><li class="'.$class['li'].'" itemprop="title">';
                the_title();
                echo '</li>';
            } elseif ( is_page() ) {
                if($post->post_parent){
                    $anc = get_post_ancestors( $post->ID );
                    $title = get_the_title();
                    foreach ( $anc as $ancestor ) {
                        $output = '<li class="'.$class['li'].'" itemprop="title"><a class="'.$class['a'].'" href="'.get_permalink($ancestor).'" title="'.get_the_title($ancestor).'" itemprop="url">'.get_the_title($ancestor).'</a></li>';
                    }
                    echo $output;
                    echo '<li class="'.$class['li'].'" title="'.$title.'" itemprop="title"> '.$title.'</li>';
                } else {
                    echo '<li class="'.$class['li'].'">'.get_the_title().'</li>';
                }
            } elseif ( is_tag() ) {
                echo'<li class="'.$class['li'].'" itemprop="title">';
                single_tag_title();
                echo'</li>';
            } elseif ( is_day() ) {
                echo'<li class="'.$class['li'].'" itemprop="title">';
                echo get_the_date();
                echo'</li>';
            } elseif ( is_month() ) {
                echo'<li class="'.$class['li'].'" itemprop="title">';
                echo get_the_date('Y - M');
                echo'</li>';
            } elseif ( is_year() ) {
                echo'<li class="'.$class['li'].'" itemprop="title">';
                echo get_the_date('Y');
                echo'</li>';
            } elseif ( is_author() ) {
                echo'<li class="'.$class['li'].'" itemprop="title">';
                the_author_meta('display_name');
                echo'</li>';
            } elseif ( is_search() ) {
                echo'<li class="'.$class['li'].'" itemprop="title">';
                the_search_query();
                echo'</li>';
            }

            echo '</ol>';
        }
    }
}

パンくずリストをテンプレートで表示

一覧ページや個別記事ページの表示したい位置に設置。

htmlを出力するだけなので、navタグなどで囲んでもOK。

$classList = [
    'ol' => 'ol-class',
    'li' => 'li-class',
    'a' => 'a-class',
    'bar' => 'bar-class',
];
my_custom_breadcrumb($classList);
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1