H2(見出し)の上に表示したい広告が目次の上に表示される…表示位置を目次の下に変更する方法。

H2見出し上の広告が目次の上に出る-functions.php_eyecatch

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見出し上の広告が目次の上に出る-functions.php_001

H2上ではなく、目次の上に広告が挿入される

この場所も定番の表示位置ではありますが、この表示位置を目次の下、H2タグの上にしたかったのでコードを変更することで対処しました。

原因はコードとプラグインの優先順位

H2の真上ではなく、目次の上に広告が表示される原因はコードの優先順位です。

H2見出し上の広告が目次の上に出る-functions.php_002

Easy Table of Contentsの設定画面

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見出し上の広告が目次の上に出る-functions.php_003

見出し(H2)の上に広告が出るようになる

優先度の変更は「広告表示→目次表示」という流れから「目次表示→広告表示」という流れに変更することになります。
これで目次の上に出ていた広告が見出し(H2)の上に表示されるようになりました。

なお優先度の説明はWordPress Codexにもあります。

$priority
(整数) (オプション) フィルターフックに登録された関数の中で、この関数を実行する順序。数値が小さいほど早く実行し、同じ数値の場合は追加された順に実行する。
初期値: 10

引用元:関数リファレンス/add filter - WordPress Codex 日本語版

今回の挙動をみると、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・

-WordPress
-

site-logo
ありがとうございました!
良かったらシェアしてネ・w・
当サイトはピンバックを受け付けます。
  • この記事を書いた人
ザキ

ザキ

X:@sologaku

プログラミングに興味があり情報系の大学を卒業。

新卒で社会人になるも数年で退職し今はフリーランスとして生きています。

少しでも誰かの役に立てれば...と思い、当サイトでIT関係のハウツーを発信しています。


ソロ学運営者:ザキの自己紹介

© 2020 sologaku