WordPress:これならわかる! Plugin Load Filterの設定

2019年5月21日

Plugin Load Filterの必要な理由

WordPressが重い原因

WordPressはとにかく重い。その根本的な原因としては、PHPで記述されているからである。一般に、スクリプト言語というのは、プログラムの動的なロードには強いのだが、逆に動的であるがために「使われるまさにその場面」でのオーバーヘッドがかかる。これはスクリプト言語の宿命だ。

ともあれ、Wordpressの1ページをロードするには、そのつど様々なPHPのモジュールがロードされるのだが、プラグインを入れていくと、それらすべてのプラグインが常にロードされてしまう。すべての1ページを表示するごとにだ。

例えば、あるプラグインは管理画面でしか使わないのに、ユーザ向けページでもロードされてしまう。逆に、ユーザ向けページのある一つだけにしか必要無いのに、管理画面も含めてすべてのページでロードされてしまう。

選択的にプラグインをロードさせる

これではあまりに非効率だ。良く言われることとしては、例えばContact Form 7というプラグインは、ユーザ向けページの「コンタクト」ページでしか必要無いのに、管理画面も含めてすべてのページでロードされてしまう。しかも、このプラグインはどういうわけか比較的「重い」のである。

プラグインを極力減らすのにこしたことは無いのだが、「どうしても」という場合はあるものだ。だから、そのプラグインが必要なときにだけロードされて欲しい。

これを何とかしようというのが、Plugin Load Filterだ。必要な場所でのみ特定のプラグインをロードさせるというものだ。

説明がわからない。

しかし、この「説明」というのが非常にわかりにくい。どこのウェブを見ても何が何やら訳のわからない説明になっている。本当にわかっていて使っているのか疑わしい。

ここでは、極力初心者向けから始めて、徐々に高度な設定に移っていきたいと思う。初心者向けでも、その効果はあるはずだ(体感できるかどうかはわからないが)。

第一段階

プラグインのインストールと有効化は省略する。単純に「Plugin Load Filter」を検索してインストールし有効化すればよいだけだ。一つ問題なのは設定画面が「設定」の中ではなく、「プラグイン」の中にあることだ。こういうプラグインは初めて見た。

ともあれ、設定画面を開く。

すると、次のような画面になる。左側の「エクスパート」用は一切無視し、右側に注目する。

初期値はすべてNormal Modeになっている。これは「すべてのページでロードする」の意味だ。これを変更し、管理画面にだけ必要なプラグインについて「Admin Page」に設定する。

設定したら、一番下の「フィルター登録」をクリックする。

これで、管理画面でのみ必要なプラグインは、ユーザ側ではロードされないことになる。

第二段階

第一段階では、「すべてでロードする」か「管理画面でだけロードする」かしか決められなかった。ここでは、「ユーザページでだけロードする」を付け加えるのだが、しかし、その「ユーザページの中のどのページでロードするのか」というオプションがあるため少々ややこしくなる。

つまり、「管理画面でのみロードする」は「管理画面のいかなる部分でもロードする」という意味なのだが、「ユーザページでのみロードする」は、「どのユーザページでロードするのか」という選択ができるわけだ。だから複雑さが増してくる。

しかし、「ユーザページのすべてでロードする」に指定するのは比較的簡単だ。つまり、プラグインが次の三種類に分けられることになる。

  • すべてのページでロードする
  • 管理画面でのみロードする
  • ユーザページでのみロードする

ということだ。これをするにはまず、Page Typeを選択する、以下に示す。

この「Page Type」という文言が問題なのだが、要するにユーザ側に表示されるページと考えて良いようだ。大まかには投稿と固定ページである。

設定したら再度一番下の「フィルター登録」をクリックするのだが、その後にやることがあるので注意。

「フィルター登録」をクリックした後に、「Page Type フィルタ有効プラグイン選択」というタブをクリックしてみると、先にPage Typeにしたプラグインが表示されている(この場合はLazy Load…)。

ここで、どのような場面でこのプラグインをロードするかを指定しなければならない。デフォルトでは「全くロードされない設定になっている」ので注意が必要だ

ここでまずやらねばならないことは、DesktopとMobileにチェックすることだ、つまりデスクトップであろうがスマフォであろうがロードする。

しかし、上を指定してあっても、その右側をチェックしないと結局読み込まれない。ほとんどはHome(ホーム)、Page(固定ページ)、Post(投稿)をチェックしておけば問題無いと思われる。

これで第二段階は終了だ。

  • すべてのページでロードするプラグイン
  • 管理画面でのみロードするプラグイン
  • ユーザページでのみロードするプラグイン

という分離ができた。

第三段階

第三段階としては、Contact Form 7のように「特定のページ(おそらくこの場合は固定ページ)」でのみ読み込みが必要なものの指定だ。Contact Form 7はコンタクトページ以外には全く不要な代物だ。これをPage Typeにするが、どこにも表示しないようにする。

もちろん、このままではContact Form 7が必要なコ「ンタクトページ」でも読み込まれなくなる。

次に、「コンタクトページ」おそらくは固定ページだと思うが、その固定ページの編集画面を開くと、右下に「Page Filterプラグイン」というのが表示されているはずだ。

これを「使用する」にして、Desktop、Mobileをチェックする。「保存」すれば設定が保存される。ページ自体をセーブする必要はない。

これで「コンタクト」ページでだけContact Form 7がロードされるはずだ。

Page Filter プラグインの意味

さて、先の投稿や固定ページに現れる「Page Filter プラグイン」という設定の意味なのだが、これがまたわかりにくい。

確実に確認したわけではないのだが、これはこういう意味かと思う。

  • 使用しない:このページ独自の設定ではなく、Plugin Load Filter設定ページでの設定値に従う。
  • 使用する:このページ独自の設定を行う。

そして、「使用する」にした場合には、各プラグインをDesktopあるいはMobileでロードするかしないかを決められるものと思われる。つまり、「使用しない」「使用する」という言葉は、本来は「設定を上書きしない」「設定を上書きする」の意味だろう。図にすると以下のようになる。

※今のところ、これはあくまでも想像だ。実際に確認したわけではない。しかし、Contact Form 7の使用に限ってはこの推論が正しいことがわかっている。つまり、この設定をすることにより、(全体的には「ロードしない」という設定を行ったContact Form 7が)、特定の固定ページではロードされるようになった。

後はプラグインの区分のみ

あとは使用中の各プラグインの区分になる。つまり、

  • 両方で必要
  • 管理画面のみで必要
  • ユーザページ全体で必要
  • ユーザページの一部で必要

という区分が必要になってくる。

しかし、安易に「このプラグインはこれ」と決めてかかると、機能が動作しないという状況に陥る。例えば、SiteGuard WP Pluginというものがあるが、これは主に管理者ログインを守るために使っているので「管理者のみ」としてみたのだが、そうするとコメント投稿時のキャプチャが表示されなくなってしまった。以下である。

こういった場合には、「両方」とするか、あるいは「管理者のみ」としてユーザコメントには別のプラグインを使うといった対策が必要になる。