WordPressを用いたホームページ制作はお任せください!岡山県を中心に絶賛活動中!
  • プラグインは使わない!WordPressサイトに高品質なパンくずナビをコピペで設置する方法

プラグインは使わない!WordPressサイトに高品質なパンくずナビをコピペで設置する方法

background-2561_1280

プラグインを使わずにWordPressサイトに高品質なパンくずナビをコピペで設置する方法をご紹介します。設置はコピペだけで実装可能です。興味のある方は3分間だけコンテンツを確認してみてください。

この記事は約 30 分で読めます。

当サイトのパンくずナビのコードをご紹介します。

このサイトで実際に導入しているパンくずナビのコードをご紹介します。
functions.phpにコピペするだけでパンくずナビを設置できます。

functions.phpに以下のコードをコピペしてください。

/* パンくずナビ */
function get_breadcrumb_list($include_category = 1, $include_tag = 1, $include_taxonomy = 1)
{
// ベースパンくず(サイト名など)
$base_breadcrumb = '<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb"><a href="'.get_home_url().'" itemprop="url"><span itemprop="title">HOME</span></a></li>';
$top_url = get_home_url(null,'/');

// ループ外対応
global $query_string;
global $post;
query_posts($query_string);
if (have_posts()) : while(have_posts()) : the_post();
endwhile; endif;
// クエリリセットする
wp_reset_query();

// ページ数を取得(ページ数(0の場合は1ページ目なので1に変更する))
if(get_query_var('paged') == 0): $page = 1; else: $page = get_query_var('paged') ; endif;

// 投稿・固定ページかつアタッチメントページ以外の場合
if(is_singular() && !is_attachment())
{
// 記事についているカテゴリを全て取得する
$categories = get_the_category();
// カテゴリがある場合に実行する
if(!empty($categories))
{
$category_count = count($categories);
$loop = 1;
$category_list = '';
foreach($categories as $category)
{
// 値が1だったら、URLにカテゴリーのタクソノミーを含めて変数に格納する。
if($include_category === 1)
{
$category_list .= '<a href="'.$top_url.esc_html($category->taxonomy).'/'.esc_html($category->slug).'/" itemprop="url"><span itemprop="title">'.esc_html($category->name).'</span></a>';
}
// 値が指定されていないか1以外だったら、URLにカテゴリーのタクソノミーを含めないで変数に格納する。
else
{
$category_list .= '<a href="'.$top_url.esc_html($category->slug).'/" itemprop="url"><span itemprop="title">'.esc_html($category->name).'</span></a>';
}
// ループの最後でない場合のみスラッシュ追加(複数カテゴリ対応)
if($loop != $category_count)
{
$category_list .= '?/?';
}
++$loop;
}
}
// カテゴリがない場合はNULLを格納する
else
{
$category_list = null;
}

// 記事についているタグを全て取得する
$tags = get_the_tags();
// タグがあれば実行する
if(!empty($tags))
{
$tags_count = count($tags);
$loop=1;
$tag_list = '';
foreach($tags as $tag)
{
// 値が1だったら、URLにタグのタクソノミーを含めて変数に格納する。
if($include_tag === 1)
{
$tag_list .= '<a href="'.$top_url.esc_html($tag->taxonomy).'/'.esc_html($tag->slug).'/" itemprop="url"><span itemprop="title">'.esc_html($tag->name).'</span></a>';
}
// 値が指定されていないか1以外だったら、URLにタグのタクソノミーを含めないで変数に格納する。
else
{
$tag_list .= '<a href="'.$top_url.esc_html($tag->slug).'/" itemprop="url"><span itemprop="title">'.esc_html($tag->name).'</span></a>';
}
// ループの最後でない場合のみスラッシュ追加(複数タグ対応)
if($loop !== $tags_count)
{
$tag_list .= '?/?';
}
++$loop;
}
}
// タグがない場合はNULLを格納する
else
{
$tag_list = null;
}

// タクソノミーを全て取得する
$taxonomies = get_the_taxonomies();
// タクソノミーがある場合に実行する
if(!empty($taxonomies))
{
$term_list = '';
$taxonomies_count = count($taxonomies);
$taxonomies_loop = 1;
foreach(array_keys($taxonomies) as $key)
{
// タームを取得
$terms = get_the_terms($post->ID, $key);
$terms_count = count($terms);
$loop = 1;
foreach($terms as $term)
{
// 値が1だったら、URLにタクソノミーを含めて変数に格納する。
if($include_taxonomy === 1)
{
$term_list .= '<a href="'.$top_url.esc_html($term->taxonomy).'/'.esc_html($term->slug).'/" itemprop="url"><span itemprop="title">'.esc_html($term->name).'</span></a>';
}
// 値が指定されていないか1以外だったらURLにタクソノミーを含めないで変数に格納する。
else
{
$term_list .= '<a href="'.$top_url.esc_html($term->slug).'/" itemprop="url"><span itemprop="title">'.esc_html($term->name).'</span></a>';
}
// ループの最後でない場合のみスラッシュ追加(複数ターム対応)
if($loop != $terms_count)
{
$term_list .= '?/?';
}
++$loop;
}
// ループの最後でない場合のみスラッシュ追加(複数タクソノミー対応)
if($taxonomies_loop != $taxonomies_count)
{
$term_list .= '?/?';
}
++$taxonomies_loop;
}
}
// タクソノミーがない場合はNULLを格納する
else
{
$term_list = null;
}
}

// 基本パンくずリストを変数に格納する。
$breadcrumb_lists = $base_breadcrumb;

// ホームの場合
if(is_home())
{
}
// カスタム投稿タイプアーカイブの場合
elseif(is_post_type_archive())
{
// ページ数が1より大きい場合(○ページ目)を追加して格納する
if($page > 1)
{
$breadcrumb_lists .= '<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb">'.esc_html(get_post_type_object( get_post_type() )->label).'の記事一覧('.$page.'ページ目)</li>';
}
// ページ数が1の場合は(○ページ目)はなしで格納する
else
{
$breadcrumb_lists .= '<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb">'.esc_html(get_post_type_object( get_post_type() )->label).'の記事一覧</li>';
}
}
// カスタム投稿タイプ以外のアーカイブの場合
elseif(is_archive())
{
// 年アーカイブの場合
if(is_year())
{
// ページ数が1より大きい場合(○ページ目)を追加して格納する
if($page > 1)
{
$breadcrumb_lists .= '<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb">'.esc_html(get_the_time("Y年")).'の記事一覧('.$page.'ページ目)</li>';
}
// ページ数が1の場合は(○ページ目)はなしで格納する
else
{
$breadcrumb_lists .= '<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb">'.esc_html(get_the_time("Y年")).'の記事一覧</li>';
}
}
// 月アーカイブの場合
elseif(is_month())
{
// ページ数が1より大きい場合(○ページ目)を追加して格納する
if($page > 1)
{
$breadcrumb_lists .= '<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb">'.esc_html(get_the_time("Y年m月")).'の記事一覧('.$page.'ページ目)</li>';
}
// ページ数が1の場合は(○ページ目)はなしで格納する
else
{
$breadcrumb_lists .= '<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb">'.esc_html(get_the_time("Y年m月")).'の記事一覧</li>';
}
}
// 日アーカイブの場合
elseif(is_day())
{
// ページ数が1より大きい場合(○ページ目)を追加して格納する
if($page > 1)
{
$breadcrumb_lists .= '<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb">'.esc_html(get_the_time("Y年m月d日")).'の記事一覧('.$page.'ページ目)</li>';
}
// ページ数が1の場合は(○ページ目)はなしで格納する
else
{
$breadcrumb_lists .= '<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb">'.esc_html(get_the_time("Y年m月d日")).'の記事一覧</li>';
}
}
// カテゴリの場合
elseif(is_category())
{
// ページ数が1より大きい場合(○ページ目)を追加して格納する
if($page > 1)
{
$breadcrumb_lists .= '<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb">'.esc_html(single_cat_title('',false)).'の記事一覧('.$page.'ページ目)</li>';
}
// ページ数が1の場合は(○ページ目)はなしで格納する
else
{
$breadcrumb_lists .= '<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb">'.esc_html(single_cat_title('',false)).'の記事一覧</li>';
}
}
// タグの場合
elseif(is_tag())
{
// ページ数が1より大きい場合(○ページ目)を追加して格納する
if($page > 1)
{
$breadcrumb_lists .= '<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb">'.esc_html(single_tag_title('',false)).'の記事一覧('.$page.'ページ目)</li>';
}
// ページ数が1の場合は(○ページ目)はなしで格納する
else
{
$breadcrumb_lists .= '<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb">'.esc_html(single_tag_title('',false)).'の記事一覧</li>';
}
}
// タクソノミー(カスタム分類)の場合
elseif(is_tax())
{
// ページ数が1より大きい場合(○ページ目)を追加して格納する
if($page > 1)
{
$breadcrumb_lists .= '<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb">'.esc_html(single_term_title('',false)).'の記事一覧('.$page.'ページ目)</li>';
}
// ページ数が1の場合は(○ページ目)はなしで格納する
else
{
$breadcrumb_lists .= '<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb">'.esc_html(single_term_title('',false)).'の記事一覧</li>';
}
}
}
// 投稿ページ
elseif(is_single())
{
// ページ数を取得(ページ数(0の場合は1ページ目なので1に変更する))
if(get_query_var('page') == 0): $page = 1; else: $page = get_query_var('page') ; endif;
// 通常投稿の場合
if(get_post_type() === 'post')
{
// カスタムフィールドの値を取得
$seo_title = esc_html(get_post_meta($post->ID, 'seo_title', true));

// カテゴリがある場合のみ追加
if(!empty($category_list))
{
$breadcrumb_lists .= '<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb">'.$category_list.'</li>';
}

// 2ページ目以降の場合
if($page > 1)
{
// カスタムフィールドに値があったらその値を格納する
if(!empty($seo_title))
{
$breadcrumb_lists .= '<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb">'.$seo_title.'</li>';
}
// カスタムフィールドに値がなかった場合
else
{
// ページが分割されている場合のタイトル取得
if(function_exists('get_current_split_string'))
{
$split_title = esc_html(get_current_split_string($page));
}
else
{
$split_title = null;
}

// ページが分割されている場合のタイトルがあった場合はそれを加える
if(!empty($split_title))
{
$breadcrumb_lists .= '<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb">'.esc_html(get_the_title()).'【'.$split_title.'】</li>';
}
// それ以外は(○ページ目)を加える
else
{
$breadcrumb_lists .= '<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb">'.esc_html(get_the_title()).'('.$page.'ページ目)</li>';
}
}
}
// 1ページ目の場合
else
{
// カスタムフィールドに値があったらその値を格納する
if(!empty($seo_title))
{
$breadcrumb_lists .= '<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb">'.$seo_title.'</li>';
}
// カスタムフィールドに値がなかった場合
else
{
$breadcrumb_lists .= '<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb">'.esc_html(get_the_title()).'</li>';
}
}
}
// カスタム投稿の場合
else
{
// タームがある場合のみ追加
if(!empty($term_list))
{
$breadcrumb_lists .= '<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb">'.$term_list.'</li>';
}
$breadcrumb_lists .= '<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb">'.esc_html(get_the_title()).'</li>';
}
}
// 固定ページ
elseif(is_page())
{
$breadcrumb_lists .= '<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb">'.esc_html(get_the_title()).'</li>';
}
// 検索結果
elseif(is_search())
{
// ページ数が1より大きい場合(○ページ目)を追加して格納する
if($page > 1)
{
$breadcrumb_lists .= '<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb">「'.esc_html(get_search_query()).'」で検索した結果('.$page.'ページ目)</li>';
}
// ページ数が1の場合は(○ページ目)はなしで格納する
else
{
$breadcrumb_lists .= '<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb">「'.esc_html(get_search_query()).'」で検索した結果</li>';
}
}
// 404ページの場合
elseif(is_404())
{
$breadcrumb_lists .= '<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb">お探しのページは見つかりませんでした</li>';
}
else
{
$breadcrumb_lists = $base_breadcrumb;
}
// パンくずリスト成形
if(!empty($breadcrumb_lists))
{
$breadcrumb_lists = '<ul>'.$breadcrumb_lists.'</ul>';
}
return $breadcrumb_lists;
}

上記のコードは、「WordPressでプラグインを使わずにパンくずリストを実装する」で紹介されているコードをGoogleリッチスニペットに対応させたものです。

functions.phpに上記のコードをコピペしたら、パンくずナビを表示させたい箇所に以下のコードをコピペしましょう。

<?php echo get_breadcrumb_list(); ?>

これでパンくずが表示されます。

当サイトでは装飾の関係上、以下のように記述しています。

<div id="pan_out">
<div id="pan">
<?php echo get_breadcrumb_list(); ?>
</div>
</div>

このサイトのパンくずナビのCSSもご紹介しておきましょう。
当サイトでは以下のように装飾しています。

#pan_out {
width: 100%;
background: #ffffff;
margin-bottom: 50px;
border-bottom: 1px solid #dedede;
}
#pan {
width: 1100px;
margin: 0 auto;
padding: 0 10px;
box-sizing: border-box;
}

#pan ul {
list-style-type: none;
overflow: hidden;
}
#pan ul li {
height: 50px;
line-height: 50px;
float: left;
}
#pan ul li:before {
content: ">";
margin: 0 10px;
}
#pan ul li:first-child:before {
content: none;
}

装飾はサイトデザインに合わせて変更してください。

まとめ

WordPressサイトに高品質なパンくずナビをコピペで設置する方法をご紹介しました。

もうプラグインを使う必要はありません。
コピペだけで高品質なパンくずナビを実装することができます。

プラグインを減らしたい方は試してみてください。

シェアしていただきありがとうございます。

background-2561_1280

この記事が気に入ったら【いいね】しよう!

Wordpressサイトのカスタマイズで
お困りではありませんか?

あなたのWordpressサイトを、ご希望に沿ってカスタマイズいたします。
次に該当する方は、お気軽にご相談下さい。

  • Wordpressサイトをカスタマイズしたいが、やり方が分からないで困っている。カスタマイズの知識が豊富な人に任せたい。
  • Wordpressサイトをカスタマイズしたいが、自分でカスタマイズする暇がない。カスタマイズが得意な人に丸投げしたい。
  • Wordpressサイトをカスタマイズしてみたが、上手くカスタマイズできなかった。カスタマイズ経験が豊富な人に任せたい。
  • Wordpressサイトをカスタマイズしてみたら、バグが発生して困っている。正常に動作するように正しくカスタマイズしてほしい。

一つでも該当する方は、以下のリンクからチェックしてみてください。

詳細を確認する

著者:とあるWEBディレクター

岡山在住のWebディレクターです。Wordpressを使ったWEBサイト制作を中心に7年間ほど活動させていただいています。

Wordpress関連の記事でお役に立てれば幸いです。

【関連記事】あなたが興味のありそうな関連記事をご紹介します。

  • 188H

    WordPressユーザー必見!自動的に記事を下書き投稿する方法

    WordPressサイトに1日1回記事を投稿するため、自動的に記事を下書き保存するカスタマイズを行いました。1日1回【今日も記事を書けよ!】というタイトルで記事が下書き保存されます。自動的に催促される仕組みです。コピペで実装できますので、よければ実装してください。 記事を読む

  • tool-ber

    WordPressの管理画面にログインした状態だと表示されてしまうサイト上部のツールバーを消す方法

    WordPressの管理画面にログインした状態で管理サイトにアクセスすると、サイト上部にツールバーが表示されてしまいます。今回は【WordPressの管理画面にログインした状態だと表示されてしまうサイト上部のツールバーを消す方法】をご紹介いたします。 記事を読む

  • country-871445_1280

    WordPressのオリジナルテーマにスクリーンショットを設置しよう。

    WordPressのオリジナルテーマにスクリーンショットを設置しましょう。スクリーンショットを設置しておけば、インストール済みのテーマから目的のテーマをパッと見て見つけることが出来て便利です。スクリーンショットを設置していない方、ぜひ参考にしてください。 記事を読む

  • arqwetreqwtr

    WordPressカスタムフィールドの値を文字数制限して表示する方法

    WordPressには便利な機能としてカスタムフィールドが標準装備されています。カスタムフィールドに入力した値(文字)をサイト上に表示させるとき、文字数を制限したいケースもあるかと思います。今回は、カスタムフィールドの値を文字数制限して表示する方法を解説しています。 記事を読む

  • MIMIYAKO85_sagyousurudansei20140725500

    WordPressサイトに前後記事へのリンクを表示させる方法

    WordPressで構築したサイトに前後記事へのリンクを表示させる方法をご紹介します。記事ページの下部などでよく見かける「前の記事」「次の記事」といったナビゲーションリンクです。1分で表示できますので、参考にしてください。 記事を読む

コメントを残す


(必須)

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)