WordPress本文中の[ad]とショートコードを書き込んだ部分に広告を表示するカスタマイズ方法

以前、AdSense広告の表示可能ユニット数は3つまででした。

それが、2016年8月頃から、広告ユニット数の上限は廃止されました。

以前は、こんな規約だったのが、

1 ページに配置可能な広告の上限
現在、AdSense で 1 ページに配置可能なコンテンツ向け AdSense ユニット、リンクユニット、検索ボックスの上限はそれぞれ次のとおりです。
コンテンツ向け AdSense ユニットは 3 つまで
リンクユニットは 3 つまで
検索ボックスは 2 つまで

こんな感じに書き換えられました。

広告や有料の宣伝用資料は、配信するページのコンテンツよりも多くなってはならないものとします。また、コンテンツは、ページを訪れるユーザーの関心に合った、価値ある情報を提供するものでなければなりません。そのため、ユーザーにとって価値がほとんどないページでの広告配信と広告の過度な表示は、修正が行われるまで制限または無効にされる場合があります。

参考 広告の配置に関するポリシー – AdSense ヘルプ

これにより、コンテンツ量に見合った広告数であれば、自由に広告を貼り付けられるようになりました。

その後、投稿本文中に何個も広告を表示させているWordpressサイトもかなり見かけるようになってきました。おそらく「本文中でもコンテンツ量に応じて適切に広告を表示したい」という需要が出てきたのだと思います。

そういった需要もあってか、先日フォーラムの方にも以下のような書き込みがありました。

アドセンスコードを各記事別に自分の入れたい場所に挿入できる機能を希望します。
アドセンスコードを各記事のHTMLに直接貼り付けることも不可能ではありませんが、そうするとスマホとPCで別の広告を表示するという事が出来なくなってしまいます。
可能であれば、記事内にショートコードを挿入することでスマホにはスマホ用のアドセンスコード、PCにはPC用のアドセンスコード、が自動的に挿入できるような機能を追加していただきたいです。

確かに「本文中自由に広告を表示したい場合」は、こういった機能があると便利そうなので、試しにコードを書いてみました。

以下で紹介するカスタマイズ方法は、ほぼ全てのテーマで利用できる方法かと思います。
スポンサーリンク
レクタングル(大)広告

主な手順

上記のような機能を実装する主な手順としては、以下のようになります。

  • functions.phpにショートコードを広告にするコードを書く

機能を実装するだけなら、コードをコピペして、アドセンスコードを貼り付けるだけでできます。

functions.phpにショートコードを広告にするコードを書く

機能を実装するには、以下のコードをfunctions.phpに貼り付けます。

//[ad]ショートコードに対して広告を表示する
function replace_ad_shortcode_to_advertisement_ex($the_content){
  $ad_shortcode = '[ad]';
  $ad_code = <<< EOF
<div>スポンサーリンク</div>
//////////////////////////////////
//ここにアドセンスタグを挿入する//
//////////////////////////////////
EOF;
  $the_content = preg_replace('{^(<p>)?'.preg_quote($ad_shortcode).'(</p>)?$}m', $ad_code, $the_content);
  return $the_content;
}
add_filter('the_content', 'replace_ad_shortcode_to_advertisement_ex');

その後、以下の部分にAdSenseコードを貼り付けるだけです。

//////////////////////////////////
//ここにアドセンスタグを挿入する//
//////////////////////////////////
本文中に広告を入れることになるので、「スポンサーリンク」と書かれたラベルは削除しない方が良いかと思います。これは、AdSenseポリシーに準じてコンテンツと広告を明確にするためでもあります。
上記のコードではPCとモバイル広告は区別されないため、レスポンシブユニットコードを入れても良いかと思います。

その後、管理画面のエディターで本文を書く際、以下のように広告を表示したい箇所に[ad]と挿入します。

Wordpressエディターにショートコードを貼り付ける

[ad]ショートコードは、1行まるまる使って[ad]と入力してください。これは、文章内に[ad]というテキストを使っていたとしても、広告に変更しない処置です(誤置換防止)。

投稿後、ページを表示すると本文部分では、以下のように広告が表示されます。

[ad]と書き込んだ部分に広告を表示する

上記記入例は、あくまで例なので、コンテンツ量にみあった広告量にしてください。でないと、アドセンスポリシー違反になる可能性があります。詳しくは広告の配置に関するポリシーを参照。

パソコンとモバイルで広告を分けて表示する

パソコンとスマホなどで、広告を分けて表示させたい場合は、以下のコードをfunctions.phpに貼り付けます。

//[ad]ショートコードに対して広告を表示する
function replace_ad_shortcode_to_advertisement_ex($the_content){
  $ad_shortcode = '[ad]';
  $ad_code_pc = <<< EOF
<div>スポンサーリンク</div>
//////////////////////////////////
//ここにPC用のタグを挿入する    //
//////////////////////////////////
EOF;
  $ad_code_mobile = <<< EOF
<div>スポンサーリンク</div>
////////////////////////////////////
//ここにモバイル用のタグを挿入する//
////////////////////////////////////
EOF;

  if (wp_is_mobile()) {
    $ad_code = $ad_code_mobile;
  } else {
    $ad_code = $ad_code_pc;
  }

  $the_content = preg_replace('{^(<p>)?'.preg_quote($ad_shortcode).'(</p>)?$}m', $ad_code, $the_content);
  return $the_content;
}
add_filter('the_content', 'replace_ad_shortcode_to_advertisement_ex');
Googleとしては、パソコンとモバイル等でソースコードが変わらないレスポンシブ表示を推奨しています。

上記コードを利用すると、パソコン表示時は、パソコン用のコードが表示されます。

パソコンではパソコン用のコードが表示される

モバイル端末で表示時は、モバイル用のコードが表示されます。

モバイル端末ではモバイル用のコードが表示される

まとめ

こんな感じで、手軽にWordpressの投稿本文中に広告を挿入できるショートコード機能を追加できます(厳密に言うとWordpressのショートコード機能は利用していないけど)。

ただ、前述しましたがAdSenseポリシーには、以下の記述があります。

広告や有料の宣伝用資料は、配信するページのコンテンツよりも多くなってはならないものとします。

Google側が、「コンテンツに見合った広告量ではない」と判断した場合は、警告もしくは、アドセンス停止の可能性もあり得ると思うので、利用の際はAdSense プログラム ポリシーを踏まえた上でご利用ください。

『WordPress本文中の[ad]とショートコードを書き込んだ部分に広告を表示するカスタマイズ方法』へのコメント

  1. 名前:比呂 投稿日:2017/09/12(火) 09:27:37 ID:744c7603f

    大変お忙しい中失礼致します!
    ここで紹介して頂いたソースコードはGooleアドセンスだけ使えるのでしょうか?
    それとも他の広告でも使えるものなのでしょうか?

    一応他の広告で試してはみたのですが反映されなかったので質問させて頂きました。
    宜しくお願いします。

  2. アバター画像 名前:わいひら 投稿日:2017/09/12(火) 11:15:16 ID:18b479552

    アドセンスに限らず、大抵の広告(HTMLタグを貼り付ける広告)であれば、表示はされると思います。

  3. 名前:比呂 投稿日:2017/09/12(火) 12:16:36 ID:744c7603f

    わいひらさん お忙しい中申し訳ございませんでした!
    1行として投稿していないのが原因でした。
    無事googleアド以外も表示出来ました。
    ありがとございました!

  4. 名前:美遊☆彡 投稿日:2017/12/31(日) 13:19:27 ID:2841dc82b

    できました。ありがとうございます。

  5. 名前:よし 投稿日:2019/06/05(水) 21:14:04 ID:b8280b728

    お忙しいところ恐れ入ります。
    こちらの「パソコンとモバイルで広告を分けて表示する」のコードを使って3種類の広告をショートコードで表示させたいのですが、うまくいきません。

    記事の上の方と中間と記事下の3箇所に違うアドセンス広告を載せたいんです。
    単純にコピペで3つ並べて、[ad]をそれぞれ[ad1][ad2][ad3]とやってみたんですが、「replace_ad_shortcode_to_advertisement_ex($the_content)の宣言は1回しか使えない」といった主旨のエラーが出てしまいます。

    どこを変更したらいいのかわからないのでご教授いただけると助かります。

  6. アバター画像 名前:わいひら 投稿日:2019/06/06(木) 12:49:35 ID:5bd03cc97

    関数名は、重複してはいけません。
    別名をつけて定義する必要があります。
    そして、それぞれadd_filterでフック処理も書く必要があるでしょう。

    こちらの「パソコンとモバイルで広告を分けて表示する」のコードを使って3種類の広告をショートコードで表示させたいのですが、うまくいきません。

    上で書かれたカスタマイズだと、今回の記事と多少趣旨が変わってきます。
    実際に、どのようなコードを書かれたかはわからないので、僕もカスタマイズを完全に把握できるわけではありません。
    コード利用もですが、変更して利用する際も出来る限り自己責任でお願いいたします。

  7. 名前:よし 投稿日:2019/06/06(木) 15:40:02 ID:eec9e9748

    わいひらさん、お返事ありがとうございます。
    一応自己解決しましたので参考までに。

    ちょっと説明がわかりにくくてすみません。
    >どのようなコードを書かれたかはわからないので
    「パソコンとモバイルで広告を分けて表示する」の見出しの記事にあるコードを、記事中に3ヶ所書いただけです。
    それぞれにアドセンスの「レクタングル大」や「レスポンシブ」、「リスト広告」などの違う種類の広告を表示させたかったんです。

    >function replace_ad_shortcode_to_advertisement_ex($the_content){
    ショートコードを「ad1」「ad2」「ad3」として、このコードの”_ex”のところを”_ex1””ex2””ex3”としたら表示されました。

    >add_filter(‘the_content’, ‘replace_ad_shortcode_to_advertisement_ex’);
    一番最後の行の”_ex”の部分も同様にしました。

    あってるかわかりませんが^^;

  8. アバター画像 名前:わいひら 投稿日:2019/06/07(金) 23:31:51 ID:13a80ba12

    関数名の重複を回避して、フックを加えているので、それで問題ないと思います。
    自己責任のくだりは、もし同様の変更したとして仮に不具合が出たとしたら、こちら側からPHPの問題は見ることができず原因の特定はできないので、一応書かせていただいた次第です。
    うまくいったのであれば良かったです^^