Google Adsenseの広告をh2タグごと、つまり見出し単位で自動的に表示する方法です。
よく採用されてる方法ですが、Google Adsense自体の自動広告を利用するよりもデザインの崩壊を防げます。
導入にはfunctions.phpを改造します。
また、自分自身のインプレッション数のカウントを防ぐため、別記事で紹介したダミー広告の仕組みも利用します。
以下の記事を読んだ前提で説明しますので、仕組みが不明な人は先に次の記事を読んでください。
Google Adsenseで自分自身に広告を表示しない方法です。Google Adsenseの収益はクリック数またはインプレッション数の仕組みが採用されてます。自クリックは論外として、実はインプレッション数でも収益が発生し、雀の涙みたいな金額が貰えます。貰ってる身分で良く言えますね。サーバー代にもならんわ。[20240531] 収益化の仕組みが変更既にGoogle Adsenseの収益基準はクリック単価からインプレッション単価に切り替わっています。よって、自分で...
◆ 安全にfunctions.phpをカスタマイズする方法
functions.phpの修正に不安がある人は以下を参考にしてください。
functions.phpを直接修正するのは不具合時の対処やテーマ更新時に大変ですよね。それでも手間を減らす方法もあり、ここで紹介する方法と以下の記事の内容でそこそこ安全に改造できます。拡張用のfunctions.phpを新規作成する最初にカスタマイズ用のコードを記述するためのphpファイルを作成します。配置するディレクトリとファイル名は好みで大丈夫です。とりあえず、ここではfunctions.phpと同じディレクトリにextend-functions.phpとして作成し...
コードを追加する
functions.phpとかに以下のコードを追加します。
// GoogleAdsense: H2タグの手前に広告を追加
add_filter( 'the_content', function( $content ) {
$max_ad = 8; // 表示する最大広告数
$interval = 2; // 広告を表示する間隔
$current = 0; // 初期値(カウントアップされて0の時に広告が表示される)
if ( $max_ad == 0 ) {
return $content;
}
$ad = <<< EOF
<!-- ここにGoogle Adsense用の広告スクリプトを書く -->
EOF;
$dummy = <<< EOF
<div>
<img src="ここに画像のパスを書く" width="100%" height="auto" />
</div>
EOF;
$code = !current_user_can('administrator') ? $ad : $dummy;
$ad_output = <<< EOF
<div>
{$code}
</div>
EOF;
$ad_count = 0;
if ( is_single() && !is_attachment() ) {
if ( preg_match_all( '/<h[2][^>]*>.*?<\/h[2]>/is', $content, $h2s ) ) {
foreach( $h2s[0] as $h2 ) {
if ( $current == 0 ) {
$content = preg_replace( '/' . preg_quote($h2, '/') . '/', $ad_output . $h2, $content, 1 );
$ad_count++;
if ( $ad_count >= $max_ad ) {
break;
}
}
$current++;
$current %= $interval;
}
}
}
return $content;
}, 1024 );
見出しの上に広告が表示されるので、横長かレスポンシブ対応の広告種類を採用するといいと思います。
後、優先度を下げて他の処理よりも後処理で実行されるようにしてます。これに関しては好みですかね。
仕組み
記事内の文字列からh2タグを検出して、そのタグの直前に広告用のスクリプトを自動追加してます。
正規表現を修正すればh2タグ以外も対象になりますが、広告の出し過ぎも規約違反に触れるためh2のみを推奨します。
正規表現の条件を変更したい場合は'/<h[2][^>]*>.*?<\/h[2]>/is'の内容を変えてください。
設定値
コードの上部に存在する3つの変数を変更すると、少しだけ広告の出し方を調整できます。
$max_ad | 表示する最大広告数 |
$interval | 広告を表示する間隔 |
$current | 初期値(カウントアップされて0の時に広告が表示される) |
$max_adは自動的に表示する広告の最大数、$intervalは1回広告を表示したら次の広告を表示するまでの間隔です。
つまり、$intervalに2と書けば、h2見出しが2個出現するごとに広告が表示されます。
$currentは分かりづらいと思いますが、これは見出しが出現するたびにカウントアップされ、広告を表示すると0に戻ります。
そして、その値の初期値が設定できます。つまり、1と書くと1つ分だけ広告を表示する見出し位置がズレます。
例$max_ad = 3, $interval = 2, $current = 1の場合、2個目の見出しから2個間隔で最大3つの広告が表示されます。
あとがき
実はこの仕組みですが現在は無効化してます。理由は記事の途中に広告が表示されて鬱陶しいからです。
今は記事の上部とか特定位置に表示する方法を採用してますが、記事内に表示するならGoogle側の自動広告を利用するよりもマシなデザインになります。
全画面以外の自動広告はサイトのデザインが崩壊するから嫌。
このサイトは左右に空きが無いから仕方ないね。
この記事は参考になりましたか?
コメント