Cocoonのインデックスリストにインフィード広告を複数表示させる方法

 驚くほど高機能で使いやすいWordPressの無料テーマCocoon。トップページのインデックスリストには、インデックスリストミドルにウィジェットを配置することで、Google AdSenseのインフィード広告を差し込むことができます。

 ただ、このCocoonの指定だと、ウィジェットの表示位置は「頭から4番目」と決められてしまっており、その個数も変化させることができません。サイドバーとの兼ね合いでトップページに並べるリストの個数をもう1段縦に伸ばしたくなり、そうすると後半にもひとつインフィード広告を足したくなったので、カスタマイズ方法を調べてみました。

 参考になったのはこちらのブログ。

 手順としては、インデックスリストミドルにウィジェットを配置するか判定する関数があるので、それを親テーマから子テーマのfunctions.phpにコピペして、判定条件をいじってやればOKのようです。

親テーマの lib/ad.php から該当する関数をコピペ

 親テーマフォルダ配下の lib/ad.php に次の is_index_middle_widget_visible 関数があります。これを丸ごと子テーマの functions.php にコピペしてやります。functions.phpの編集にミスると、Webサイトが表示されなくなったりする可能性があるみたいなので、必ずバックアップを取っておくなり、元に戻せる状態を作ってから試みてください。

//ウィジェットをトップページのリスト表示中間に掲載するか
if ( !function_exists( 'is_index_middle_widget_visible' ) ):
function is_index_middle_widget_visible($count){
  if (
      //3個目の表示のときのみ
      ($count == 3) &&
      // //トップページリストのみ
      // is_home() &&
      // //ページネーションの最終ページでないとき
      // !is_pagination_last_page() &&
      //1ページに表示する最大投稿数が6以上の時
      is_posts_per_page_6_and_over() &&
      //エントリーカードタイプの一覧のとき
      //is_entry_card_type_entry_card() &&
      //タイル表示じゃないとき
      !is_entry_card_type_tile_card() &&
      //&&//公開記事が6以上の時
      (get_all_post_count_in_publish() >= 6)
  ) {
    return true;
  }
}
endif;

 PHPの言語仕様とか書式は良く知らないんですけど、関数名からして「IS インデックスミドルのウィジェット、可視ですか?」って聞いてるんだからこの関数の使い道は「インデックスリストミドルに配置されたウィジェットが可視か否かを判定する」ものであり、その役目は「可視条件に合致すれば真を返す」ことなんでしょう。
 つまり、この関数内に書かれている条件こそが、私の求めているインフィード広告を挿入するか否かの条件指定箇所になるわけですね。

 現在その条件は「3個目の記事」で「1ページに表示する最大投稿数が6以上」で「タイル表示じゃない」で「公開記事が6以上」というすべてを満たす時のようです。

$count == 3 をお好みの条件に差し替える

 関数の引数として「$count」を受け取っているので、「インデックスリストの$count番目だけど、ウィジェット見せる?」と、この関数で確認して処理を切り分けていると推測することができます。見れば条件判定部分の最初に、その箇所が出てきます。

      //3個目の表示のときのみ
      ($count == 3) &&

 従って、上の参考ブログでもやっているように、ここの数値を3以外のものに変えると、それに応じた○番目の位置に、広告挿入位置が変化します。
 私の場合は、挿入位置じゃなくて挿入個数を変えたいので、ここの条件を満たす数値の個数を増やすことにします。

 $count以外の条件とはすべて&&でつながれているので(書式は知らんけど、こんなんAND条件しかないよね)、$count判定部分だけを()で囲って、その中にOR条件を並べてやればいけるでしょう。&&だから多分書式は||かな?

      //3個目と7個目のときに表示
      (($count == 3) || ($count == 7)) &&

 試してみると、想定通り「3番目の記事の後」と「7番目の記事の後」にインフィード広告が差し込まれるように変化していました。
 なんとなく変化をつけるという意味では、ここの数値をランダムにしてしまうのもありな気がします。

インデックスリストに表示させる記事数を調整して完了

 広告が入ったことにより記事の並び方が変わったので、表示が綺麗に偶数個で終わるよう、インデックスリストの記事数を変更します。設定場所は、[設定] → [表示設定] の中の「1ページに表示する最大投稿数」です。

 うちの場合は、もともとインフィード広告をひとつ出す時に記事数を1減らしていたので、これをデフォルトの10に戻します。今回追加の広告分とあわせて、これでちょうど1段増えて記事3・広告・記事4・広告・記事3という並びになる計算です。ついでにRSSフィード内の最新投稿数も同じ10に設定。これで完了です。

コメント