Habakiriのカスタマイズ
Wordpressのテーマ「Habakiri」で、entry-metaをカスタマイズした。entry-metaは、投稿記事の更新日とかカテゴリとかある部分のところ。
マニュアル https://habakiri.2inc.org/manual/filter-hooks/では、フィルターフックが使える。
実際、たとえば空タグの追加なんかはこっちでもテストできた。
functions.php
function my_habakiri_entry_meta( $entry_meta ) { $entry_meta .= '<li></li>'; return $entry_meta; } add_filter( 'habakiri_entry_meta', 'my_habakiri_entry_meta' );
ただ、すでに入っている$entry_metaの中身を空にするのはできても、そこから新しく入れなおすのにちょっと失敗した。
クラスの外ということでか、inc/class.entry-meta.phpの中身をコピーしても動かない。
動かなかった例(たぶん)
function my_habakiri_entry_meta( $entry_meta ) { $entry_meta = $this->published(); $entry_meta .= $this->updated(); $entry_meta .= $this->author(); $entry_meta .= $this->categories(); $entry_meta .= $this->tags(); $entry_meta .= $this->taxonomies(); return $entry_meta; } add_filter( 'habakiri_entry_meta', 'my_habakiri_entry_meta' );
根本的に書き方が間違ってるだけかもしれないが、おそらくはpublished()などはprotectedのため、クラスの外からは使えない、ということだろう。たぶん。
自力で$entry_metaの中身を書けばいいとも思ったが、どうせだったらすでにあるものを利用したい。
なので、思い切って、class:Habakiri_Entry_Metaを上書きしてみることにした。
まず、modules/entry-meta.phpを子テーマディレクトリにコピー。
中身を
class my_Habakiri_Entry_Meta extends Habakiri_Entry_Meta { public function display() { do_action( 'habakiri_before_entry_meta' ); ?> <div class="entry-meta"> <ul class="entry-meta__list"> <?php $entry_meta = $this->published(); $entry_meta .= $this->categories(); $entry_meta .= $this->tags(); $entry_meta .= $this->taxonomies(); echo apply_filters( 'habakiri_entry_meta', $entry_meta ); ?> </ul> <!-- end .entry-meta --></div> <?php do_action( 'habakiri_after_entry_meta' ); } } $EnetryMeta = new my_Habakiri_Entry_Meta(); $EnetryMeta->display();
とすると、とりあえずうまく動いたっぽい。
これ、よく考えたら、リストじゃなくって定義タグにしたい、とかいうときにも使えるかも。