WordPressでブログ運営をしていると、記事の途中に広告を自動で挿入したいケースがあります。手動で毎回挿入するのは手間ですが、フィルターフックを使えば自動で広告を埋め込むことができます。
the_contentフィルターを活用する
WordPressでは投稿本文の出力時にthe_contentフィルターが適用されます。これを利用して、特定の位置に広告コードを挿入する処理を追加します。
広告を挿入するカスタム関数の作成
以下のコードをfunctions.phpに追加することで、投稿本文の2番目の段落の後に広告を自動挿入することができます。
functions.php:段落単位での広告自動挿入
function insert_ad_to_content($content) {
if (is_single() && in_the_loop() && is_main_query()) {
$ad_code = '<div class="ad-box">ここに広告コード</div>';
$paragraphs = explode('</p>', $content);
// 末尾の要素(最後の</p>より後ろの部分)を取り出しておく
$last = array_pop($paragraphs);
// 各段落の断片に</p>を個別に復元する
foreach ($paragraphs as &$p) {
$p .= '</p>';
}
unset($p);
if (count($paragraphs) > 2) {
// 2つ目の段落のあとに、独立した要素として広告を挿入
array_splice($paragraphs, 2, 0, array($ad_code));
}
// 各断片は既に</p>を含んでいるので空文字で結合する
$content = implode('', $paragraphs) . $last;
}
return $content;
}
add_filter('the_content', 'insert_ad_to_content');
explode→array_splice→implodeの組み合わせは不正なHTMLを生成する
explode('</p>', $content)で分割した配列にarray_splice()で広告コードを挿入したあと、単純にimplode('</p>', $paragraphs)で再結合すると、広告挿入条件(段落が3つ以上)を満たすたびに毎回確実に不正なHTMLが生成されます。implode()はすべての要素間に無条件で</p>を挿入するため、広告の<div>タグ(それ自体で完結している要素)の直後にも開始タグのない孤立した</p>が付いてしまうためです。上記コードでは、各段落の断片に</p>を個別に復元してから広告を独立した要素として挿入し、最後に空文字で結合することでこの問題を回避しています。広告コードのカスタマイズ
$ad_codeの中には、Google AdSenseの広告タグやアフィリエイトバナーなどを自由に記述できます。CSSでスタイルを整えることで、見た目も調整可能です。
CSSで広告の見た目を整える
たとえば以下のようにCSSを記述すると、広告枠に枠線や余白をつけることができます。
style.css:広告枠のスタイル
.ad-box {
margin: 30px 0;
padding: 15px;
border: 1px solid #ccc;
text-align: center;
}
よくある質問(FAQ)
Q記事本文の指定段落目の後に広告コードを自動挿入するには?
Athe_contentフィルターでexplode(‘
‘, $content)で段落分割し、各断片に
を復元してから指定位置に広告HTMLを独立した要素として挿入し、空文字でimplodeします。単純にimplode(‘
‘, $parts)で結合すると、広告の要素の直後に孤立した
が生成されるので注意してください。
Q特定のカテゴリーやページには広告を表示しない設定は?
Athe_contentフィルターのコールバック内でin_category()・is_page()等で条件確認し、広告を挿入しない場合は元の$contentをそのまま返します。
QGoogleAdSenseのauto adsとWordPress手動挿入の組み合わせ方は?
AAuto adsを有効にしつつ、特定位置への手動挿入も追加できます。重複表示にはならずAuto Adsが最適な位置に追加します。広告の表示しすぎでユーザー体験を損なわないよう、AdSenseの広告配置に関するポリシーも確認してください。
まとめ
投稿本文に自動で広告を挿入することで、手動作業を省きながら広告収益を効率的に得ることができます。the_contentフィルターを活用すれば柔軟なカスタマイズも可能ですが、文字列分割で段落を操作する場合はHTMLの整合性が崩れないよう注意し、サイトの構成に応じて調整してみてください。

