Wordpressサイトでfunctions.phpにコードを追記して記事中の見出しタグ(H2,H3)の手前に広告を自動挿入することは良くあります。
コード自体は有名で調べればすぐに出てくるのですが、定番の目次プラグインである「Easy Table of Contents」を使っていると、この広告がH2やH3の手前ではなく"目次の上"に表示されてしまうことがあります。
この広告の表示位置を目次の上から見出し(H2タグ)の上に変更する方法です。
コードの優先順位が目次プラグインに勝っているのが原因です。
目次の上に出る広告を目次の下に変更する
Wordpressではfunctions.phpを使うことで、記事中の見出し(H2,H3タグ等)の手前に任意の広告を自動挿入することができます。
コードについて詳しくは触れませんが、例えば以下のようなコードですね。
//1つめのH2タグの上に広告を自動挿入する function add_ads_before_1st_h2($the_content) { if (is_single()) { $ads = <<< EOF ~ここに広告のコード~ EOF; $h2 = '/<h2.*?>/i'; if ( preg_match( $h2, $the_content, $h2s )) { $the_content = preg_replace($h2, $ads.$h2s[0], $the_content, 1); } } return $the_content; } add_filter('the_content','add_ads_before_1st_h2',10);
コードの種類は複数あり、全てのH2の上に広告を挿入したり、1つめのH2タグの上にだけ広告を挿入するといったこともできるので使っている人は多いと思います。
今回、このようなコードと目次プラグインの「Easy Table of Contents」を併用すると目次の上に広告が表示されました。
この場所も定番の表示位置ではありますが、この表示位置を目次の下、H2タグの上にしたかったのでコードを変更することで対処しました。
原因はコードとプラグインの優先順位
H2の真上ではなく、目次の上に広告が表示される原因はコードの優先順位です。
functins.phpにあるコードの広告表示位置と、Easy Table of Contentsが目次を表示する位置はどちらも最初の見出しタグの上(H2タグの上)となっています。
このように表示位置が被っている時は、関数の優先順位が高い方から表示されます。
この優先順位がfunctions.phpのコードよりもプラグインの方が低く設定されていることが目次の上に広告が表示されてしまう原因です。
H2上に広告が表示された後、目次が表示される状態になっているのです。
という事でコードの優先順位をプラグインよりも高くすれば解決します・w・
コードの優先順位を変更する方法
コードの優先度を低くするにはadd_filter
の引数を変更すればOK!
function add_ads_before_1st_h2($the_content) { ~コードの内容ほげほげ~ } //↓add_filterの引数を初期値10から(9999などに)変更する add_filter('the_content','add_ads_before_1st_h2',9999);
具体的にはadd_filter('xxx','yyy',ここを大きな値に変更する);
という感じです。
add_filterには実行順の設定があり、初期値は10です。
この数字を大きくし、目次プラグインが実行されてからfunctions.phpにあるコードが実行されるように変更すれば広告の表示位置が変更されます。
優先度の変更は「広告表示→目次表示」という流れから「目次表示→広告表示」という流れに変更することになります。
これで目次の上に出ていた広告が見出し(H2)の上に表示されるようになりました。
なお優先度の説明はWordPress Codexにもあります。
$priority
(整数) (オプション) フィルターフックに登録された関数の中で、この関数を実行する順序。数値が小さいほど早く実行し、同じ数値の場合は追加された順に実行する。
初期値: 10
今回の挙動をみると、Webページに何かを描写する場合はコードの実行順にページの上から下へと描写されるということになりますね。
Easy Table of Contentsの順序設定値は100?
最後に「Easy Table of Contents」の優先度設定はいくつなのか調べてみました。
コードを眺めると時間がかかるのでfunctions.phpを触って広告の表示位置の確認を繰り返したところ、Easy Table of Contentsの順序設定値は"100"だと思われます。
先ほどのコードでは9999に設定しましたが、101でも同じ結果になりました。
とはいえこの数字は同じか、大きいか、低いか?の3つに意味があるのでギリギリに設定するよりも、ある程度大きな値を設定しておけばそれでよいと思います。
あくまでも執筆時は100が閾値という事を確認できただけで、アップデートで変更される可能性も少なからずあるので、やはり大きめの数字を設定しておきましょう。
まとめ
functions.phpにて見出し(H2)の上に自動挿入した広告が、Easy Table of Contentsで生成した目次の上に表示されてしまう時の対処法でした。
収益性は正直どちらが良いのか分かりません。
うちはViewportに広告が入るのはイヤなので目次の下にしています。
ではではこのへんで・w・