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 バグフィックス及び少しだけ仕様を変更しました。