雨過天晴

プラグインを使っていないページのヘッダから設定JSを消す(Reaction Buttons)

2015.04.07

img from: ICOOON MONO

この記事は2015年4月7日に書かれたものです。古い内容や非推奨要素を含む可能性がありますのでご注意ください。

いわゆる「いいね!」ボタンのプラグイン、Reaction Buttons。
本来「まあまあ」「そこそこ」「あかんわ」など複数のボタンを設置しそれぞれ押してもらう形式だけど、うちは押下回数だけ分かればいいので、ボタンを「clap」の1つだけ設置という、実にもったいない使い方をさせてもらっています。

設定も分かりやすいこのプラグイン。
プラグインを有効化すると、ヘッダ内で設定javaScriptを直に読み込んでくる。
これが64行。ヘッダ内に64行。…うん、非常に邪魔。

というわけで、

<やりたいこと>
条件分岐を使い、特定のカテゴリー表示時だけヘッダで設定JSを読ませる

結論からいくと、これで出来ました。
functions.phpに追加。

// ReactionButtonのヘッダでの設定JSをカテゴリーページ以外で表示させない
function remove_rb_wp() {
 if (! is_category() ) {
 remove_action( 'wp_head', 'reaction_buttons_js_header' );
 }
}
add_action( 'wp', 'remove_rb_wp' );

※remove_rb_wpは今回適当につけた名前


以下復習を兼ねた備忘録。
本当に全く分からないところから始めたので…。

<試行錯誤その1>
とりあえずやってみる。

わかってないから当然ながらできない。

プラグイン名が違うのか、自分で作った関数名がおかしいのか。っていうかそもそもプラグイン名ってreaction_buttonsでいいのか。一体どこに書いてあるんやプラグインのちゃんとした名前て。
wp_enqueue_scriptってそもそも何ぞや…ってJSファイルを読み込む関数らしい。

今回のは外部ファイルへのリンクじゃなくて、直に読み込んで書き込んでくるから、もしかして根本的に違う?

………自作テーマとページのソースを見比べることしばし……。

疎いながらにwp_head()でプラグインファイルから設定JS部分を引っ掛けてきてるのは分かります。

<試行錯誤その2>

自動で出てくるヘッダ整理するときのremove_actionってのあるじゃないですか。
wp_head()ってことは位置的にはあれ使えばいいんじゃね?
というわけでやってみる!

どの名前を今回消す対象に指定していいか分からないので、プラグインファイルを恐る恐る開いて、ヘッダに記載されている内容を探してみます。

読み込まれてるのと同じ内容の直前、430行目。

function reaction_buttons_js_header() {

これか?
「reaction_buttons_js_header」を探して再びプラグイン内を検索…

523行目。

add_action('wp_head', 'reaction_buttons_js_header' );

これか!

ためしに(駄目だろうなと思いながら)プラグインファイル内に「is_category()」を直接書き、カテゴリーページ時だけ読みこむようにしてみた。
意図したとおりに他ページでは消えるんだけど、サイトヘッダ部分にエラー文が出てきます。
「ここで読まなきゃいけないプラグインがあるって聞いてるのにファイル読めないんだけど!?どういうこと!?」というエラー。

やはり力技ではなく、ちゃんと読みこませる場所を引っ掛けて消さないといけないみたいです。

<試行錯誤その3>

とにかくちゃんと消すために、

remove_action('wp_head', 'reaction_buttons_js_header' );

をfunctions.phpに追加。

設定JS、全ページでエラーもなくきれいに消えた!
つまり、使うべきはremove_actionで合ってる!はず!

あとは削除しないページを指定すればいいわけです。

カテゴリーページだけは削除しないよう「! is_category()」を追加。

しかし全然条件分岐が効いていない模様…。

ぼんやり考えてみるに、データ読み込みの序盤過ぎてページの属性が決定してないとか?
だから条件分岐できないんだろうか。
じゃあなんか別の書き方ないかな。

たとえばトップページ(urlが「/」)なら

if ( $_SERVER['REQUEST_URI'] == "/" ) {

なるほどなるほど。
アドレスで指定するんですね。

ええと…カテゴリーページ全部を指定するなら?
複数のURLを指定すればいいんだろうか?
うん、わからん!

(テーマ作成時もそうですが、さんざんいじくってから基礎編を読むなという。
でも何が分からないかすら分からないときより、色々つまずいて困ってからのほうが分かりやすいというものです。たぶん。
よく分からないなりに、ページ生成のタイミングがいろいろあるということだけは分かる…)

ずーっと読んで、「条件分岐タグの使用」の箇所。

「多くの条件分岐タグは、wpアクションフック以降でしか使用できません。」

あ。これだ。

// ReactionButtonのヘッダでの設定JSをカテゴリーページ以外で表示させない
function remove_rb_wp() {
 if (! is_category() ) {
 remove_action( 'wp_head', 'reaction_buttons_js_header' );
 }
}
add_action( 'wp', 'remove_rb_wp' );

こう書けば条件分岐が効くわけだ!すっきり!