メニュー

WEBMEMOする。とあるクリエイターの個人的な備忘録。

みなさん、パンくずはどうしていますか?

WordPressではプラグインでささっと自動生成できてしまいますが、わざわざプラグインを使わなくてもfunction.phpにコードをコピペするだけで自動生成できます。

カスタム投稿を使用する場合プラグインを使用していてもどうせコードいじることになりますし、自分でコードを記述しておく方がカスタマイズも自由にできるので便利かなと思います。

ということで今回は、パンくずを自動生成するコードを自分でfunction.phpにコピペする時用のメモ。

スキーマなしの通常タイプスキーマありのタイプの二種類をメモしておきます。

目次

    基本のコード(スキーマなし)

    下のコードをコピペしてください。 カスタム投稿の部分は使用状況などによって変更してください。

    ぐちゃぐちゃしているように見えますが、ひとつひとつ中身を見ていけば何も難しいことはしていません。使用していないページに関する記述は削除するなりコメントアウトするなりしてスッキリさせてください。

    <?php
    
    // パンくずリスト
    function breadcrumb(){
      global $post;
      $str = '';
      $pNum = 2;
      $str.= '<div id="breadcrumb">';
      $str.= '<ul>';
      $str.= '<li ><a href="'.home_url('/').'" class="home"><span>HOME</span></a></li>';
    
      /* 通常の投稿ページ  */
      if(is_singular('post')){
        $categories = get_the_category($post->ID);
        $cat = $categories[0];
    
        if($cat->parent != 0){
          $ancestors = array_reverse(get_ancestors($cat->cat_ID, 'category'));
          foreach($ancestors as $ancestor){
            $str.= '<li><a href="'. get_category_link($ancestor).'"><span>'.get_cat_name($ancestor).'</span></a></li>';
          }
        }
        $str.= '<li><a href="'. get_category_link($cat-> term_id). '"><span>'.$cat->cat_name.'</span></a></li>';
        $str.= '<li><span>'.$post->post_title.'</span></li>';
      }
    
      /* カスタムポスト */
      elseif(is_single() && !is_singular('post')){
        $cp_name = get_post_type_object(get_post_type())->label;
        $cp_url = home_url('/').get_post_type_object(get_post_type())->name;
      
        $str.= '<li><a href="'.$cp_url.'"><span>'.$cp_name.'</span></a></li>';
        $str.= '<li><span>'.$post->post_title.'</span></li>';
      }
    
      /* 固定ページ */
      elseif(is_page()){
        $pNum = 2;
        if($post->post_parent != 0 ){
          $ancestors = array_reverse(get_post_ancestors($post->ID));
          foreach($ancestors as $ancestor){
            $str.= '<li><a href="'. get_permalink($ancestor).'"><span>'.get_the_title($ancestor).'</span></a></li>';
          }
        }
        $str.= '<li><span>'. $post->post_title.'</span></li>';
      }
    
      /* カテゴリページ */
      elseif(is_category()) {
        $cat = get_queried_object();
        $pNum = 2;
        if($cat->parent != 0){
          $ancestors = array_reverse(get_ancestors($cat->cat_ID, 'category'));
          foreach($ancestors as $ancestor){
            $str.= '<li><a href="'. get_category_link($ancestor) .'"><span>'.get_cat_name($ancestor).'</span></a></li>';
          }
        }
        $str.= '<li><span>'.$cat->name.'</span></li>';
      }
    
      /* タグページ */
      elseif(is_tag()){
        $str.= '<li><span>'. single_tag_title('', false). '</span></li>';
      }
    
      /* 時系列アーカイブページ */
      elseif(is_date()){
        if(get_query_var('day') != 0){
          $str.= '<li><a href="'. get_year_link(get_query_var('year')).'"><span>'.get_query_var('year').'年</span></a></li>';
          $str.= '<li><a  href="'.get_month_link(get_query_var('year'), get_query_var('monthnum')).'"><span>'.get_query_var('monthnum').'月</span></a></li>';
          $str.= '<li><span>'.get_query_var('day'). '</span>日</li>';
        } elseif(get_query_var('monthnum') != 0){
          $str.= '<li><a href="'. get_year_link(get_query_var('year')).'"><span>'.get_query_var('year').'年</span></a></li>';
          $str.= '<li><span>'.get_query_var('monthnum'). '</span>月</li>';
        } else {
          $str.= '<li><span>'.get_query_var('year').'年</span></li>';
        }
      }
    
      /* 投稿者ページ */
      elseif(is_author()){
        $str.= '<li><span>投稿者 : '.get_the_author_meta('display_name', get_query_var('author')).'</span></li>';
      }
    
      /* 添付ファイルページ */
      elseif(is_attachment()){
        $pNum = 2;
        if($post -> post_parent != 0 ){
          $str.= '<li><a href="'.get_permalink($post-> post_parent).'"><span>'.get_the_title($post->post_parent).'</span></a></li>';
        }
        $str.= '<li><span>'.$post->post_title.'</span></li>';
      }
    
      /* 検索結果ページ */
      elseif(is_search()){
        $str.= '<li><span>「'.get_search_query().'」で検索した結果</span></li>';
      }
    
      /* 404 Not Found ページ */
      elseif(is_404()){
        $str.= '<li><span>お探しの記事は見つかりませんでした。</span></li>';
      }
    
      /* その他のページ */
      else{
        $str.= '<li><span>'.wp_title('', false).'</span></li>';
      }
      $str.= '</ul>';
      $str.= '</div>';
    
      echo $str;
    }
    

    あとは、ぱんくずを表示したい場所に以下を記述するだけ。

    <?php breadcrumb(); ?>
    

    スキーマでmicrodataをマークアップしたパンくずの自動生成コード

    先ほどのソースに、スキーマでのマークアップを付け加えたものです。

    <?php
    function breadcrumb(){
      global $post;
      $str ='';
      $pNum = 2;
    
      $str.= '<div id="breadcrumb">';
      $str.= '<ul itemprop="Breadcrumb" itemscope itemtype="http://data-vocabulary.org/BreadcrumbList">';
      $str.= '<li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a itemprop="item" href="'.home_url('/').'" class="home"><span itemprop="name">HOME</span></a><meta itemprop="position" content="1"></li>';
    
      /* 通常の投稿ページ */
      if(is_singular('post')){
        $categories = get_the_category($post->ID);
        $cat = $categories[0];
    
        if($cat->parent != 0){
          $ancestors = array_reverse(get_ancestors($cat->cat_ID, 'category'));
          foreach($ancestors as $ancestor){
            $str.= '<li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a itemprop="item" href="'. get_category_link($ancestor).'"><span itemprop="name">'.get_cat_name($ancestor).'</span></a><meta itemprop="position" content="'.$pNum.'"></li>';
            $pNum++;
          }
        }
        $str.='<li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a itemprop="item" href="'. get_category_link($cat-> term_id). '"><span itemprop="name">'. $cat-> cat_name . '</span></a><meta itemprop="position" content="'.$pNum.'"></li>';
        $pNum++;
        $str.= '<li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><span itemprop="name">'.$post->post_title.'</span><meta itemprop="position" content="'.$pNum.'"></li>';
      } 
    
      /* カスタムポスト */
      elseif(is_single() && !is_singular('post')){
        $cp_name = get_post_type_object(get_post_type())->label;
        $cp_url = home_url('/').get_post_type_object(get_post_type())->name;
        $str.= '<li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a itemprop="item" href="'.$cp_url.'"><span itemprop="name">'.$cp_name.'</span></a><meta itemprop="position" content="2"></li>';
        $str.= '<li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><span itemprop="name">'.$post->post_title.'</span><meta itemprop="position" content="3"></li>'; 
      }
    
      /* 固定ページ */
      elseif(is_page()){
        $pNum = 2;
        if($post->post_parent != 0){
          $ancestors = array_reverse(get_post_ancestors($post->ID));
          foreach($ancestors as $ancestor){
            $str.='<li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a itemprop="item" href="'. get_permalink($ancestor).'"><span itemprop="name">'.get_the_title($ancestor).'</span></a><meta itemprop="position" content="'.$pNum.'"></li>';
            $pNum++;
          }
        }
        $str.= '<li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><span itemprop="name">'. $post->post_title.'</span><meta itemprop="position" content="'.$pNum.'"></li>';
      }
    
      /* カテゴリページ */ 
      elseif(is_category()) {
        $cat = get_queried_object();
        $pNum = 2;
        if($cat->parent != 0){
          $ancestors = array_reverse(get_ancestors($cat->cat_ID, 'category'));
          foreach($ancestors as $ancestor){
            $str.= '<li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a itemprop="item" href="'. get_category_link($ancestor) .'"><span itemprop="name">'.get_cat_name($ancestor).'</span></a><meta itemprop="position" content="'.$pNum.'"></li>';
          }
        }
        $str.= '<li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><span itemprop="name">'.$cat->name.'</span><meta itemprop="position" content="'.$pNum.'"></li>';
      }
    
      /* タグページ */
      elseif(is_tag()){
        $str.= '<li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><span itemprop="name">'. single_tag_title( '' , false ). '</span><meta itemprop="position" content="2"></li>';
      } 
    
      /* 時系列アーカイブページ */
      elseif(is_date()){
    
        if(get_query_var('day') != 0){
          $str.= '<li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a itemprop="item" href="'. get_year_link(get_query_var('year')).'"><span itemprop="name">'.get_query_var('year').'年</span></a><meta itemprop="position" content="2"></li>';
          $str.= '<li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a itemprop="item" href="'. get_month_link(get_query_var('year'), get_query_var('monthnum')).'"><span itemprop="name">'.get_query_var('monthnum').'月</span></a><meta itemprop="position" content="3"></li>';
          $str.= '<li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><span itemprop="name">'.get_query_var('day'). '</span>日<meta itemprop="position" content="4"></li>';
        } elseif(get_query_var('monthnum') != 0){
          $str.= '<li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a itemprop="item" href="'. get_year_link(get_query_var('year')).'"><span itemprop="name">'.get_query_var('year').'年</span.</a><meta itemprop="position" content="2"></li>';
          $str.= '<li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><span itemprop="name">'.get_query_var('monthnum'). '</span>月<meta itemprop="position" content="3"></li>';
        } else {
          $str.= '<li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><span itemprop="name">'.get_query_var('year').'年</span><meta itemprop="position" content="2"></li>';
        }
      }
    
      /* 投稿者ページ */
      elseif(is_author()){
        $str .= '<li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><span itemprop="name">投稿者 : '. get_the_author_meta('display_name', get_query_var('author')).'</span><meta itemprop="position" content="2"></li>';
      } 
    
      /* 添付ファイルページ */
      elseif(is_attachment()){
        $pNum = 2;
        if($post -> post_parent != 0 ){
          $str.= '<li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a itemprop="item" href="'.get_permalink($post-> post_parent).'"><span itemprop="name">'.get_the_title($post->post_parent).'</span></a><meta itemprop="position" content="'.$pNum.'"></li>';
          $pNum++;
        }
        $str.= '<li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><span itemprop="name">'.$post->post_title.'</span><meta itemprop="position" content="'.$pNum.'"></li>';
      }
    
      /* 検索結果ページ */
      elseif(is_search()){
        $str.= '<li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><span itemprop="name">「'.get_search_query().'」で検索した結果</span><meta itemprop="position" content="2"></li>';
      } 
    
      /* 404 Not Found ページ */
      elseif(is_404()){
        $str.= '<li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><span itemprop="name">お探しの記事は見つかりませんでした。</span><meta itemprop="position" content="2"></li>';
      } 
    
      /* その他のページ */
      else{
        $str.= '<li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><span itemprop="name">'.wp_title('', false).'</span><meta itemprop="position" content="2"></li>';
      }
      
      $str.= '</ul>';
      $str.= '</div>';
      echo $str;
    }

    スキーマ(schema.org)を使用したmicrodataマークアップについては以前メモしていますのでこちらを参考にしてください。

    - Thank you for reading this to the end. -

    コメントする

    CAPTCHA


    TOPへ Top