以下、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[] = 'hoge';
$parts[] = ''.$key.'を含む商品一覧';
}
// 合体(してhtmlに戻す)
$trail = implode( $hseparator , $parts );
// 画面表示
echo $trail;
}
あとは、テーマ内で、bcn_display()と書いているところを、my_bcn_display()に置き換えれば良いだけですね。
ちょっと遠回りしたので、所要時間、1時間とはいきませんでしたが、これで、デザイナーさんでも後でメンテアンス出来るコードに仕上がった筈です。
実は、他のプラグインでも出力を抑制するパラメータのあるものがちょいちょいあるので、同じ手法が使えます。
皆さん、色々チャレンジして、愛着のあるプラグインと、さらに懇ろな関係になっちゃってください!