WordPress 構造化マークアップ済パンくずリストを作成【SEO対策】コピペOK - inokawablog

WordPress 構造化マークアップ済パンくずリストを作成【SEO対策】コピペOK

まずはコードを表示して後から説明をしていきます。

 

if ( ! function_exists( 'custom_breadcrumb' ) ) {
    function custom_breadcrumb( $wp_obj = null ) {
        if ( is_home() || is_front_page() ) return false;
        $wp_obj = $wp_obj ?: get_queried_object();
        echo '<ul id="breadcrumb">'.
                    '<li>'.
                    	'<span class="" itemscope itemtype="http://data-vocabulary.org/Breadcrumb">'.
                        '<a href="'. home_url() .'" itemprop="url"><span itemprop="title">ホーム</span></a>'.
                    	'</span>'.
                    '</li>';
        if ( is_attachment() ) {
            echo '<li><span itemprop="title">'. $wp_obj->post_title .'</span></li>';
        } elseif ( is_single() ) {
            $post_id    = $wp_obj->ID;
            $post_type  = $wp_obj->post_type;
            $post_title = $wp_obj->post_title;
            if ( $post_type !== 'post' ) {
                $the_tax = ""; 
                $tax_array = get_object_taxonomies( $post_type, 'names');
                foreach ($tax_array as $tax_name) {
                    if ( $tax_name !== 'post_format' ) {
                        $the_tax = $tax_name;
                        break;
                    }
                }
                echo '<li>'.
	                	'<span class="breadcrumbs" itemscope itemtype="http://data-vocabulary.org/Breadcrumb">'.
	                        '<a href="'. get_post_type_archive_link( $post_type ) .'" itemprop="url">'.
	                            '<span itemprop="title">'. get_post_type_object( $post_type )->label .'</span>'.
	                        '</a>'.
                     		'</span>'.
                     '</li>';
            } else {
                $the_tax = 'category';
            }
            if ( $the_tax !== "" ) {
                $child_terms = array();
                $parents_list = array();
                $terms = get_the_terms( $post_id, $the_tax );
                if ( !empty( $terms ) ) {
                    foreach ( $terms as $term ) {
                        if ( $term->parent !== 0 ) $parents_list[] = $term->parent;
                    }
                    foreach ( $terms as $term ) {
                        if ( ! in_array( $term->term_id, $parents_list ) ) $child_terms[] = $term;
                    }
                    $term = $child_terms[0];
                    if ( $term->parent !== 0 ) {
                        $parent_array = array_reverse( get_ancestors( $term->term_id, $the_tax ) );
                        foreach ( $parent_array as $parent_id ) {
                            $parent_term = get_term( $parent_id, $the_tax );
                            echo '<li>'.
                                    '<a href="'. get_term_link( $parent_id, $the_tax ) .'" itemprop="url">'.
                                      '<span itemprop="title">'. $parent_term->name .'</span>'.
                                    '</a>'.
                                 '</li>';
                        }
                    }
                    echo '<li>'.
                            '<a href="'. get_term_link( $term->term_id, $the_tax ). '" itemprop="url">'.
                              '<span itemprop="title">'. $term->name .'</span>'.
                            '</a>'.
                         '</li>';
                }
            }
            echo '<li><span itemprop="title">'. $post_title .'</span></li>';
        } elseif ( is_page() ) {
            $page_id    = $wp_obj->ID;
            $page_title = $wp_obj->post_title;
            if ( $wp_obj->post_parent !== 0 ) {
                $parent_array = array_reverse( get_post_ancestors( $page_id ) );
                foreach( $parent_array as $parent_id ) {
                    echo '<li>'.
                            '<a href="'. get_permalink( $parent_id ).'" itemprop="url">'.
                                '<span itemprop="title">'.get_the_title( $parent_id ).'</span>'.
                            '</a>'.
                         '</li>';
                }
            }
            echo '<li><span itemprop="title">'. $page_title .'</span></li>';
        } elseif ( is_post_type_archive() ) {
            echo '<li><span itemprop="title">'. $wp_obj->label .'</span></li>';
        } elseif ( is_date() ) {
            $year  = get_query_var('year');
            $month = get_query_var('monthnum');
            $day   = get_query_var('day');
            if ( $day !== 0 ) {
                //日別archive
                echo '<li><a href="'. get_year_link( $year ).'"><span>'. $year .'年</span></a></li>'.
                     '<li><a href="'. get_month_link( $year, $month ). '"><span>'. $month .'月</span></a></li>'.
                     '<li><span>'. $day .'日</span></li>';
            } elseif ( $month !== 0 ) {
                //月別archive
                echo '<li><a href="'. get_year_link( $year ).'"><span>'.$year.'年</span></a></li>'.
                     '<li><span>'.$month . '月</span></li>';
            } else {
                //年別archive
                echo '<li><span>'.$year.'年</span></li>';
            }
        } elseif ( is_author() ) {
            echo '<li><span>'. $wp_obj->display_name .' の執筆記事</span></li>';
        } elseif ( is_archive() ) {
            $term_id   = $wp_obj->term_id;
            $term_name = $wp_obj->name;
            $tax_name  = $wp_obj->taxonomy;
            if ( $wp_obj->parent !== 0 ) {
                $parent_array = array_reverse( get_ancestors( $term_id, $tax_name ) );
                foreach( $parent_array as $parent_id ) {
                    $parent_term = get_term( $parent_id, $tax_name );
                    echo '<li>'.
                            '<a href="'. get_term_link( $parent_id, $tax_name ) .'" itemprop="url">'.
                                '<span itemprop="title">'. $parent_term->name .'</span>'.
                            '</a>'.
                         '</li>';
                }
            }
            echo '<li>'.
                    '<span itemprop="title">'. $term_name .'</span>'.
                '</li>';
        } elseif ( is_search() ) {
            echo '<li><span itemprop="title">「'. get_search_query() .'」で検索した結果</span></li>';
        } elseif ( is_404() ) {
            echo '<li><span>お探しの記事は見つかりませんでした。</span></li>';
        } else {
            echo '<li><span itemprop="title">'. get_the_title() .'</span></li>';
        }
        echo '</ul>';
    }
}

 

はい終わりです。

表示させたいところに、

<?php custom_breadcrumb(); ?>

でOKです。

コードを順に追っていけばわかると思います。

 

こちらはmicrodataという方式でマークアップしているのですが、

JSON-LDでやっているパターンの記事もありました。お好きな方でやってみてください。

 

個人的にはパンくずリストはmicrodataの方がコードがまとまって綺麗な気がします。人それぞれですが。

 

他にもブログ記事の構造化のマークアップの記事を載せておきます。

WordPressのSchema.orgの設定。ブログ用構造化データを埋め込む。サンプル付

 

SEOに効果あり!WordPressの構造化マークアップ(Schema.org)まとめ サンプル付き