広告を本文見出しH2の手前にそれぞれ配置してくれる寝ログ様の記事からのコードを
活用させていただいた。
そのコードがコレ。
1,2,3番目のH2タグの前にそれぞれ別の広告タグを挿入してくれます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
function add_ad_before_h2_for_3times($the_content) { //1つ目の広告タグを挿入 $ad1 = <<< EOF ////////////////////////// //ここにアドセンスを挿入// ////////////////////////// EOF; //2つ目の広告タグを挿入 $ad2 = <<< EOF ////////////////////////// //ここにアドセンスを挿入// ////////////////////////// EOF; //3つ目の広告タグを挿入 $ad3 = <<< EOF ////////////////////////// //ここにアドセンスを挿入// ////////////////////////// EOF; if ( is_single() ) {//投稿ページ $h2 = '/^<h2.*?>.+?<\/h2>$/im';//H2見出しのパターン if ( preg_match_all( $h2, $the_content, $h2s )) {//H2見出しが本文中にあるかどうか if ( $h2s[0] ) {//チェックは不要と思うけど一応 if ( $h2s[0][0] ) {//1番目のH2見出し手前に広告を挿入 $the_content = str_replace($h2s[0][0], $ad1.$h2s[0][0], $the_content); } if ( $h2s[0][1] ) {//2番目のH2見出し手前に広告を挿入 $the_content = str_replace($h2s[0][1], $ad2.$h2s[0][1], $the_content); } if ( $h2s[0][2] ) {//3番目のH2見出し手前に広告を挿入 $the_content = str_replace($h2s[0][2], $ad3.$h2s[0][2], $the_content); } } } } return $the_content; } add_filter('the_content','add_ad_before_h2_for_3times'); |
ただ単に貼り付けて活用するのも良いが、
コードを元にPHPの理解を深めていくのもいいかも。
ということで、少しづつやっていきたいと思います。
間違いがございましたら、よろしくご教授の程お願いします。
関数の定義
1行目は、functionの構文。
1 |
function add_ad_before_h2_for_3times($the_content) { |
function 関数名(引数){ 処理の内容 }
で表されます。
ですから、
関数名
add_ad_before_h2_for_3times
引数
$the_content
の関数です。
ということになります。
$the_contentとは
いきなり $the_content が出てきますが
これは
$the_content = 記事本文
を意味します。
改行されても大丈夫 ヒアドキュメント
2行目から、広告コードの貼り付け部分。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
//1つ目の広告タグを挿入 $ad1 = <<< EOF ////////////////////////// //ここにアドセンスを挿入// ////////////////////////// EOF; //2つ目の広告タグを挿入 $ad2 = <<< EOF ////////////////////////// //ここにアドセンスを挿入// ////////////////////////// EOF; //3つ目の広告タグを挿入 $ad3 = <<< EOF ////////////////////////// //ここにアドセンスを挿入// ////////////////////////// EOF; |
EOFが目につきますが、実は大切なのは
「 <<< 」 の部分。
これは「ヒアドキュメント」の合図。
「その次に書かれた文字がもう一度出現するまでのすべて」が反映されます。
なので、
変数名=<<< EOF
EOF;
でEOFからEOFまでが改行されていても変数に代入される。
という仕組みです。
慣例で、EOFやEODが使われる。
と認識しておけば良いようです。
ちなみに
EOFは、end of file の略です。
投稿ページに反映させる is_single()
次は
1 |
if ( is_single() ) {//投稿ページ |
is_single というのが出てきました。
これは、条件分岐タグ。
is_single() で、
個別投稿のページが表示されている場合
となります。
if文ですので、
個別投稿ページの場合だけ以下を実行する。
となります。
投稿ページ中のh2見出しをパターン化
1 |
$h2 = '/^<h2.*?>.+?<\/h2>$/im';//H2見出しのパターン |
わけが分からなさそうなのが出てきました。
まず、
$h2=’ ’ で
$h2は文字列と認識されます。
次に、
$h2=’/ /’
で、変数の中身は「正規表現のパターンですよ」となります。
そのパターンとは
^ → 行の初めに
<h2>があって
.+? → 文字列が続いており
</h2>がある。
$ → 行の終わり。
i → 大文字でも小文字でも構わない。
m → 改行されていても構わない。
というパターンです。
\/で、メタ文字である / を文字として認識させています。
.*?は、
.が任意の1文字
*?が前の文字が0個以上かつ最小回数マッチする。
だから
任意の文字が0個以上かつ最小回数マッチしている。
となる。
なので結局は
$h2 = h2見出し
ということに。
見出しだけを全て抜き出す preg_match_all
1 |
if ( preg_match_all( $h2, $the_content, $h2s )) {//H2見出しが本文中にあるかどうか |
新しい命令が出てきました。
preg_match_all
その構文は
preg_match_all(パターンの文字列,検索対象の文字列,結果を収納する配列関数)
です。
ここでは
$h2がパターンの文字列
$the_content が検索対象文字列
$h2sに結果が収納される配列
ということに。
H2見出しが本文中にあれば、配列に見出し内容を収納する
ということですね。
記事本文の中にH2見出しがあれば順次、h2sに全て収納する。
という動作になります。
このとき、$h2sは2次元配列になっていることに注意。
0行目に0列から順に文字列が格納されていきます。
(ちなみに1行目以下は、サブパターンがマッチしたときに格納される)
続きは次回にしたいと思います。
上記のコードがプラグインになっていたら便利かもしれません。
function.php への追加もリスクがあります。
そこで・・・
3種類の広告をそれぞれ
記事の先頭から3つのH2見出しの上に掲載するコードをプラグインにしてみました。
ダウンロードはこちら
↓ ↓ ↓ ↓
<注意>くれぐれも、ご利用は自己責任でお願いいたします。