2014年08月04日 web関連WordPressphpSEO対策

WordPressのパンくずリストをリッチスニペット(microdata)に対応させてみました。
リッチスニペットについては下記を参考にしてください。
リッチ スニペット – パンくずリスト(Google)

対応後のコードはGistにあります。という割に、Gistの使い方がよくわかっていません・・。 少しずつ勉強していきます。(^_^;)

microdata対応のWordpress用パンくずリスト(Gist)
<?php
function breadcrumb($divOption = array("id" => "breadcrumb", "class" => "clearfix")){
	global $post;
	$str ='';
	if(!is_home()&&!is_admin()){ /* !is_admin は管理ページ以外という条件分岐 */
		$tagAttribute = '';
		foreach($divOption as $attrName => $attrValue){
			$tagAttribute .= sprintf(' %s="%s"', $attrName, $attrValue);
		}
		$str.= '<div'. $tagAttribute .'>';
		$str.= '<ul>';
		$str.= '<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb"><a href="'. home_url() .'/" itemprop="url"><span itemprop="title">ホーム</span></a></li>';
		$str.= '<li>&gt;</li>';

		if(is_category()) {								//カテゴリーのアーカイブページ
			$cat = get_queried_object();
			if($cat -> parent != 0){
				$ancestors = array_reverse(get_ancestors( $cat -> cat_ID, 'category' ));
				foreach($ancestors as $ancestor){
					$str.='<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb"><a href="'. get_category_link($ancestor) .'" itemprop="url"><span itemprop="title">'. get_cat_name($ancestor) .'</span></a></li>';
					$str.='<li>&gt;</li>';
				}
			}
			$str.='<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb"><a href="'. get_category_link($cat -> cat_ID) .'" itemprop="url"><span itemprop="title">'. $cat -> name . '</span></a></li>';
		} elseif(is_single()){							//ブログの個別記事ページ
			$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 itemscope itemtype="http://data-vocabulary.org/Breadcrumb"><a href="'. get_category_link($ancestor).'" itemprop="url"><span itemprop="title">'. get_cat_name($ancestor). '</span></a></li>';
					$str.='<li>&gt;</li>';
				}
			}
			$str.='<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb"><a href="'. get_category_link($cat -> term_id). '" itemprop="url"><span itemprop="title">'. $cat-> cat_name . '</span></a></li>';
			$str.='<li>&gt;</li>';
			$str.= '<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb"><a href="'.get_permalink($post->ID).'" itemprop="url"><span itemprop="title">'. $post -> post_title .'</span></a></li>';
		} elseif(is_page()){							//固定ページ
			if($post -> post_parent != 0 ){
				$ancestors = array_reverse(get_post_ancestors( $post->ID ));
				foreach($ancestors as $ancestor){
					$str.='<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb"><a href="'. get_permalink($ancestor).'" itemprop="url"><span itemprop="title">'. get_the_title($ancestor) .'</span></a></li>';
					$str.='<li>&gt;</li>';
				}
			}
			$str.= '<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb"><a href="'.get_permalink($post->ID).'" itemprop="url"><span itemprop="title">'. $post -> post_title .'</span></a></li>';
		} elseif(is_date()){							//日付ベースのアーカイブページ
			if(get_query_var('day') != 0){				//年別アーカイブ
				$str.='<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb"><a href="'. get_year_link(get_query_var('year')). '" itemprop="url"><span itemprop="title">' . get_query_var('year'). '年</span></a></li>';
				$str.='<li>&gt;</li>';
				$str.='<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb"><a href="'. get_month_link(get_query_var('year'), get_query_var('monthnum')). '" itemprop="url"><span itemprop="title">'. get_query_var('monthnum') .'月</span></a></li>';
				$str.='<li>&gt;</li>';
				$str.='<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb"><a href="'. get_day_link(get_query_var('year'), get_query_var('monthnum'), get_query_var('day')) .'" itemprop="url"><span itemprop="title">'. get_query_var('day'). '日</span></a></li>';
			} elseif(get_query_var('monthnum') != 0){	//月別アーカイブ
				$str.='<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb"><a href="'. get_year_link(get_query_var('year')) .'" itemprop="url"><span itemprop="title">'. get_query_var('year') .'年</span></a></li>';
				$str.='<li>&gt;</li>';
				$str.='<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb"><a href="'. get_month_link(get_query_var('year'), get_query_var('monthnum')) .'" itemprop="url"><span itemprop="title">'. get_query_var('monthnum'). '月</span></a></li>';
			} else {									//年別アーカイブ
				$str.='<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb"><a href="'. get_year_link(get_query_var('year')) .'" itemprop="url"><span itemprop="title">'. get_query_var('year') .'年</span></a></li>';
			}
		} elseif(is_search()) {							//検索結果表示ページ
			$str.='<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb"><a href="'.get_bloginfo('url').'/?'.$_SERVER['QUERY_STRING'].'" itemprop="url"><span itemprop="title">「'. get_search_query() .'」の検索結果</span></a></li>';
		} elseif(is_author()){							//投稿者のアーカイブページ
			$str .='<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb"><a href="'.get_author_posts_url(get_query_var('author')).'" itemprop="url"><span itemprop="title">投稿者 : '. get_the_author_meta('display_name', get_query_var('author')).'</span></a></li>';
		} elseif(is_tag()){								//タグのアーカイブページ
			$str.='<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb"><a href="'.get_tag_link(get_query_var('tag_id')).'" itemprop="url"><span itemprop="title">タグ : '. single_tag_title( '' , false ). '</span></a></li>';
		} elseif(is_attachment()){						//添付ファイルページ
			$str.= '<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb"><span itemprop="title">'. $post -> post_title .'</span></li>';
		} elseif(is_404()){								//404 Not Found ページ
			$str.='<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb"><span itemprop="title">404 Not found</span></li>';
		} else{											//その他
			$str.='<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb"><span itemprop="title">'. wp_title('', true) .'</span></li>';
		}
		$str.='</ul>';
		$str.='</div>';
	}
	echo $str;
}
?>
コード参考元 : http://webdesignrecipes.com/wordpress-breadcrumb-list-tips/
コード参考元 : https://gist.github.com/wate/50a4186223f187128549

2014/08/12追記

上記のコードだとパーマリンクの設定をデフォルトで運用していると
ホーム>0年
のように表示されてしまいます。

0年と表示される問題を修正したバージョンは以下です。 修正版(Gist)
<?php


//パンくず
function breadcrumb($divOption = array("id" => "bread", "class" => "clear")){
	global $post;
	$str ='';
	if(!is_home()&&!is_admin()){ /* !is_admin は管理ページ以外という条件分岐 */
		$tagAttribute = '';
		foreach($divOption as $attrName => $attrValue){
			$tagAttribute .= sprintf(' %s="%s"', $attrName, $attrValue);
		}
		$str.= '<div'. $tagAttribute .'>';
		$str.= '<ul>';
		$str.= '<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb"><a href="'. home_url() .'/" itemprop="url"><span itemprop="title">ホーム</span></a></li>';
		$str.= '<li>&gt;</li>';

		if(is_category()) {								//カテゴリーのアーカイブページ
			$cat = get_queried_object();
			if($cat -> parent != 0){
				$ancestors = array_reverse(get_ancestors( $cat -> cat_ID, 'category' ));
				foreach($ancestors as $ancestor){
					$str.='<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb"><a href="'. get_category_link($ancestor) .'" itemprop="url"><span itemprop="title">'. get_cat_name($ancestor) .'</span></a></li>';
					$str.='<li>&gt;</li>';
				}
			}
			$str.='<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb"><a href="'. get_category_link($cat -> cat_ID) .'" itemprop="url"><span itemprop="title">'. $cat -> name . '</span></a></li>';
		} elseif(is_single()){							//ブログの個別記事ページ
			$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 itemscope itemtype="http://data-vocabulary.org/Breadcrumb"><a href="'. get_category_link($ancestor).'" itemprop="url"><span itemprop="title">'. get_cat_name($ancestor). '</span></a></li>';
					$str.='<li>&gt;</li>';
				}
			}
			$str.='<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb"><a href="'. get_category_link($cat -> term_id). '" itemprop="url"><span itemprop="title">'. $cat-> cat_name . '</span></a></li>';
			$str.='<li>&gt;</li>';
			$str.= '<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb"><a href="'.get_permalink($post->ID).'" itemprop="url"><span itemprop="title">'. $post -> post_title .'</span></a></li>';
		} elseif(is_page()){							//固定ページ
			if($post -> post_parent != 0 ){
				$ancestors = array_reverse(get_post_ancestors( $post->ID ));
				foreach($ancestors as $ancestor){
					$str.='<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb"><a href="'. get_permalink($ancestor).'" itemprop="url"><span itemprop="title">'. get_the_title($ancestor) .'</span></a></li>';
					$str.='<li>&gt;</li>';
				}
			}
			$str.= '<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb"><a href="'.get_permalink($post->ID).'" itemprop="url"><span itemprop="title">'. $post -> post_title .'</span></a></li>';
		} elseif(is_date()){							//日付ベースのアーカイブページ
			if(is_day()){				//日別アーカイブ
				$str.='<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb"><a href="'. get_year_link(get_the_time('Y')). '" itemprop="url"><span itemprop="title">' . get_the_time('Y'). '年</span></a></li>';
				$str.='<li>&gt;</li>';
				$str.='<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb"><a href="'. get_month_link(get_the_time('Y'), get_the_time('m')). '" itemprop="url"><span itemprop="title">'. get_the_time('m') .'月</span></a></li>';
				$str.='<li>&gt;</li>';
				$str.='<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb"><a href="'. get_day_link(get_the_time('Y'), get_the_time('m'), get_the_time('d')) .'" itemprop="url"><span itemprop="title">'. get_the_time('d'). '日</span></a></li>';
			} elseif(is_month()){	//月別アーカイブ
				$str.='<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb"><a href="'. get_year_link(get_the_time('Y')) .'" itemprop="url"><span itemprop="title">'. get_the_time('Y') .'年</span></a></li>';
				$str.='<li>&gt;</li>';
				$str.='<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb"><a href="'. get_month_link(get_the_time('Y'), get_the_time('m')) .'" itemprop="url"><span itemprop="title">'. get_the_time('m'). '月</span></a></li>';
			} else {									//年別アーカイブ
				$str.='<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb"><a href="'. get_year_link(get_the_time('Y')) .'" itemprop="url"><span itemprop="title">'. get_the_time('Y') .'年</span></a></li>';
			}
		} elseif(is_search()) {							//検索結果表示ページ
			$str.='<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb"><a href="'.get_bloginfo('url').'/?'.$_SERVER['QUERY_STRING'].'" itemprop="url"><span itemprop="title">「'. get_search_query() .'」の検索結果</span></a></li>';
		} elseif(is_author()){							//投稿者のアーカイブページ
			$str .='<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb"><a href="'.get_author_posts_url(get_query_var('author')).'" itemprop="url"><span itemprop="title">投稿者 : '. get_the_author_meta('display_name', get_query_var('author')).'</span></a></li>';
		} elseif(is_tag()){								//タグのアーカイブページ
			$str.='<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb"><a href="'.get_tag_link(get_query_var('tag_id')).'" itemprop="url"><span itemprop="title">タグ : '. single_tag_title( '' , false ). '</span></a></li>';
		} elseif(is_attachment()){						//添付ファイルページ
			$str.= '<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb"><span itemprop="title">'. $post -> post_title .'</span></li>';
		} elseif(is_404()){								//404 Not Found ページ
			$str.='<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb"><span itemprop="title">404 Not found</span></li>';
		} else{											//その他
			$str.='<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb"><span itemprop="title">'. wp_title('', true) .'</span></li>';
		}
		$str.='</ul>';
		$str.='</div>';
	}
	echo $str;
}


?>

この投稿へのコメント

コメントはまだありません。

ピックアップ記事

WordPressの抜粋表示の設定

2014年08月25日 web関連WordPressphp
WordPressの抜粋表示(excerpt)を以下のように動作させたかったので、自作してみました。 抜粋があれば抜粋表示 moreタグがあれば、それに従う 指定文字数より本文文字数が少なければ、そのまま表示 指定文字数より本文文字数が多ければ抜粋表示 コード functions.phpにコピペ。 [php]<?php //WordPress抜粋表…
「WordPressの抜粋表示の設定」をはてなブックマークに追加

WordPress IE8だけ動かないプラグインの解決方法

2011年06月15日 WordPress
あるサイトで、Meteor Slides というプラグインを使っていますが、IE8だけ画像は表示されますが、スライドされず、画像が切り替わりません。 どうしたもんかと調べていると、簡単な解決策が見つかりました。 動作確認済です。…
「WordPress IE8だけ動かないプラグインの解決方法」をはてなブックマークに追加

WordPressのREST APIを使って最新記事を取得・表示させる

2017年06月14日 WordPressphp
1.WP REST APIプラグインをインストール 管理画面から「WordPress REST API」プラグインをインストールし、有効化します。 これで http://◯◯◯.com/wp-json/wp/v2/posts にアクセスすれば、記事の情報がjson形式で表示されます。 WordPress REST API jsonを取得・表示させる [php]&l…
「WordPressのREST APIを使って最新記事を取得・表示させる」をはてなブックマークに追加

php mb_convert_kanaがうまく動かないとき

2011年07月07日 php
mb_convert_kanaは半角カタカナを全角カタカナに直したり、半角スペースを全角に直したりするときに重宝する関数ですが、環境(サーバ設定かな)によっては、期待通りに動かない場合があるようです。 …
「php mb_convert_kanaがうまく動かないとき」をはてなブックマークに追加

WordPress archive.phpで記事数を設定する

2011年06月24日 WordPressphp
WordPress をカスタマイズしていると、トップページでは○件、アーカイブは○件など、表示する記事件数を変えたい事があよくあります。そういう場合の対処法です。 今回は、テーマ内のarchive.phpを修正する事で対応します。 …
「WordPress archive.phpで記事数を設定する」をはてなブックマークに追加
© graffiti on the web . All rights reserved. WordPress Theme by comfy