WordPress投稿本文中のmoreタグをアドセンス等広告に置換する方法

サブサイトのフォーラムで以下のような質問がありました。

実は、moreタグ部分にプラグインなしでアドセンスを表示したく、色々探してみたところ、…(中略)

プラグインなしでmoreタグにアドセンスを表示させることはできますでしょうか?

moreタグにプラグインなしで広告を表示するには?

てことで、今回は「プラグインを使わずWordpressのカスタマイズでmoreタグを広告に置換する方法」の紹介です。

スポンサーリンク
レクタングル(大)広告

moreタグとは

とその前に、moreタグの簡単な説明をしておきます。

WordPressには、一覧ページなどで「続きを読む」を表示させるmoreタグという機能があります。

投稿管理画面のテキストエディターでは、「more」ボタンを押すと<!–more–>と入ります。

moreタグボタンを押すとタグが入る

ビジュアルエディターだとビジュアルエディターのmoreタグボタンボタンのやつです。

ビジュアルエディターんのmoreタグボタンをクリック

これにより、インデックス(一覧)リストなどで投稿が表示された際には、「続きを読む」と出てmoreタグ以降が表示されなくなる仕様です。

moreタグを挿入したリスト画面

それで、個別の投稿ページを表示させると、moreタグ以降も全文が表示されます。moreタグ以降の本文も表示される

投稿ページには、当然ながらmoreタグらしきものは表示されていませんが、moreタグがあった部分には、以下のようなHTML要素が挿入されています。

<p>WordPressの投稿本文の前文です。</p>

<p><span id="more-87"></span></p>

<p>ここから投稿内容の本題に入ります。</p>

moreタグがあった部分には「<p><span id=”more-[投稿ID]”></span></p>」といったようなHTML要素が挿入されます。

今回は、このタグを本文から置換することで「moreタグ」を「アドセンス等の広告」に変更する方法を紹介したいと思います。

moreタグを広告に置換する方法

その方法は非常に簡単で、テーマのfunctions.phpに以下を追記でコピペするだけです(子テーマを利用している場合は子テーマのfunctions.phpにコピペしてください)。

//本文中の<!--more-->タグをアドセンスに置換
function replace_more_tag($the_content){
    //広告(AdSense)タグを記入
    $ad = <<< EOF
//////////////////////////////////
//ここにアドセンスタグを挿入する//
//////////////////////////////////
EOF;
  $the_content = preg_replace( '/(<p>)?<span id="more-([0-9]+?)"><\/span>(.*?)(<\/p>)?/i', "$ad$0", $the_content );
  return $the_content;
}
add_filter('the_content', 'replace_more_tag');

functions.phpにコードを貼り付けたら、以下の部分をアドセンスコード(もしくはその他の広告コード)に変更してください。

//////////////////////////////////
//ここにアドセンスタグを挿入する//
//////////////////////////////////
「$ad = <<< EOF」から「EOF;」の間の行頭に空白文字(スペースやタブ)が入っていると、エラーが出る可能性があるので、取り除いてください。

動作確認

このカスタマイズを行うことにより、投稿ページで以下のようなmoreタグが入っている箇所があると

moreタグを置換していない状態

以下のように、広告に置換して表示してくれます。moreタグを広告に置換した後の状態

まとめ

こんな感じで、基本的にコピペのみでmoreタグを好きな広告に変更するカスタマイズを行うことができます。

もちろん、広告のコード部分を別のものに入れ替えれば、好きなものをmoreタグと置換して表示させることもできます。使い方次第でいろいろと応用はきくかと思います。

ということで「記事を書くたびに、moreタグを挿入しているけど何か有効活用したい」なんて場合は、試してみると良いかもしれません。逆に言えば、普段からmoreタグを使用していない場合には、あまり意味のないカスタマイズともいえます。