Habakiri のアクションフックの使い方
この記事は Habakiri Advent Calendar 2015 10日目の記事です。8日目は Taz さんの「最近Habakiriのテーマをいじって勉強したのでその時の感想など。」でした。9日目を飛ばしてしまいましたが(実際この記事も11日に書いてしまっていますが)、1ネタ思いついたので書いていきたいと思います。
Habakiri にはアクションフックがたくさん!っていうけど、どう使うの?
Habakiri にはテンプレートを上書きせずに HTML を追加できるように各所にアクションフックが仕込んであります。このアクションフックを使って任意の HTML を追加しようという場合、単純にやると下記のようになるかと思います。
<?php function habakiri_child_theme_setup() { class Habakiri extends Habakiri_Base_Functions { public function __construct() { parent::__construct(); add_action( 'habakiri_after_entry_content', array( $this, 'habakiri_after_entry_content' ) ); } /** * .entry__content の後に新着記事を表示 */ public function habakiri_after_entry_content() { global $post; $recent_posts = get_posts( array( 'posts_per_page' => 3, ) ); ?> <div class="recent-posts"> <?php foreach ( $recent_posts as $post ) : setup_postdata( $post ); ?> <div> ..... </div> <?php endforeach; wp_reset_postdata(); ?> </div> <?php } } } add_action( 'after_setup_theme', 'habakiri_child_theme_setup' );
だいたい上記のような感じだと思います。habakiri_after_entry_content
フックを使って、.entry__content
の後に新着記事を3件表示する例ですが、コールバック関数の中に全部書いてしまっているため、もしこのようなアクションフックによる HTML の追加が複数あると、functions.php
がとても長くなってしまい、結果、メンテもとても難しくなってしまいます。
そこで、下記のようにするのがおすすめです。
// コールバック関数の部分だけ抜粋 public function habakiri_after_entry_content() { get_template_part( 'modules/after-entry-content' ); }
最新記事の取得の記事を HTML の生成をmodules/after-entry-content.php
に切り出し、それをget_template_part()
で呼び出す方法です。これであればアクションフックの利用が複数になっても、各パーツ毎にファイルが分割されている構成になるため、場所ごとに管理しやすくなりますね。
フィルターフックの場合
アクションフックの場合の例をご紹介しましたが、フィルターフックでも上記のように切り出しを行いたいとしても、そのままでは正しく表示されません。アクションフックの場合は HTML をそのまま出力すれば良いのですが、フィルターフックの場合は文字列としてretrun
しなければならないからです。例えばthe_content
フィルターフックを使い本文の前に HTML を追加したい場合は下記のようにすれば OK です。
// コールバック関数の部分だけ抜粋 public function the_content( $content ) { ob_start(); get_template_part( 'modules/before-content' ); $before_content = ob_get_clean(); return $before_content . $content; }
ob_start()
でバッファリングを有効にすることで、通常get_template_part()
で HTML 出力されるところが、出力ではなく、変数に格納できる状態になります。そして、ob_get_clean()
で変数への格納とバッファリングの終了を行い、もともとの内容($content
)と連結させてreturn
させれば OK です。
この投稿へのトラックバック
-
-
[…] Habakiri のアクションフックの使い方 […]
-
-
-
[…] 表示されません。 例えばthe_contentフィルターフックを使い本文の前に HTML を追加したい場合は下記のようにすれば OK です。 [紹介元] Habakiri のアクションフックの使い方 – Habakiri […]
-
-
-
[…] ば記事の前後とか、タイトルの前後とか、ヘッダーの前後とか、いろいろなところにアクションフックが用意してあります。なので「ここに何かを足したいんですよ」みたいなときにテ […]
-
- トラックバック URL
この投稿へのコメント