WordPress Plugin : Plugin Load Filter

WordPress プラグインロードフィルター

WordPress は、プラグインをたくさん使用すると動作が遅くなります (^_^;)

これは、現在有効になっているプラグインを無条件で読み込むようになっていることが一つの要因で、要求されたページを表示するのに関係ないプラグインまで読み込んでしまっているかもしれないってことです

このプラグインは、そのページで必要なプラグインのみを読み込むようにフィルタリングして、レスポンスを高速化することが出来ます

これで沢山のプラグインを使用するのもあまり気にしなくて良くなるかもしれません (^^)

また、WordPress をブログと共存して Webアプリケーションとして何らかのサービスを提供しているような場合ならば、プラグインをブログ用、Webアプリケーション用と言うような感じで使い分けることも可能です

機能と効果

使用しているプラグイン数が10個以上ということも珍しくありませんし、多くのプラグインは、意外と特定のページや管理画面でしか使用していなかったりします

例えば、Contact Form7 を使っている場合を考えてみます。

実際に Contact Form7 を使用したいのはお問い合わせページだけかもしれませんが、WordPressは、通常 Contact Form7 プラグインを常に読み込んでしまいます

このように、無条件にプラグインを読み込んでいると、1つのプラグインの読み込みで、仮に50msec かかるとすると20個のプラグインを使っていると1秒かかることとなります

これが、プラグインは使い過ぎると重くなる理由です

また、TinyMCE Advanced 等のようなプラグインは管理画面での記事作成時にしか必要ありませんので、通常のサイト表示時に読み込む事自体がナンセンスです

一つのプラグインを読み込まなくて済むということは、そのプラグインのPHPプログラムだけでなく、同時に関連するCSS,JS,翻訳ファイル等も読み込まないってことです

また、このプラグインでは、デスクトップかモバイルデバイスかによってロードするかどうかも設定できますので、例えば ”トップへ戻る” 等の機能をプラグインで実装している場合なら、この機能はデスクトップ時のみ有効とする等も可能です

ダウンロード

公式サイトからダウンロード出来ます

Plugin Load Filter
Dynamically activate the selected plugins for each page. Response will be faster by filtering plugins.

インストール

ダウンロードした zipファイルを プラグインの新規追加画面 プラグインのアップロード からインストールすることが出来ます

または、プラグインの新規追加画面から plugin load filter を検索してインストールすることも出来ます

インストールしてプラグインを有効化すれば使用することが出来ます

動作環境

  • WordPress 4.1 – 4.6 で動作を確認しています
  • シングルサイトのみをサポートしています ※Ver2.4.0 マルチサイトサポートしました
  • PHPバージョン 5.3 以上

こ のプラグインは、有効化されると自動的に wp-content/mu-plugins フォルダーに plf-filter.php ファイルを設置して必須プラグインとして動作させています。mu-plugins フォルダやファイルを作成する権限がない場合には失敗する可能性があります 。

動作しない場合は、 wp-content/mu-plugins フォルダーを手動で作成してファイル作成権限を許可して頂ければ動作すると思います (^^)

使い方

管理画面のプラグインメニューに追加された Plugin Load Filter から設定します

  1. フィルター登録
  2. Pege Filter 有効プラグイン登録
  3. 動作確認

上記順番に設定と動作確認を繰り返して下さい

設定はちょっと面倒かも知れませんが、うまく設定することが出来れば、プラグインの読み込みを減らし、ページ表示を高速化出来るのでぜひチャレンジしてみてください (^^)

フィルター登録

設定ルール

  • プラグインは、有効化されているプラグイン、Jetpackの有効モジュール、Celtispack の有効モジュールから選択できます
  • フィルターに登録しないプラグインは通常どうり普通にロードされます
  • フィルター登録したプラグインでも、管理画面及び、記事表示に関係ないページ(login, wp_cron, Ajax 等)のリクエストには、常にロードされます

フィルタータイプ

フィルターは 2タイプあり、いづれか1つのタイプに設定することが出来ます。設定すると動的に無効化や有効化される対象となります

  1. [Admin Filter] : 管理モードのみで使用するプラグインとして設定
  2. [Page Filter] : ページタイプや投稿毎に有効化の選択対象とするプラグインとして設定

Page Filter は、特定のページでしか使われないことがわかっているプラグインを登録して、Page Filter 有効プラグイン選択 でデバイスやページタイプ毎に有効化する条件を指定する為のものです

plugin_load_filter_setting1

※動作条件が不明のプラグインまでフィルタする必要はありません。設定するか迷うプラグインは通常ロードのままにしておくことをお勧めします (^^)

Page Filter 有効プラグイン選択

Page Filter に登録したプラグインは一旦ブロックされるので、プラグイン毎にデバイス、ページタイプ、投稿フォーマット又はカスタムポストタイプ等の有効化する条件を選択することで機能するようになります

  1. デバイス選択(デスクトップ、モバイル)
  2. ページタイプ、投稿フォーマット又はカスタムポストタイプ等の選択

plugin_load_filter_setting2

※デバイスの判定は WordPress の wp_is_mobile 関数と同等の処理を使用しているので、スマートフォンとタブレットがモバイルデバイスとして判定されます

※使用していない投稿フォーマットをフィルター登録ページで指定すれば、表示項目から除外することができます

※使用しているページタイプ、投稿フォーマット等でのプラグイン有効化設定に抜けがないように登録して下さい

※WP4.4 からサポートされた WP Embed Content (ブログカード)のリクエストに対する出力時に無効化もしくは有効化したいプラグインを設定できます。
但し、is_embed 条件で使用されるテンプレートファイルには、通常の投稿や固定ページで使われているアクションフックやフィルターフックとは異なっていますので大抵のプラグインはロードされても機能していない状態となってしまいます。

※カスタムポストタイプは、有効になっている場合のみ表示されます

個別ページ毎の設定

Page Filter 有効プラグイン選択では、ページタイプ別の有効化するプラグインを設定しましたが、一つの固定ページでしか使っていないプラグインのような場合は、個別ページ単位で有効化するプラグインを設定することも可能です

plugin_load_filter_setting3

 

動作確認

フィルター動作の優先度

Admin  >  個別ページの Page Filter > ページタイプ等の Page Filter

設定が済んだら意図したように動作しているか十分に確認して下さい。
またプラグインの追加、更新、削除等を行った場合も確認して下さい。

 

免責事項

本ソフトウェアを使用した事による、いかなる損害も作者は一切の責任を負いませんので、自己責任の上でご使用下さい

 

履歴

2016-10-21 Ver2.4.1
アーカイブ判定やカスタム投稿タイプの ‘rewrite_rules’, ‘wp_post_statuses’ に関する不具合対策

2016-08-31 Ver2.4.0
Multisite サポート

2016-06-20 Ver2.3.1
プラグイン更新時に MUプラグインファイル plf-filter.php が更新されない場合があったので対策

2016-06-17 Ver2.3.0
設定画面のユーザーインターフェースの変更
デバイスフィルターの変更
WP Embed Card 用のフィルター処理追加

2016-04-18 Ver2.2.1
WP4.5 support.
(get_currentuserinfo is deprecated since version 4.5! change wp_get_current_user)

2015-07-23 Ver2.2.0
transient キャッシュは wp_options テーブルを肥大化させる場合がある為、有効プラグイン処理結果の保存に transient キャッシュを使用していたのを止めた

2015-04-30  Ver2.1.0
設定画面のユーザーインターフェースの変更
WordPress 4.2.1 での動作確認

2015-04-22  Ver2.0.1
モームページヘの GETリクエスト(?パラメータ付き)をフィルター対象から除外。例えば Download Manager プラグインのダウンロードリンク等

2015-04-17  Ver2.0.0 公式サイトでリリース
Celtispack 1.4.0 内の plugin load filter モジュールを単独プラグインとして作成

 

WordPress Plugin : Plugin Load Filter” への6件のコメント

  1. WP 4.4.2 でも動作確認済みでしょうか?
    また、例えば「Contact Form 7」を読み込まない設定を有効化した場合、
    ソースのどこを見て読み込まれていないと判断すればいいのでしょうか?
    例えば下記のようなソースがあれば無効化設定したプラグインが読み込まれていないという事が分かると思います。

    1. WP 4.4.2 で確認してみましたが、問題なく動作しています

      Contact Form 7 が読み込まれているかどうかは、その機能が動作しているかどうかで自ずとわかると思いますが、ブラウザでページのソースを表示させて、そのソース上で contact-form-7 を検索して Contact Form 7 の CSSや javascript が読み込まれていなければそのページでは無効化されていることになります

      1. ご返答ありがとうございます。

        問題なく動作している事ありがとうございます。
        単純にソース上からキーワード検索行えばいいんですね。

        プラグイン名が「Plugin Load Filter」なので、
        このようなご要望をしても無理だと思いますがダメ元でご要望失礼します。
        テーマ内のJS()/CSSも読み込みも設定できるようにしてもらえたらなと思います。
        テーマによってJS/CSSの数も違う中で場合によっては不要なJS/CSSもあると思いますので、
        プラグインからテーマ内のJS/CSS等の読み込み停止があれば便利かなと思っております。

  2. プラグインインストールする前に、
    プラグインから Revision 拝見しましたところ、
    uninstall.php 設置されていない事に気付きましたので設置してほしいです。
    (プラグイン削除した際に、全部キレイにクリーンな状態にしたいのです)

    1. uninstall.php ではなく register_uninstall_hook 関数を使ってアンインストール時に保存している設定値はクリアしています

コメントを残す