cocoonフック調査~index_middle_display_count_conditionの使い方と活用例

タナビーの高梨です。
WordPressのテーマ「Cocoon」には、テーマ改変なしでデザインや動作を拡張できる豊富なアクション・フィルターフックが用意されています。
分かる範囲で内容を調査したのでブログにまとめていこうと思います。
今回はインデックスページの記事一覧内のインデックスリストミドル表示を制御できるフィルターフック
index_middle_display_count_condition
です。
フックの概要
フック名 | 発火タイミング |
---|---|
index_middle_display_count_condition | トップページ記事一覧表示時に発火 |
フックの発火条件
下記の記事で紹介しているis_index_middle_widget_visibleと同じタイミングで、トップページ記事一覧表示の記事ごとに発火します。
使いどころ
このフックは、記事一覧のループ処理中に記事番号が特定の位置(デフォルトでは3番目)であるかを判定し、その記事の下にインデックスリストミドルを表示するかどうかを決定します。
ただし、該当箇所のソースコードを見る限り、この後に呼び出される is_index_middle_widget_visible フックで同じ制御が可能なため、このフック単独での必要性は低いと考えられます。
もしあえて使うなら、例えば「1番目と6番目の記事の後に表示したいが、元々の条件(最大投稿数6以上・タイル表示でない等)も残したい」といった場合に利用できます。
しかし、このフックには記事番号 $count
が渡されないため、記事番号を条件にすることはできません。
結果として、実用面では子テーマ等でロジックを直接上書きする方が現実的な気がします。
apply_filters呼び出し元のソースコード
lib/ad.php
$display_count_condition = apply_filters('index_middle_display_count_condition', $count == 3);
$is_visible =
//3個目の表示のときのみ
$display_count_condition && //何番目に表示するかの表示条件(デフォルト:3)
//1ページに表示する最大投稿数が6以上の時
is_posts_per_page_6_and_over() &&
//タイル表示じゃないとき
!is_entry_card_type_tile_card() &&
//&&//公開記事が6以上の時
(get_all_post_count_in_publish() >= 6);
$is_visible = apply_filters('is_index_middle_widget_visible', $is_visible, $count);
引数
$index_middle_display_count_condition:(boolean)その記事の後にウィジェット表示するか。true:する、false:しない。
カスタマイズコード例
function customize_index_middle_display_count_condition( $index_middle_display_count_condition ) {
// 判別のしようがない
return $index_middle_display_count_condition;
}
add_filter( index_middle_display_count_condition', 'customize_index_middle_display_count_condition', 10, 2 );
注意点
・このフックだけでは記事番号を取得できないため、「特定番号の記事にだけ表示」といった制御はできません。
・実際には後続の is_index_middle_widget_visible フックで同様の処理が可能なため、使い分ける必要性はあまりありません。
・細かい位置制御をしたい場合は、該当ロジックを子テーマで直接上書きする方が自由度が高いです。
まとめ
・index_middle_display_count_condition は、インデックスリストミドルの表示条件(記事番号部分)を判定するフィルターフック。
・実用性は低く、多くの場合は後続の is_index_middle_widget_visible を使えば事足りる。
・元々の条件を活かしたまま制御したい場合にのみ限定的に利用できる。