Google AdSenseなどの広告をほぼ全てのページに入れているWebサイトで、特定のページのみ広告を表示しないための方法を記します。
目次
特定のページのみ広告を表示しない理由
WordPressでブログを書いている場合、Google AdSenseによる広告について言えば、大抵のケースでは
- 全部の投稿に広告が入っている
- 広告が全く入っていない
のどちらか両極端になると思います。ただ、その中間としてほとんどの投稿に広告が入っているが、あえて一部のページだけ広告を入れないようにするケースも考えられます。例えば次のような場合はAdSenseの広告が入らないようにするのが良いでしょう。
- 管理者の紹介ページなど、広告を入れるのがふさわしくないページの場合
- AdSense以外の広告を別途入れているページの場合(AdSense側にアクセスが流れるのを防ぎたい)
特定のページのみ広告を表示させない方法
上記のようなケースで、特定のページに広告が表示されるのを防ぐ方法を考えてみました。なおGoogle AdSenseの広告を前提としています。
AdSenseの自動広告を使用している場合
Google AdSenseには「自動広告」という機能があり、これをONにすると記事の中で広告を入れる場所を指定しなくても、適当な場所に自動的に広告を挿入してくれます。この機能による広告については、AdSenseの管理画面から除外する条件を指定できます。条件の指定方法としては、URLの完全一致の他に、同じURL接頭辞を含むページを広告の表示対象から除外することができます。
https://support.google.com/adsense/answer/9262311?hl=ja
広告を各ページに手動で埋め込んでいる場合
この場合は非常に簡単です。そのページに広告を埋め込まなければ良いです。
「Cocoon」テーマを使用している場合
WordPressでCocoonというテーマを使用している場合、管理画面のCocoon 設定 > 広告タブの下の方に「広告除外設定」というものがあります。そこに広告を出したくないページのIDをカンマ区切りで入力して保存すれば、当該ページでは広告が出なくなります。
テーマをカスタマイズして全ページに広告コードが埋め込まれている場合
このケースが果たしてどれだけあるか分かりませんが、WordPressのテーマエディタで各ページの.phpファイルを直接編集して広告コードを入れ込んでいる場合、広告コードを入れ込んでいる箇所の前後にif文による条件分岐を付けて、表示するか否かを決めるのが単純です。
if文でスラッグやURLと比較するのが一番単純そうな実装方法です。しかし対象ページが複数件になると、特にURLで比較している場合は判定するべきURLが増えてしまうため、if文がかなり長くなってしまう可能性があります。そのため、広告を表示しないことを表すタグを作成し、そのタグが含まれているかで広告の表示可否を判定するのが良いと思います。
タグを作成する
広告を非表示にするタグとして「no-ad」というタグを作成します。(仮に「no-ad」という名前にしましたが、この名前は何でも良いです)
タグの有無を判定する
当初、get_tags()などを使って当該ページのタグの一覧を取得してから「no-ad」タグの有無を判定しようと考えていましたが、戻り値がタグの文字列のリストではなく、タグのオブジェクトのリストだったりしたので、if文を一行で書くのが面倒に感じました。JavaScriptやPythonであれば、リストに対する高階関数を使って一行で書けそうですが、私はPHPは詳しくないので、PHPではコードをあまり書きたくありません。
調べていくと、has_tag()という関数があり、タグ名を渡すことで当該タグの有無がtrue / falseで返ってくることが分かりました。これを使って広告を入れている箇所のコードを括ってやれば、「no-ad」タグの有無で広告の非表示/表示を分けることができます。最終的にはこのようなイメージになります。
<?php if (!has_tag('no-ad')) : ?> <!-- ここに広告のコードが入る --> <?php endif; ?>