独自のページが有る場合、 Breadcrumb NavXT 導入時に、パンくずリストにそのページを追加する方法を調べました。
Breadcrumb NavXT には、アクションフックが二つ用意されています。
add_action('bcn_before_fill', 'my_filter_breadcrumbs_before'); add_action('bcn_after_fill', 'my_filter_breadcrumbs_after');
bcn_before_fill は、パンくずリスト生成前、 bcn_after_fillは、パンくずリスト生成後のアクションフックです。
パンくずリストを追加することを考えますので、bcn_after_fillを使います。
以下の例は、とあるページ(投稿ページ、固定ページなど)にitemnameというクエリパラメータがついていたら、そのページ下層の独自ページとする。
という前提です。(例 http://test.com/?p=123&itemname=あいうえお)
add_action('bcn_after_fill', 'my_filter_breadcrumbs_after'); function my_filter_breadcrumbs_after($bcnObj) { if ( count($bcnObj->trail) > 0 ) { $itemname = htmlspecialchars($_GET["itemname"]); if ($itemname){ //独自ページのパンくず生成 $trail_add[0] = clone $bcnObj->trail[0];//クローンを用意 ※1 $trail_add[0]->set_title($itemname);//タイトルを設定 ※2 if($bcnObj->opt['bcurrent_item_linked']){// ※3 $query = array('itemname' => $itemname); $seturl = add_query_arg( $query , get_permalink()) ; $trail_add[0]-> set_url($seturl);// ※4 }else{ //親ページをリンク付きに変更 $bcnObj->trail[0]->set_url(get_permalink());//URLを設定 ※5 $bcnObj->trail[0]->set_template($bcnObj->opt['Hpost_post_template']);//テンプレートを設定 ※6 } $bcnObj->trail = array_merge ($trail_add, $bcnObj->trail);//ここでマージ ※7 } } return $bcnObj; }
フックで受け取った変数$bcnObjにパンくずの情報が入っています。
$bcnObj->opt にBreadcrumb NavXTの設定ページした情報が入っています。
$bcnObj->trail に表示するパンくずが配列で入っています。
$bcnObj->trail[0] が一番右側で、 ホーム > 親ページ > 投稿ページ のようなパンくずリストの場合、 $bcnObj->trail[2] > $bcnObj->trail[1] > $bcnObj->trail[0] という感じになっています。
そこで、一番右にパンくずを追加したいのなら、[0]のところにもう一つ挿入すればいいということになります。
ホーム > 親ページ > 投稿ページ > あいうえお
$bcnObj->trail[3] > $bcnObj->trail[2] > $bcnObj->trail[1] > $bcnObj->trail[0]
なので、$bcnObj->trail[0] からクローンを取り出して、(※1) タイトルを設定して、(※2 例ではクエリパラメータをそのまま突っ込んでます。) 内容を書き換えて、マージするようにしてみました。(※7)
設定で、「現在のページを示す項目にリンクを張る」がONの場合(※3)は、独自ページのところにもリンクを追加したいので、set_urlメソッドで独自ページのリンクを追加します。(※4)
その一方、「現在のページを示す項目にリンクを張る」がOFFの場合は、本来の現在のページにはリンクがついていないので追加します。(※5)
set_template関数でパンくずのテンプレートを設定しますが、$bcnObj->opt[‘Hpost_post_template’] はBreadcrumb NavXTの設定にある、投稿タイプの投稿テンプレートです。(※6) (その他のテンプレートは、プラグインのclass.bcn_breadcrumb_trail.php にありますが、設定ページのソースコード(HTML)を覗いても大体わかります。)
参考: http://notnil-creative.com/blog/archives/981 http://tenman.info/labo/snip/archives/3761
[Collab] Collab…