@miya0001 さんに、WordPressでパンくずリストを表示するためのプラグイン9個+1を検証で半ば強引に取り上げてもらったパラメータでカスタマイズしやすいWordPressのパンくずナビを作ってみたのコードを一部デバッグして、さらに簡単に使えるようプラグインにしてみました。
とりあえずプラグイン化しただけなので、国際化とかはまだですし、サンプルとなるCSSなども全然作っていませんが、それについても追って公開していきたいと思います。
ただし、Breadcrumb NavXTとの差別化もあって管理画面などの実装は今のところ考えていません。
フィードバックがあれば、是非お寄せ下さい。
使い方
- 上記のダウンロードリンクより、プラグインのアーカイブファイルをダウンロードし、解凍後、プラグインディレクトリにアップロードしてください。
- プラグイン管理画面より、Prime Strategy Bread Crumbを有効化してください。
- テンプレートファイルのパンくずナビを表示したい箇所に、パンくずナビのテンプレートタグを追加してください。パンくずナビの表示は、テンプレートタグのパラメータで色々と変更ができます。パラメータについては、指定可能なパラメータを参照してください。
テンプレートタグ
デフォルトパターン
<?php if ( function_exists( 'bread_crumb' ) ) { bread_crumb(); } ?>
<ul class="bread_crumb"> <li class="level-1 top"><a href="http://www.example.com/">トップページ</a></li> <li class="level-2 sub"><a href="http://www.example.com/category/honda/">HONDA</a></li> <li class="level-3 sub"><a href="http://www.example.com/category/honda/sports/">スポーツ</a></li> <li class="level-4 sub"><a href="http://www.example.com/category/honda/sports/coupe/">クーペ</a></li> <li class="level-5 sub tail current">インテグラ</li> </ul>
文字列形式
<?php if ( function_exists( 'bread_crumb' ) ) { bread_crumb( 'type=string' ); } ?>
<a href="http://www.example.com/">トップページ</a> > <a href="http://www.example.com/category/honda/">HONDA</a> > <a href="http://www.example.com/category/honda/sports/">スポーツ</a> > <a href="http://www.example.com/category/honda/sports/coupe/">クーペ</a> > <strong class="current">インテグラ</strong>
指定可能なパラメータ
- type
- stringを指定すると、リストではなく文字列として出力します。デフォルトはlist
- home_label
- トップページの表示テキスト。デフォルトは「トップページ」
- search_label
- 検索結果の表示テキスト。デフォルトは「『%s』の検索結果」(%sが検索文字列)
- 404_label
- 404ページの表示テキスト。デフォルトは「404 Not Found」
- category_label
- カテゴリーの表示テキスト。デフォルトは「%s」(%sがカテゴリー名)
- tag_label
- 投稿タグの表示テキスト。デフォルトは「%s」(%sが投稿タグ名)
- taxonomy_label
- カスタムタクソノミーの表示テキスト。デフォルトは「%s」(%sがタクソノミー名)
- author_label
- 寄稿者の表示テキスト。デフォルトは「%s」(%sが寄稿者名)
- attachment_label
- アタッチメントの表示テキスト。デフォルトは「%s」(%sがアタッチメント名)
- year_label
- 年の表示テキスト。デフォルトは「%s年」(%sが年の数字)
- month_label
- 月の表示テキスト。デフォルトは「%s月」(%sが月の数字)
- day_label
- 日の表示テキスト。デフォルトは「%s日」(%sが日の数字)
- joint_string
- typeでstringを指定した場合の結合文字列。デフォルトは「>」(>)
- navi_element
- ラッパー要素名。divまたはnavを選択可能。デフォルトは空(要素無し)
- elm_class
- ラッパー要素のクラス名。ラッパー要素がなくタイプがリストの場合は、ulのクラス名となる。デフォルトは、「bread_crumb」
- elm_id
- ラッパー要素のid名。ラッパー要素がなくタイプがリストの場合は、ulのid名となる。デフォルトは、空。(idなし)
- li_class
- タイプがリストの場合のliに付くクラス名。デフォルトは空(なし)
- class_prefix
- 各クラスに付く接頭辞。デフォルトは空(なし)
- current_class
- 表示中のページのパンくずナビに付与されるクラス名。デフォルトは「current」
- indent
- タブでのインデント数。デフォルトは0。
- echo
- 出力を行うか。デフォルトはtrue(出力する)。0またはfalseの指定でPHPの値としてreturnする。
更新履歴
- 2011.08.08 ver. 1.0.0
- カスタム投稿タイプアーカイブ表示時の対応を追加。公式ディレクトリにて公開
- 2011.07.12 ver. 0.8.1
- テンプレートタグでパラメータの指定が無かった場合にNoticeエラーが出ていた問題を修正
- デフォルトパーマリンクでmパラメータに対応できていなかった問題を修正
- 2011.06.30 ver. 0.8.0
- プラグイン化
kaiさん、ご利用ありがとうございます。
カスタム投稿タイプの登録時に階層(hierarchical)を有効にしていると、カスタム分類をパンくずリストに含めない仕様にしています。これは、階層を有効とした場合、固定ページのような使い方がメインになるであろうとの想定でそのようにしています。
もし、階層が有効となっていて、なおかつ親子の関係を持たせる必要がなければ、階層を無効にしてみてください。
jim912様
早々の回答ありがとうございました。
ご指摘にように階層を無効にしたら希望通りの表示になりました。
ありがとうございました。
初めまして。
Wordpress、PHPを始めたばかりのまめぴよと申します。
使いやすいプラグインをありがとうございます。
パンくずの出力はデフォルトの値ではできるのですが、区切り文字を|に変更をしてみたく、
パラメータを指定しているのですがデフォルトのままで出力されてしまいます。
prime-strategy-bread-crumb/prime-strategy-bread-crumb.phpは、何も変更していません。
出力するphpで以下のようにパラメータを指定しています。
functions.php
パラメータの指定方法が違うのでしょうか?
丸一日中悩んでいて進まなく・・・
お忙しいところ申し訳ありませんが、お時間があります時にでもご回答頂ければ幸いです。
よろしくお願いいたします。
まめぴよさん、ありがとうございます。
ご質問の件、指定したパラメータの部分が消えてしまっているので(おそらく使用できないタグとWordPressが判断し削除した)具体的にどうとは言えませんが、区切り文字を変更するにはtypeとjoint_stringの2パラメータの指定が必要です。
マークアップをリストタグで行う場合は、CSSのcontentプロパティを使うか、背景画像などで対応してください。
jim912 様
基本的なことにも関わらず、丁寧に教えていただきありがとうございます。
type=stringの指定が抜けていたようです。
教えていただいた通り指定しましたところ、指定した区切り文字で出力ができました。
お忙しいところありがとうございました。
こんばんわ、再度質問させていただきます。
記事カテゴリを複数選択している場合に、選択されているカテゴリすべてを出したいのですが、可能でしょうか?
TOP PAGE>カテゴリ1,カテゴリ2>ページ名
上記のような感じにしたいのですが、カスタマイズの方法を教えていただけないでしょうか?
それと、複数のカテゴリを選択した場合、デフォルトでは「後から作成されたカテゴリ」が表示されるようですね。
TOP PAGE>カテゴリ2>ページ名
先に作成されたカテゴリ(カテゴリIDの小さいもの)から表示させることは可能でしょうか?
何度も申し訳ありませんが、回答お願いいたします。
satoさん、ありがとうございます。
ご質問の件ですが、カテゴリーは親子構造を持つため、複数カテゴリを表示してしまうと、親カテゴリを表示した際に不整合が出てしまいます。また、内部のデータ構造上、複数のカテゴリーを表示するには適していません。
表示するカテゴリーについては、WordPressのget_the_categoryの取得順に準じてカテゴリー名順となるようになっています。
ID順にするには、get_the_categoryをカテゴリーid順に取得するようにするを参考にget_the_categoriesとなっている部分をget_the_termsに置き換えてください。
回答ありがとうございます。リンク先のページを参考にさせてもらったところ、うまくID順に表示されるようになりました。
しかし、まだ少し気になる点があるので、質問させていただきたいと思います。
カテゴリを複数選択すると、1つのページに対して2つのURLが出来てしまいます。
例えば、「東京の食料品店」を紹介するページに対して、「tokyo」カテゴリ(カテゴリID1)と、「foodshop」カテゴリ(カテゴリID2)の2つを割り当てたとします。
すると、下記の2つのURLが出来てしまいます。
http://hoge.jp/tokyo/post/
http://hoge.jp/foodshop/post/
1つのページに対して複数のURLが出来ると、SEO上の問題が出てくると思いますので、複数のカテゴリを選択した場合でも1つのURLしか生成されないようにしたいです。
後者のURLは、アドレスバーに直接入力しないとアクセスできないもので、アーカーブページなどに表示されることはありませんが、それでもgoogleから拾われてしまうかもしれませんので、前者のURLに統一したいです。
ちなみに、http://hoge.jp/foodshop/post/にアクセスした場合、パンくずナビの表示は
——————–
TOP>東京>POST
——————–
となります。
URLを1つに統一することが不可であれば、URLがhttp://hoge.jp/foodshop/post/の場合、パンくず表示を
——————–
TOP>食料品店>POST
——————–
としたいのですが、難しいでしょうか。
難しいと言うことであれば、パーマリンクからカテゴリ名は排除しようと思います。
よろしくお願いいたします。
関係のない質問で申し訳ないのですが、
ちなみにページのURLには、IDの新しいものがついています。
ID
複数カテゴリを
URLが
東京カテゴリ
どちらか一方に統一は出来ないでしょうか
リンクをたどってのアクセスは出来ないので、クローラは拾わないとは思いますが、、、。
http://hoge.jp/tokyo/post/
http://hoge.jp/
satoさん
WordPressは複数のURLでアクセスできる場合でも、URL正規化タグが自動的に出力されるため、基本問題ありません。
回答ありがとうございます。確かに、ヘッダ内に入っていますね。
問題ないということで安心しました、ありがとうございました。