work.log

元エンジニアの備忘録的ブログ

WordPressのthe_categoryをフィルターフックする

投稿:

WordPress テンプレートタグ the_category の出力内容を HTML5 準拠にするメモです。

the_category の出力する rel属性 が HTML5 準拠ではないと気付いたので、 WordPress のフィルターフックを利用して調整しました。

ちなみに、カスタマイズ中の TwentyTwelve でこれに引っかかったのはこの部分。

TwentyTwelveに独自追加した投稿情報

twentytwelve-customize-022-01

※ the_category で表示させています。

このフィルターフックで動作変更する方法は以下に記載します。

the_categoryをフィルターフックして動作変更する方法

まずフィルターフックとは何なのかという事ですが、ここでは the_category の出力がブラウザに表示される直前に 実行したい PHP 処理を追加する事と覚えておけば大体 OK だと思います。

the_category でカテゴリ名 WordPress を実行すると rel=”category tag” というコードが出力されますので、この rel 属性を HTML5 準拠に修正します。

フィルターフック前のthe_categoryの出力内容

<a href="https://worklog.be/archives/category/wordpress" title="WordPress の投稿をすべて表示" rel="category tag">WordPress</a>

この rel 属性は wp-includes/category-template.php の 163行目 で設定されています。

$rel = ( is_object( $wp_rewrite ) && $wp_rewrite->using_permalinks() ) ? 'rel="category tag"' : 'rel="category"';

category-template.php を直接変更しても良いですが WordPress のアップデートが面倒になるので、子テーマ内だけで修正するために functions.php にフィルターフックを追加します。

function replace_category_rel($url){
    $url = preg_replace( '/rel="category(|[_a-zA-Z0-9\s]+)"/', 'rel="tag"', $url );
    return $url;
}
add_filter( 'the_category', 'replace_category_rel', 10, 1);

※ rel=”category を含む文字列を rel=”tag” に置換。

WordPress 関数メモ

add_filter() は WordPress システム関数に、(独自処理等の) 関数を追加するための関数です。

add_filter(‘WordPress システム関数名’, ‘フィルター関数名’, ‘優先度’, ‘受け取る引数の数’) で設定します。

  • WordPress システム関数名は the_XXXXX, get_XXXX 等。
  • フィルター関数名には function で独自に定義したもの等。
  • 優先度は数値が小さいほど処理優先度が高い。初期値は 10。
  • WordPress システム関数から受け取る引数の数は任意指定。初期値は 1。

たったこれだけですが the_category の出力する rel 属性が下記のように変更できます。

フィルターフック後のthe_categoryの出力内容

<a href="https://worklog.be/archives/category/wordpress" title="WordPress の投稿をすべて表示" rel="tag">WordPress</a>

修正後は HTML5 構文チェックも無事にパスしました。(トップページのみ)

the_categoryの動作修正後

twentytwelve-customize-022-02

簡単ですがthe_categoryをフィルターフックして動作変更する方法は以上になります。

フィルターフックについてもっと知りたい場合は下記ページが参考になると思います。

参考にしたページ

WordPress の add_action と add_filter などのフックが分からないから調べた!

WordPress プラグイン作成前の基礎知識

おすすめのVPSサーバ

  • OSが選べる
  • VPS同士でLANが組める
  • 複数台構成向き

このブログで使っています。

  • 転送量が多いサービスに
  • 借りてるのは3年間一度もdown無し!

よく見られている記事

  • 本日
  • 週間
  • 月間