2014年08月04日 phpSEO対策web関連WordPress

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;
}


?>

この投稿へのコメント

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

ピックアップ記事

IE6で透過pngを表示させる。DD_belatedPNG

2012年02月14日 jQuery・javascriptweb関連
DD_belatedPNG 先日、でも触れましたが、DD_belatedPNGというjavascriptを使って、IE6で透過pngを表示させてみました。 DD_belatedPNGの入手 以下のサイトにいって、DD_belatedPNGをダウンロードします。以下のサイト内を下へスクロールしていくと、左のサイドバーにDD_belatedPNG 0.0.8a releasedというリンクがあり…
「IE6で透過pngを表示させる。DD_belatedPNG」をはてなブックマークに追加

WordPressにtwitterのログを自動投稿するプラグイン

2011年05月29日 WordPress
タイトル通り、Twitterの一日分のツイートをWordPressへ自動投稿してくれるプラグインについてですが、tweet digestというプラグインを使っていたのですが、これを有効にすると、他のプラグイン(SyntaxHighlighterやフロントエンド・エディタなんか)が動かなくなる事が分かったので、Twitter Toolsに変更しました。 なので、Twitter Tools の使い方…
「WordPressにtwitterのログを自動投稿するプラグイン」をはてなブックマークに追加

photoshopでfavicon(icoファイル)作成

2012年01月23日 web関連
icoformatICO Formatプラグインを追加 Photoshopでは、icoファイルを扱うことができないので、以下のプラグインをインストールして、icoを作成・保存出来るようにします。 Photoshop icoformatICO (Windows Icon) Format Plugin プラグインをダウンロード、解凍したら、ICOFormat pluginというファイルを、「Ap…
「photoshopでfavicon(icoファイル)作成」をはてなブックマークに追加

WordPressで現在表示中のテンプレートファイル名を取得

2014年08月25日 phpWordPress
現在のテンプレートファイル名の拡張子を除いた名前をbodyのidに設定したかったので、テンプレートファイル名を取得する方法を調べました。 WordPressのトップページとカテゴリページでデザインを変えたい場合などに役立つかと思います。 [php]global $template; $template_file_name = basename($template, '.php');[…
「WordPressで現在表示中のテンプレートファイル名を取得」をはてなブックマークに追加
© graffiti on the web . All rights reserved. WordPress Theme by comfy