the_category()のaタグにCSSのクラスを付ける小ネタ
ワンオフサイトの制作で、the_category()で出力する記事に紐付いた記事一覧にカテゴリーのURLに付いているスラッグを起点としたCSSのクラスを付けたいことがある。
そんなときはまぁふつうにget_the_categoryで回せばいいんじゃないかと思うかもしれない。
でも、ワンオフサイトの出力関係をできるだけ規定のテンプレート関数に頼ったり、既存テーマのテンプレートをいじったりするときにはそれが欲しいなーとたまに思ったりする。
そんな際に手っ取り早くなんとかできんかと思って、適当に書いて組み込んだ。
そんなときはお馴染みのpreg_replace()でthe_category()に対して、書換えを行う。
置換条件を複雑にするのがアレだったので相当ざっくりとしているが、
function user_override_the_category( $html ) { $html = preg_replace( '~a href="(' . esc_url( get_home_url() ) . '/category/(.+?)/)"~', 'a href="\1" class="post-category-\2"', $html ); return $html; } add_filter( 'the_category', 'user_override_the_category', 10, 1 );
パーマリンクのカテゴリのURLが/category/カテゴリ/…とかなっていること前提だが、こんな感じ。
CSSでclass=”post-category-うんたらかんたら”を参照させる場合、
<style> a.post-category-カテゴリ{color:#f00;} a.post-category-カテゴリ1\/カテゴリ1階層{color:#f00;} /* スラッシュはエスケープしておく */ a[class^=post-category-カテゴリ]{color:#f00;} </style>
とかとか。
/category/の部分を変えていたり、?から始まるような直接のパラメータ形式でやるような場合は置換条件を適宜変更すればいいと思う。
その際は正規表現のグループ化と参照をどーぞ適切に。