cocoonフック調査~bbp_before_main_content、bbp_after_main_content、bbp_template_noticesの使い方と活用例

タナビーの高梨です。
WordPressのテーマ「Cocoon」には、テーマ改変なしでデザインや動作を拡張できる豊富なアクション・フィルターフックが用意されています。
分かる範囲で内容を調査したのでブログにまとめていこうと思います。
今回はcocoon設定の保存時前後に発火するアクションフック
bbp_before_main_contentとbbp_after_main_contentとbbp_template_notices
です。
フックの概要
フック名 | 発火タイミング |
---|---|
bbp_before_main_content | 本文 (bbp-container の <div>) の直前 |
bbp_after_main_content | 本文ブロックの直後 |
bbp_template_notices | 通知系のメッセージ表示領域(直後) |
フックの発火条件
まずそもそもこのフックが発火するには、以下の条件をすべて満たした場合のみ発火します:
・bbpressがインストールされている(他のプラグインでも良いのかも、真相不明)
・cocoon設定の固定ページタブで、「コメント表示する」がチェックされている
・固定ページのテンプレートが「bbpress-create topics」または「bbpress-forums(index)」である
使いどころ
本文全体である”bbp-container”のクラスを持つ<div>の前後に割り込むアクションフックです。
画像を見て、出したい内容を考えてください。
赤くなっているところに表示できます。
例えば、以下のような用途に活用できると思います:
・お知らせバナーや注意喚起の挿入
・ログイン状態による条件表示(会員限定メッセージなど)
・カスタムスタイルの表示用ラッパー追加
・フォーラムのデバッグ用領域の表示
謎なのが、bbp_before_main_contentとbbp_template_noticesが元のソースでは連続で書かれていることです。
これらのフックは全部で2か所でしか現れず、2か所とも同じパターンで連続で書かれています。
このため、普通に考えればどちらか片方でフックを拾えば事足りるはずで、2つ存在する理由が分かりません。
テンプレートがbbpress-create topicsの場合

テンプレートがbbpress-forums(indexx)の場合

do_action呼び出し元のソースコード
/templates/page-create-topics.php
<?php do_action( 'bbp_before_main_content' ); ?>
<?php do_action( 'bbp_template_notices' ); ?>
<?php if(is_bbpress_exist()): ?>
<?php while ( have_posts() ) : the_post(); ?>
<div id="bbp-new-topic" class="bbp-new-topic">
~~ 省略 ~~
<?php endif; ?>
<?php do_action( 'bbp_after_main_content' ); ?>
/templates/page-front-forums.php
<?php do_action( 'bbp_before_main_content' ); ?>
<?php do_action( 'bbp_template_notices' ); ?>
<?php if (is_bbpress_exist()): ?>
<?php while ( have_posts() ) : the_post(); ?>
<div id="forum-front" class="bbp-forum-front">
~~ 省略 ~~
<?php endwhile; ?>
<?php endif; ?>
<?php do_action( 'bbp_after_main_content' ); ?>
引数
なし
カスタマイズコード例
上記画像での出力例です。
function customize_bbp_before_main_content() {
echo '<div style="background:red;color:white">bbp_before_main_contentはここに表示できる</div>';
}
add_action('bbp_before_main_content', 'customize_bbp_before_main_content' );
function customize_bbp_after_main_content() {
echo '<div style="background:red;color:white">bbp_before_main_contentはここに表示できる</div>';
}
add_action('bbp_after_main_content', 'customize_bbp_after_main_content' );
注意点
⚠️フックは bbPress が有効化されている状態でないと発火しません
⚠️bbp_before_main_contentと’bbp_template_noticesはどちらか片方だけの活用で良いと思います
まとめ
bbp_before_main_content・bbp_after_main_content・bbp_template_notices は、bbPressとCocoonを連携させたときに使える、本文まわりの拡張用フックです。
使用条件にややクセはありますが、フォーラム上部・下部に案内やカスタマイズ表示を追加したいときに役立ちそうです。
bbPressを使っている方はぜひチェックしてみてください。