PHP
WordPress

WP-Paginateのprev、nextのaタグ内にHTMLタグを挿入する

WordPressでページネーションを実装する際、概ねプラグインを使って実装しますね。

僕はWP-Pagianteというものを常用しており、このプラグインは設定画面からPrevボタン、Nextボタンに任意のテキストを設定できます。
ただひとつ難点なのが、HTMLタグをそのテキストフィールドに設定することがプラグインの仕様上できないのです。セキュリティ面など考慮すると妥当な仕様だとも考えられますが、しかしこれでは不便です。

リッチなWebサイトのページネーションのprev、nextボタンにはsvgや画像が用いられていることが多いですが、それをこのプラグインは設定画面だけではこのimg、svgを使ったページネーションが実現出来ないのです。

解決策

これを解決するには独自のラッパー関数を用意します。
通常 wp_paginate()を単純に呼び出すと、ページネーションが表示されますが、同じような感覚で呼び出せるように、 my_paginate などの関数を用意しましょう。

その中で wp_paginateの実行結果をバッファリングし、任意のテキストとHTMLタグとをreplaceすることで、HTMLタグの挿入に成功しました。

/**
 * prev, nextをカスタマイズしたページネーションを出力する.
 */
function my_paginate() {
  if (function_exists('wp_paginate')) {
    ob_start();

    wp_paginate();

    $out = ob_get_clean();

    $out = str_replace('__prev__', '<img src="/assets/images/prev.png" alt="">', $out);
    $out = str_replace('__next__', '<img src="/assets/images/next.png" alt="">', $out);

    echo $out;
  }
}

この関数を作成した上で、 WP-Paginateの設定画面で、 Previous Page__prev__Next Page__next__ と入力すると、 my_paginate の実行時にreplaceの処理が行われます。

プラグインの処理はechoで出力されるものが多く、実行結果を変数に代入してゴニョゴニョ、、、という事が出来ない事も多いですが、このようにPHPのバッファリングを使えばゴニョゴニョを実現できるようになります。
度の過ぎた魔改造は考えものですが、節度をもって使えばプラグインをより便利に扱えるようになるのではないでしょうか。