読者です 読者をやめる 読者になる 読者になる

ゴミ溜め@技術系日常系雑文

主にWeb技術やそのほかつまづいたこととか引っかかって調べたこととかをまとめてます。

はてなダイアリーから引っ越しました。)

WordPressの Breadcrumb NavXT プラグイン(V4.3.0)プラグインでリストタグを使う

PHP WordPress HTML

この記事はWordPressのBreadcrumb NavXT プラグイン(V4.3.0)についての記事です。

Breadcrumb NavXT プラグインは便利。
だけど、やっぱりぱんくずリストはリストタグ(<ul><li> とか、<ol><li>とか)で記述したいよねって思ったんだけど、どうにもこのプラグイン、フォーマットとして<li>タグを使うことを許してくれないらしい。
試しにGeneralの「Breadcrumb Separator」項目に

<li></li>

とか記述して変更を保存しても、見事に反映されずに空欄だけが残るという寂しいさま。

解決策としては2つ。

1つは、 Breadcrumb NavXT のソースコードを直接書き換えてしまう方法。
まあ一度書き換えてしまえばうっかりそのままプラグインをアップデートしてしまわない限り何にも考えずに思う存分LIタグを使うことが出来る。

2つめは、Separatorとして何か適当な文字列を設定しておき、呼び出すときにそれを置換する方法。
こっちだとオリジナルのソースはそのままに、機能追加だけ出来るので安全なのがメリット。

今回は、Breadcrumb Separatorに

</li><li>

と指定して、
呼び出し側のソースで

<div id="pankuzu">
<ol><li><?php bcn_display(); ?></li></ol>
</div>

としてリストを作る方法をとる。

以下、方法。

1つめ、オリジナルのソースを変更する方法

  • まず、「WPのディレクトリ\wp-content\plugins\breadcrumb-navxt\breadcrumb_navxt_class.php」の44行目付近、
  • および、「WPのディレクトリ\wp-content\plugins\breadcrumb-navxt\includes\mtekk_adminkit.php」の33行目付近の

protected $allowed_html」を書き換える。

protected $allowed_html = array(
  'a' => array(
    'href' => true,
    'title' => true,
    'class' => true,
    'id' => true,
    'media' => true,
    'dir' => true,
    'relList' => true,
    'rel' => true
  ),
  'img' => array(
    'alt' => true,
    'align' => true,
    'height' => true,
    'width' => true,
    'src' => true,
    'id' => true,
    'class' => true
  ),
  'span' => array(
    'title' => true,
    'class' => true,
    'id' => true,
    'dir' => true,
    'align' => true,
    'lang' => true,
    'xml:lang' => true
  ) /*以下を追加*/,
  'li' => array(
    'title' => true,
    'class' => true,
    'id' => true,
    'dir' => true,
    'align' => true,
    'lang' => true,
    'xml:lang' => true
  ) /*追加ここまで*/
);

書き換えて保存したら、Breadcrumb Separator項目に「<li></li>」を指定する。
スマートではある。ただしこの方法は前述の通りプラグインをアップデートしたら書き換えられてしまうのであまりおすすめできない。


次に、適当な文字列を置換する方法。
今回は、Breadcrumb Separator項目に「li/li」と記述したら

<li></li>

と置換する方法。
ぱんくずリストを呼び出すソース(header.php等)で、

<div id="pankuzu">
<ol><li><?php
if(function_exists('bcn_display')) {
	$bcn = bcn_display(true);
	echo mb_ereg_replace( "\[\[(\/?li)\]\]", "<\\1>" ,$bcn );
}
?></li></ol>
</div>

と指定。bcn_display()関数の第一引数にtrueを指定すると、勝手にechoされずに引数として文字列が渡されるので、これにたいして文字列置換をかけ、それをechoする。

あとは、Breadcrumb NavXT の設定メニューから
Breadcrumb Separator 項目に「li/li」を指定すれば完成。

オマケ。bcn_display()関数の引数:

/**
 * A wrapper for the internal function in the class
 * 
 * @param bool $return Whether to return or echo the trail. (optional)
 * @param bool $linked Whether to allow hyperlinks in the trail or not. (optional)
 * @param bool $reverse Whether to reverse the output or not. (optional)
 */
function bcn_display($return = false, $linked = true, $reverse = false){…}

第1引数・・・echoせずにreturnするか?(標準はfalse=echoする)
第2引数・・・各ノードにハイパーリンクを張るか?(標準はtrue=リンクする)
第3引数・・・ノードの並び順を逆順にするか?(標準はfalse=正順で出力)