WordPress Plugin : Plugin Load Filter

English Page

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

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

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

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

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

機能と効果

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

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

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

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

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

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

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

プラグインが読み込む JavaScript は、依存する JavaScript も同時に読み込まれるのでとても多くの JSファイルが読み込まれる場合があります。例えば jQuery が読み込まれるのは、プラグインやテーマで読み込んでいる JavaScript の依存スクリプトとして jquery が指定されているためです。jQuery に依存するスクリプトを使用しているプラグインを無効化したページでは、jquery を読み込まないようになります(テーマで jquery に依存するスクリプトを使用していない場合)

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

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

インストール

ダウンロード

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

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

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

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

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

動作環境

  • WordPress 5.3 以上
  • PHPバージョン 7.2 以上
  • シングルサイト/マルチサイトをサポートしています

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

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

使い方

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

  1. フィルタ登録で Page Type フィルタを設定
  2. Pege Type 有効プラグイン登録 でページタイプごとに有効化するプラグイン設定
  3. シングルページでフィルタしたい場合はそのページの編集画面から有効化するプラグイン設定
  4. ログインした状態でページを表示し、管理バーのリンクからフィルタリングされた結果を確認

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

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

フィルター登録

  • 有効化されたプラグイン、Jetpack モジュール等からフィルター対象を選択
  • Page Type フィルターの対象でないプラグイン(Normal)は通常どうりにロードされます
  • Page Type フィルタに設定したプラグインでも、管理ダッシュボード、Rest API、admin-ajax、wp-cron 等のリクエストではロードされます

管理ダッシュボード、Rest API、Ajax 等のリクエストに対するプラグインフィルタリングは、URL filter Addon(別売)で対応しています

フィルタータイプ

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

  1. [Admin Type] : 管理ダッシュボードページ側のみで使用するプラグインとして設定
  2. [Page Type] : ページタイプ毎や投稿毎にプラグインを有効/無効化したいプラグインに設定

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

動作が不明なプラグインをフィルタリングする必要はありません。フィルタリングするか迷う場合は、プラグインを Normal にしておくことをお勧めします

沢山のプラグインをフィルタリングする場合には、php.ini の max_input_vars の値に注意してください。これの設定値(デフォルト 1000)を超えるデータ更新は反映されません。

フォーラムで、32以上のプラグインをフィルタリングしようとしてデータ更新が出来ず、max_input_vars の値を大きくしたことで解消できたという報告がありました
Issue when setting many plugins to “page type”

Page Type 有効プラグイン登録

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

  1. デバイス選択(デスクトップ、モバイル)
  2. ページタイプ、投稿フォーマット又はカスタムポストタイプ等の選択
  • 使用しているページタイプ、投稿フォーマット等でのプラグイン有効化設定に抜けがないように登録して下さい
  • デバイスの判定は WordPress の wp_is_mobile 関数と同等の処理を使用しているので、スマートフォンとタブレットがモバイルデバイスとして判定されます
  • カスタムポストタイプは、有効になっている場合のみ表示されます
  • 未使用の投稿フォーマットを指定すれば、Page Type 有効プラグイン登録の設定項目から除外することができます

個別ページ毎の設定

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

動作確認

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

ログインした状態でページを表示し、管理バー のリンクからフィルタリングされた結果を確認します

管理バーの PLF 部分をクリックすると、フィルタリングされた結果が表示されます

フィルター動作の優先度

シングルページのフィルタ設定 > (URL グループフィルタ [アドオン]) > Page Type フィルタ (Admin) > Page Type フィルタ (Page)

多言語サイト構築用の言語切替え機能

パーマリンク等を一切変更せずに数ページのみ英語化するようなシンプルなケースを想定した簡単で手軽に使える多言語機能

詳しくは次の記事を参照して下さい

Plugin Load Filter に シンプルな多言語サイト構築用の言語切替え機能追加
wordpress の Plugin Load Filter にとってもシンプルな多言語サイト構築用の言語ロケール切り替え機能を追加しました (^^)
Plugin Load Filter に シンプルな多言語サイト構築用の言語切替え機能追加

Ajax 高速化フィルタ(プラグイン開発者向け機能)

あなたがプラグインを開発していて、 そのプラグインに Ajax リクエストを実装している場合に活用できる機能です

Ajaxリクエストを使っているのだけれどもう少し高速化したいとお思いなら試してみてください

あなたが作成したプラグイン内で使用しているAjaxは、その殆どがそのプラグインだけ、もしくは関連するアドオンプラグインが有効になっていれば、それ以外のプラグインは無効化されていても支障がないと思われます
(依存しているプラグインのコードがあるかをわかっているのは実装した人だけですので、Ajaxのアクションごとに適切に指定してください)

Ajaxのリクエスト データ内で有効化するプラグインのスラッグ(関連プラグインがあればカンマ区切りで複数指定可)を _ajax_plf に設定すると、それ以外のプラグインを無効化し、Ajax のレスポンスを高速化します

Ajax リクエストは様々な書き方がありますが、例えば jQuery を使って記述している場合は下記のようなコードで _ajax_plf に有効化するプラグインスラッグを指定します

jQuery.ajax({    
    type: 'POST', 
    url: ajaxurl, 
    data: { 
        action: "example_action",
        id: 1234,
        _ajax_nonce: xxxxxxxx,
        _ajax_plf: "example-plugin,example-plugin-addon",                
    }, 
    dataType: 'json', 
}).then(
    function (response, dataType) {

    },
    function () { /* alert("ajax error"); */ }
);  

_ajax_plf が指定されていても、Plugin Load Filter の Ajax高速化フィルタ設定が有効化されていない場合は、プラグインのフィルタリングは行われずに通常の処理となります

WordPressコア等の Ajax のフィルタリングを行いたい場合には Plugin Load Filter のアドオンがあります。任意のアクションに基づいてフィルタリングをする場合はアドオンをご活用ください

免責事項

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

アドオンのご案内

標準機能よりもさらに高度なフィルタリングが可能な URLフィルタアドオン(別売)をご用意しています

  • リクエストURLパターンマッチフィルタ
  • タクソノミー(カテゴリーやタグ等.)のターム名フィルタ
  • Ajaxリクエストのアクションフィルター

この3つの機能による強力なプラグインのフィルタリングを提供します

例えば、ログインページ、AMPページ、管理ダッシュボードページ、REST API(wp-json)、Ajax(admin-ajax/wc-ajax) 等のリクエストに対してプラグインをフィルタリングすることが可能です

URLフィルタ設定データのインポート/エクスポートも可能です
サンプルとしてWooCommerce用のURLフィルタデータを提供しています

WooCommerceのプラグインを使用している場合は、サンプルのWooCommerce URLフィルタデータを元にカスタマイズすれば、簡単に WooCommerce 関連ページのパフォーマンスを向上させることができます

詳しくは下記のアドオンのページをご覧ください

WordPress Plugin : Plugin Load Filter Addon
Plugin Load Filter アドオンは3つの強力なフィルターが実装されています.1. リクエストURLパターンマッチフィルタ2. タクソノミー(カテゴリーやタグ等.)のターム名フィルタ3. Ajaxのアクション…
WordPress Plugin : Plugin Load Filter Addon

コメント機能は停止しました

セルティスラボ製のテーマやプラグインのサポートを行うフォーラムを作成しましたので、質問やコメント等はフォーラムへお願い致します

※フォーラムへ参加するには、無料の メンバー登録 が必要です

※参加する場合は 運用ルールと使い方 をお読みください

履歴

2024-11-12 Ver4.2.0
wp_get_current_user を呼び出す際の $current_user 設定のタイミングを setup_theme アクション後に変更
パーマリンク変更プラグイン使用等により URL から投稿 ID を検出できないページ用フィルター フック plf_singler_custom_url_to_postid を追加
Permalink Manger と Custom Permalinksプラグインの投稿ID検出処理追加
load_plugin_textdomain 呼び出しを init アクションフックに変更

2023-12-1 Ver4.1.0
セキュリティ対策
Ajax高速化フィルタ(プラグイン開発者向け機能)の追加

2022-2-7 Ver4.0.8
管理バーのPLFステータスで使用されているフィルター名が正しく表示されない場合があったのを修正
PHP8.1 の動作確認と PHP Notice の修正

2021-4-8 Ver4.0.6
Multisitr sitewide プラグインのフィルタリング不具合修正

2021-2-12 Ver4.0.4
プライベート投稿で言語切替機能が機能していないバグを修正
Jetpack のカスタム投稿タイプを誤判定するバグを修正

2020-8-27 Ver4.0.0
エキスパート用URLフィルタを削除して、高機能版のURLグループフィルタをアドオンとしての提供へ変更
管理バーにプラグインのフィルタリング結果表示機能を追加
プログラムコードのリファクタリング

2020-6-5 Ver3.3.0
多言語サイト構築用の言語切替え機能追加
動作環境をWordPress5.3、PHP7.2 以上に変更

2019-12-2 Ver3.1.1
パーマリンク設定が基本の時、フィルタリングが機能していなかったバグ修正、その他タイプミスと php notice 対策

2019-2-25 Ver3.1.0
URL Filter – キーワード使用可能文字種と最大登録数の変更
plf-filter PHP Warning (Illegal offset type) 不具合修正.

2018-5-23 Ver3.0.2
bbPress 非公開(private) ページでフィルターが機能しない不具合を修正
URLフィルターの優先度の不具合修正

2018-5-11 Ver3.0.0
エキスパート用URLフィルタ追加(旧バージョンのURLフィルタの改変(非互換))

2017-5-11 Ver2.5.1
AMP / URL ページ判定用の正規表現を一部修正
設定のクリアボタンに確認ダイアログを追加

2017-1-20 Ver2.5.0
AMP / URL ページフィルター追加
カスタムポストタイプを使うプラグインが rewrite_rule をクリアすることがあるので rewrite_rule の状態を監視しクリア時は再設定されるまでプラグインのフィルタリング機能を一時的に停止させる機能を追加

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 モジュールを単独プラグインとして作成

go-to-top