PRESSMAN*Tech

HTML5, CSS3からWordPress, AWS, Docker, Node.jsまで。プレスマンのスタッフが綴る技術ブログ。

WordPressとpluginでもカバー出来ないSEO対策への対策(Breadcrumb NavXT編)

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時間とはいきませんでしたが、これで、デザイナーさんでも後でメンテアンス出来るコードに仕上がった筈です。

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

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

投稿者:hiroshi
hiroshi

hiroshi の紹介

DTP、Webデザイン、プログラミングをへて、サービス企画に。
Wordpressのことなら何でもご相談ください。
このエントリーをはてなブックマークに追加

私たちと一緒に働きませんか?

株式会社プレスマンでは、プログラミングが大好きな方、仕事を通してさらにスキルを磨きたい方を募集しています。まずは募集職種をご覧の上、お気軽にお問い合わせください。あなたとお会いできるのを楽しみにしています。

プレスマンの採用情報を見る →

コメントは受け付けていません。

▲ 先頭へ戻る