WordPressでパンくずリストを出力する
以前より作りたかったけど、制作時間の都合上、その場限りの対応で済ましていたパンくずリスト。
やっとたたき台として作成が完了した。
パターンテストは一応したものの即席で作ったもんだから、イマイチ自信はないが・・・。
一応、現在制作中のお客さんの環境下では問題はなさそうなので、掲載します。
getBreadList
/*****************************************************************/
/* func名:getBreadList() */
/* 目的:パンくずリストを生成する。(マルチブログにも対応) */
/* 引数:第1引数…ホームにパンくずを表示するか(Boolean) */
/* 第2引数…サイトトップの名称(String) */
/* 第3引数…階層文字(String) */
/* 第4引数…マルチブログで同一テンプレートを使用時に、 */
/* ルートをメインブログトップにするか(Boolean) */
/* 第5引数…メインブログのID(Number) */
/*****************************************************************/
function getBreadList($arg1 = false, $arg2 = ”, $arg3 = ”, $arg4 = false, $arg5 = 1){
global $current_blog;
$disp = $arg1;
$home = $arg2;
$dchr = $arg3;
$mult = $arg4;
$blog = $arg5;
$list = ”;
if($home == ”){
$home = ‘Home’;
}
if($dchr == ”){
$dchr = ‘<span> > </span>’;
}else{
$dchr = ‘<span> ’.$dchr.’ </span>’;
}
$tmp = ”;
if($mult){
if($blog != 1){
$tmp = get_home_url($blog);
}else{
$tmp = get_home_url(1);
}
}else{
$tmp = get_home_url();
}
$list = ‘<a href="’.$tmp.’">’.$home.'</a>’;
$tmp = ”;
if($mult){
if($blog != $current_blog->blog_id){
$tmp = $dchr.'<a href="’.get_home_url().’">’.get_bloginfo(‘name’).'</a>’;
}
}
$list = $list.$tmp;
$tmp = ”;
if(is_archive()){
if(is_category() || is_tag()){
if(is_category()){
$str = array(‘type’=>’category’, ‘value’=>’cat’);
}else{
$str = array(‘type’=>’post_tag’, ‘value’=>’tag_id’);
}
$term = get_terms($str[‘type’], ‘get=all&include=’.get_query_var($str[‘value’]));
$num = intval($term[0]->term_id);
$tmp = $dchr.'<a href="’.get_term_link($num, $str[‘type’]).’">’.$term[0]->name.'</a>’;
$num = intval($term[0]->parent);
if(is_category() && $num != 0){
while($num != 0){
$term = get_terms($str[‘type’], ‘get=all&include=’.$term[0]->parent);
$num = intval($term[0]->term_id);
$tmp = $dchr.'<a href="’.get_term_link($num, $str[‘type’]).’">’.$term[0]->name.'</a>’.$tmp;
$num = $term->parent;
}
}
}else if(is_date()){
if(is_year()){
$tmp = $dchr.'<a href="’.get_year_link(get_the_date(‘Y’)).’">’.get_the_date(‘Y年’).'</a>’;
}else if(is_month()){
$tmp = $dchr.'<a href="’.get_month_link(get_the_date(‘Y’), get_the_date(‘m’)).’">’.get_the_date(‘Y年m月’).'</a>’;
}else{
$tmp = $dchr.'<a href="’.get_day_link(get_the_date(‘Y’), get_the_date(‘m’), get_the_date(‘d’)).’">’.get_the_date(‘Y年m月d日’).'</a>’;
}
}else if(is_author()){
$tmp = $dchr.'<a href="’.get_the_author_link().’">’.get_the_author().'</a>’;
}
}else if(is_page()){
$page = get_post(get_query_var(‘p’));
$tmp = $dchr.'<a href="’.get_page_link($page->ID).’">’.$page->post_title.'</a>’;
$num = intval($page->post_parent);
if($num != 0){
while($num != 0){
$page = get_post($num);
$tmp = $dchr.'<a href="’.get_page_link($page->ID).’">’.$page->post_title.'</a>’.$tmp;
$num = intval($page->post_parent);
}
}
}else if(is_single()){
$post = get_post(get_the_ID());
$tmp = $dchr.'<a href="’.get_the_permalink($post->ID).’">’.$post->post_title.'</a>’;
}else if(is_search()){
$tmp = $dchr.’検索結果’;
}else if(is_404()){
$tmp = $dchr.’ページが見つかりません’;
}
$list = $list.$tmp;
$ret = ”;
if(is_front_page()){
if($disp){
$ret = $list;
}else if($blog != $current_blog->blog_id && $mult){
$ret = $list;
}
}else{
$ret = $list;
}
return $ret;
}
[/php]
仕様はヘッダーに記してあるとおりだが補足。
第一引数・・・トップでのパンくずの表示
トップページにパンくずを表示するかをbool値で指定する。
デフォルトはfalseで、「表示しない」設定となる。
第4引数でマルチブログの有効化がされている場合は、サブブログのトップページはトップページとして扱わず、「HOME > ブログ」のように表示する。
第2引数・・・トップの名称
読んで字の通り。Stringで入力します。
デフォルトでは「Home」を表示する。
get_bloginfo()でサイトタイトルでも入れれば、「株式会社CattleMute > ほにゃらら」「CattleMuteウェブログ > ほにゃらら」みたいなことができる・・・はず。
第3引数・・・階層文字
階層を表す文字を表示する。Stringで入力します。
デフォルトでは「>」となっており、ここの引数に「→」でも設定すれば、「HOME → ほにゃらら」ってな感じになる。
第4引数・・・階層文字
今回の制作の一番のキモ。
第一引数でも触れているが、この引数を有効化しておくと、サブブログのトップページはトップページとして扱わず、「HOME > ブログ」のように表示する。
Bool値で設定します。
デフォルトfalse。マルチブログでやらなければ無用の長物。
コーポレートサイトとオフィシャルブログの間で、同一のテーマで運用するときに、便利。
つーか、これがないと今やってる制作が頓挫する。アーメン。
第5引数・・・メインブログのID設定
おまけで作った。
ブログIDを設定すると、そのIDに対応するブログがトップとなる。
例えば、
ブログID1 → 「株式会社CattleMute」
ブログID2 → 「CattleMuteウェブログ」
で、「CattleMuteウェブログ」のブログIDである2をこの引数へ設定し、 「株式会社CattleMute」を表示した場合。
パンくずリストは「Home > 株式会社CattleMute」となる。
・・・ぜってー使わねムダな機能だわwww
以上、Wordpressのパンくずリストの出力関数でした。
マルチブログにも対応しており、かなり汎用的に使える・・・ハズ。
・・・ちゃんと探せばもっと高品質な関数は手に入るし、きょうびプラグインもありふれてるから、こんな腐ったブログのソースなんざ誰もコピペしないでしょうがねぇ・・・。
※150717 バグフィックス及び少しだけ仕様を変更しました。
