BreadcrumbNavXT

以下、WordPressとpluginでもカバー出来ないSEO対策への対策(All in One SEO Pack編)の続編です。

カスタムタクソノミー、カスタムフィールド、カスタムのリライトルールを使って、かなり特殊なサイト構造に対応完了!やった、もう一息で完成!というところで、パンクズ表示が、他のカスタマイズに追いつけてない事に気がつきます…
でも、全体の数パーセントのページの為だけに、使用中のパンくず生成pluing『Breadcrumb NavXT』とさよならして、自作codeへ切り替えるには、時間が全然足りません…

でも、きっと、またhookを見つけてちょちょいといける筈!だったのですが…

『Breadcrumb NavXT』のhookを検索した、けど、、、

plugin内を検索してみると、『apply_filters』で25件、『do_action』で22件の検索結果。
これだけあればどうにかなるでしょ、と、コードの中を物色し始めますが、結構複雑です…
ご本家のドキュメントも読んでみましたが、どのhookも、このpluginをきちんと理解した上で、それなりのコードを書かないと使えません。
これだと、デザイナーさんに引き継げなくなりそうな予感。む〜〜〜。

パンクズ画面出力用関数 bcn_display() をそのまま利用

先のご本家ドキュメントを改めて見ると、

bcn_display($return = false, $linked = true, $reverse = false)

とありました。つまり、bcn_display(true)とすれば、画面に出力せずに生成済みのパンクズのhtmlを取得出来るようです。これを自作の関数でラップして、アレンジしてから出力すればよさそう。

と、その前に、パンクズの各要素の間に挟まるセパレーターは、変更になる可能性があるので、保存済みのpluginのオプション値から取得したほうがよさげです。
Breadcrumb NavXTの管理画面、Breadcrumb NavXT Settingsの『Breadcrumb Separator』のinputタグをみてみると、

name=”bcn_options[hseparator]”

となっているので、きっと、bcn_optionsというoption名でDBに連想配列で色々と一緒に保存されてる筈。試しに、以下のコードを走らせると、設定済みのセパレーター『 > 』が表示されてビンゴ!
これをつかってhtmlを分解すれば、簡単にアレンジが効く筈です。

$bcn_options = get_option(‘bcn_options’);
echo $bcn_options[‘hseparator’];

pluginのバージョンアップでoption名や配列のkeyに変更が入る可能性がなくはないですが、これは、このpluginの歴史で最古のオプションの一つのようですので、早々は変わらないでしょう、と楽観しておきます。

分解して、アレンジして、合体

自作関数でラップしてみます。サンプルコードとしては抽象的すぎてコピペでは使えませんが、やってる事の簡単さはご理解頂けるかと。

function my_bcn_display(){
    // 保存済みのプラグインのオプション値から、セパレーターを取得
    $bcn_options = get_option('bcn_options');
    $hseparator = $bcn_options['hseparator'];
    // パンクズのhtmlを取得
    $trail = bcn_display(true);
    // 分解(して配列に格納)
    $parts = explode( $hseparator , $trail );
    // アレンジ(条件、html部分は、ご自分のニーズに合わせてアレンジ)
    // 例: post_type が hoge の一覧ページで、クエリ'key'に値があるなら、パンクズの最後の要素を差し替え
    if ( is_post_type_archive('hoge') && get_query_var('key') != '' ){
        // クエリを取得
        $key = get_query_var('key');
        // 配列の末尾から要素を取り除く
        array_pop( $parts );
        // 配列の末尾に要素を追加
        $parts[] = '<span typeof="v:Breadcrumb"><a rel="v:url" property="v:title" title="hoge" href="' . $products_page_url . '">hoge</a></span>';
        $parts[] = '<span typeof="v:Breadcrumb"><a rel="v:url" property="v:title" title="'.$key.'を含む商品" href="' . $products_page_url . '">'.$key.'を含む商品一覧</a></span>';
    }
    // 合体(してhtmlに戻す)
    $trail = implode( $hseparator , $parts );
    // 画面表示
    echo $trail;
}

あとは、テーマ内で、bcn_display()と書いているところを、my_bcn_display()に置き換えれば良いだけですね。

ちょっと遠回りしたので、所要時間、1時間とはいきませんでしたが、これで、デザイナーさんでも後でメンテアンス出来るコードに仕上がった筈です。

実は、他のプラグインでも出力を抑制するパラメータのあるものがちょいちょいあるので、同じ手法が使えます。

皆さん、色々チャレンジして、愛着のあるプラグインと、さらに懇ろな関係になっちゃってください!

※作成から2年前(840日経過)の記事です。内容が古い可能性があります。
東京都東日本橋の株式会社プレスマンPRESSMAN*Tech