a-ki blog

見たこと、聞いたこと、考えたこと。

[WPめも] 記事中にアドセンスを表示する

MTで簡単にできたのにWPになって戸惑ったことが幾つかあって、その一つがthe_content()の扱い。

通常、記事を表示させるだけなら<?php the_content();?>と記述すれば済むので簡単といえば簡単だけど、例えば記事中にアドセンスを自動的に挿入したいときはどうしたらいいのかわからない。

調べてみるとなんとそれ用のプラグインが用意されてた。(みんな考えること同じなのね)

Master Post Advert

これ入れるだけ設定も簡単♪

ただしこれも一つ問題が無いわけではない。

アドセンスは記事の内容によって表示させてはいけない場合がある。たとえばアダルトな話題やお酒の販売ページなど。お酒の広告を貼っている場合などもちょっとグレーゾーン。

MTのときはカスタムフィールドでフラグをつくりPHPの条件分岐を使って制御していたのだけど、Master Post Advertの広告タグ設定フィールドにPHPタグを挿入しても動作しなかった。

おそらくJavascriptを使えばいいんだろうけど残念ながら僕にはよくわからない。

で、get_the_content()を使って直接書き換えることにした。

まず、カスタムフィールド。

WPのカスタムフィールドはMTほど柔軟性がないのでAdvanced Custom Fieldsというプラグインを追加。

「アドセンス非表示」というチェックボックスを作ってチェックが入っているときは表示させないようにする。

<?php
//記事の内容を取得
$content = get_the_content();
//タグを整える
$content = apply_filters('the_content', $content);
//#more-**の前に広告を挿入
$ads="アドセンスのソースコード"."n<span id="more-";
//カスタムフィールドで設定したフラグに従って表示
$flag = get_field('ads');
if(!$flag[0]){
  $content=str_replace('<span id="more-',$ads,$content);
}
echo($content);
?>

こんな感じでOK
get_the_content()で取得した記事内容はPタグで整形されていないので必ずapply_filters()通す。
アドセンスのソースコードの「”」をエスケープすることも忘れずに。

「続きを読む」の部分は<span id=”more-記事ID”></span>となっている。
「続きを読む」の後に広告を挿入したければpreg_replaceを使って正規表現で置換すればいいけど面倒そうなので諦めた。