[wordpress]Googleアドセンスを本文中の任意のH2タグ前に挿入する方法

アフィリエイターにとっては欠かせないGoogleアドセンス。シングルページのどこに入れるかって、けっこう重要です。

始めのうちは公式プラグインで挿入していたのですが、「そこに入る!?」とか「なんかこのページ広告少ない!」とか、案外自由が効かないところが悩みのタネでした。Codeタグ内に入ることもあったことが一番悩ましかったです。

なので、シングルページだけではありますが、割とフレキシブルに本文中へ挿入する方法を考えたのでシェアします。

参考にさせていただいたのは、Simplicity作者さんのサイト、寝ログさんの下記ページです。

アドセンスをWordPress記事本文中に配置できる手軽でスマートな方法

改変部分としましては、任意のh2タグ前に挿入できるようにしたことと、複数設置に対応したところです。


スポンサーリンク

1.アドセンスの表示部分を独立テンプレートで作成する

ここのアイデアは寝ログさんに書かれていたところをそのままいただきました。

ただ今回、複数設置にも対応するということで、テンプレートも設置する広告の数だけ用意します。同じテンプレートを読み込んでもいいのかもしれませんが、広告タイプごとのレポートを作成してくれるAdsenceの機能を殺すのはもったいないので。

ファイル名はad-in-body-[任意の数字].phpとしてください。中身は以下の通りです。簡略化しまくっています。

<div class="ad-space">
     [アドセンスコード]
</div>

[アドセンスコード]の箇所に、取得したアドセンスコードを入れてください。

2.function.phpにコードを追加

※function.phpの編集を行う場合は、必ずバックアップを取ってから自己責任で行ってください。少しでもミスがあるとサイトが真っ白になってしまいます。

function.phpに以下のコードを挿入します。

//本文中の任意のH2タグ前にAdsenceコードを挿入

//H2見出しを判別する正規表現を定数にする
define('H2_REG', '/^<h2.*?>.+?<\/h2>/im');

//n番目のH2見出しに広告コードをつけて返す
function add_ads_before_h2_any($the_content,$n,$ad_no){ //$n番目のH2見出し前にad-in-body-$ad_no.phpをインクルード
     if ( preg_match_all( H2_REG, $the_content, $h2results ) >= $n) {//n番目のH2見出しが本文中にあるときだけ挿入
          ob_start();//バッファリング
          get_template_part('ad-in-body-'.$ad_no);//広告貼り付け用に作成したテンプレート
          $ad_template = ob_get_clean();
          --$n;//配列番号は0から始まるため、$nを1減らす
          $the_content = str_replace($h2results[0][$n], $ad_template.$h2results[0][$n], $the_content);
     }
     return $the_content;
}

//フィルターに追加
function add_ads_body($the_content){
     //注意:複数箇所に挿入する場合、後ろから指定する(2番目と5番目なら、5番目→2番目の順で指定)
     $the_content = add_ads_before_h2_any($the_content,5,2);//第2引数で何番目のH2かを指定、第3引数でテンプレート番号を指定
     $the_content = add_ads_before_h2_any($the_content,2,1);//第2引数で何番目のH2かを指定、第3引数でテンプレート番号を指定
     return $the_content;
}
add_filter('the_content','add_ads_body');

導入時に改変する部分としましては、add_ads_bodyの中身です。ここでadd_ads_before_h2_anyという関数を呼び出しております。add_ads_before_h2_any関数では、第2引数が何番目のH2か、第3引数がテンプレート番号(ad-in-body-[任意の数字].phpの[任意の数字])となっております。

これをつらつらと並べれば複数箇所の指定が可能です。が、コメントでも示しておりますが、複数箇所に挿入する場合は後ろから指定してください

若い順にすると、2つめの置換を行うとき、なぜか挿入箇所が後ろへズレてしまうんです。たとえば上記の例で2番目→5番目と指定すると、2番目は正常に挿入されるのに、その次の広告コードは6番目のH2タグ前に挿入されてしまうという…。

preg_match_allの結果でデバッグをかけると、2回目の値が確かに減っています。preg_match_allを2回繰り返すと、一度マッチした箇所は飛ばしてしまう仕様なのかもしれません。探してみましたが確証を得られる情報はなく…。

後ろから指定するようにすると正常に動くようになったので、おそらく推測は大きく外れてはいないと思います。詳しい方がいらっしゃればアドバイス頂けますと嬉しいです。。いずれにせよ、function.phpの編集は自己責任で行っていただくようお願い致します。


スポンサーリンク

3.style.cssを編集

アドセンスは周りと適切なスペースを取っていないと怒られる。というわけで、style.cssに以下のコードを書きます。

.ad-space{
     display: block;
     margin: 15px auto;
     text-align: center;
}

15pxでいいのだろうかとドキドキしていたりします。もっと開けたほうがいいよ!ということがあれば、ご指摘いただけますと幸いです。

この投稿の投稿者は おさみ です。ブックマーク用 パーマリンク

スポンサーリンク