h2の直前に広告を配置する方法【アドセンスの自動広告がめちゃくちゃ過ぎ】



当サイトの分家「旅行と食べ歩き」のGoogleアドセンスを自動広告のみにしてみたら、「どうしてそこに広告を入れるのか?」といった場所で表示されるので、自動広告はやめて「文中の見出し<h2>の直前に広告を配置」してみました。

まずはアドセンス広告を作成

Googleアドセンス→広告→「広告ユニットごと」から作成します。
おすすめは「ディスプレイ広告」もしくは「記事内広告」。

文中の見出しh2の直前に広告を配置

記事内広告を手動で全ての箇所に配置するのは大変なので、「functions.php」にコードを書いて表示させました。

当サイトでは「2番目のh2」「4番目のh2」「6番目のh2」の前に配置してあります。

//h2見出し前に広告を設置
function add_ad_before_h2_for_3times($the_content) {
$ad = <<< EOF
//ここにアドセンスコードを挿入
EOF;

if ( is_single() ) {
$h2 = '/^<h2.*?>.+?<\/h2>$/im';//H2見出しのパターン
if ( preg_match_all( $h2, $the_content, $h2s )) {
if ( $h2s[0] ) {
if ( $h2s[0][1] ) {//2番目のH2見出し手前に広告を挿入
$the_content = str_replace($h2s[0][1], $ad.$h2s[0][1], $the_content);
}
if ( $h2s[0][3] ) {//4番目のH2見出し手前に広告を挿入
$the_content = str_replace($h2s[0][3], $ad.$h2s[0][3], $the_content);
}
if ( $h2s[0][5] ) {//6番目のH2見出し手前に広告を挿入
$the_content = str_replace($h2s[0][5], $ad.$h2s[0][5], $the_content);
}
}
}
}
return $the_content;
}
add_filter('the_content','add_ad_before_h2_for_3times');

Cocoon開発者の寝ログさんのコードを参考にさせていただきました
テーマ:ルクセリタスでも問題なく表示されています。

ただし、PHP 8の場合はエラーになるので対策が必要です。

PHP 8でエラー発生 Warning: Undefined array key【解決】