私は自分のWebサイト用に、WPとは別の独自のアップロードサービスを作成しましたが、WPを使用して低レベルのdb機能とユーザー検証を提供します。そうするために、私は私のメインスクリプト(Uploadify)にwp-load.phpを含めます、しかしそれをすることはサーバーのメモリを不必要なコンポーネントでいっぱいにするようです。そのおかげで、インストールされたWPプラグインを指しているように思われるエラーが私のスクリプトに見られます。
コアのWPコンポーネントのみをロードしてプラグインを無視するにはどうすればよいですか?これでも可能ですか?
BackPress を使用しますが、私はデフォルトのインストールとconstを介してより小さなソースを使用する小さな開発があります。
wp-settings.php
を見てください
// Stop most of WordPress from being loaded if we just want the basics.
if ( SHORTINIT )
return false;
wp-config.php
でconst SHORTINITをtrueに設定して、高速実行を見てください。 define( 'SHORTINIT', TRUE );
これらはあなたが得るファイルです:
// All are located in ABSPATH.WPINC
'/load.php'
'/default-constants.php'
'/version.php'
'/compat.php'
'/functions.php'
'/class-wp.php'
'/class-wp-error.php'
'/plugin.php'
'/default-filters.php'
'/pomo/mo.php'
// Only Multisite
'/ms-blogs.php'
'/ms-settings.php'
プラグインを完全に無効にすると、多くの利点が失われます。
さらに進んで投稿やリンクなどを切り取るwordpressの分布がありますが、それらは常にWordPressコアより遅れるでしょうし、長く存続しない傾向があります。
ここでできることがいくつかあります
Short Init
これをあなたのwp-config.phpに入れる:
define( 'SHORTINIT', TRUE );
あるいは、ワードプレスでロードする前にどこかでそれを定義すると、ロード処理を減らして最小限のコア機能に引き戻すはずです。
二次軽量インストール
あなたが欲しいプラグインとテーマ(もしあれば)だけを使って、2番目のwordpressインストールをセットアップしてください。それからwp-config.phpを同じwp-contentディレクトリとデータベース値を使うように設定します。
バックプレス
WordPress、とりわけオリジナルのBBpressやGlotpressはBackPressライブラリを中心に構築されています。 WordPressの代わりにこれを使用して作業を行うことができますが、多数のAPIや機能が欠落しているか、再実装や移植が必要になる場合があります。
オプションテーブル
また、WordPressはオプションテーブル全体をメモリにロードしてクエリを削減します。そこに大きな値を保存すると、パフォーマンスに影響を与えます。
早く終了します
WordPressのロードプロセスの初期の関数にフックして、WordPressが終了する前にPHPプロセスを終了することもできますが、それがどれほど安全かについてはお勧めできません。
プラグインを選択的に読み込む
プラグインを選択的にロードすることに関するこの記事もあります しかし、それはワードプレスのコアファイルにハックを必要としません
is_user_logged_in()
とcurrent_user_can()
を動作させるために、私は似たような答えを見つけました ここ (カントのコメント)比較はここで答えにマッチします:
define('SHORTINIT', true)
+ require('wp-load.php')
+を手動で使用すると、
Pageload: 1.05 sek - 収録ファイル: 43ファイル
比較: ONLYrequire('wp-load.php')
:を使う
Pageload: 1.35 sek - 収録ファイル: 419ファイル
時間差(0.3 sek)はインストールやPHPエンジンとは異なるかもしれませんが、1つのページロードで多くのリクエストを検証している間に合計が増えます!/@アンナエリクソン
WP installed dirへの相対呼び出しを使用することをお勧めします。 Wordpressのカスタムプラグイン「ROOT」からは、次のようになります。
$wordpress = '../../../wp-load.php';
それから私のプラグインindex.phpの中に:
define('SHORTINIT', true);
include_once $wordpress;
require_once ( ABSPATH . WPINC . '/class-wp-user.php' );
require_once ( ABSPATH . WPINC . '/class-wp-roles.php' );
require_once ( ABSPATH . WPINC . '/class-wp-role.php' );
require_once ( ABSPATH . WPINC . '/class-wp-session-tokens.php' );
require_once ( ABSPATH . WPINC . '/class-wp-user-meta-session-tokens.php' );
require_once ( ABSPATH . WPINC . '/formatting.php' );
require_once ( ABSPATH . WPINC . '/capabilities.php' );
//require_once ( ABSPATH . WPINC . '/query.php' ); // - might be useful
require_once ( ABSPATH . WPINC . '/user.php' );
require_once ( ABSPATH . WPINC . '/meta.php' );
wp_cookie_constants();
require_once ( ABSPATH . WPINC . '/vars.php' );
require_once ( ABSPATH . WPINC . '/kses.php' );
require_once ( ABSPATH . WPINC . '/rest-api.php' );
require_once ( ABSPATH . WPINC . '/pluggable.php' );
これ以降、ユーザー検証は私のために働いています。元のコードからの@Anna Ericsonの最後の言葉に感謝します。
他のタスクでは、1つか2つのリクエストで実行し、他の必要なファイルを追跡します 0.3 sekの価値はないかもしれません 。
SHORTINIT
定数をスキップして手動で雑然とした。
define('SHORTINIT', true);
を試しましたか?私は自分でテストしたことはありませんが、十分な機能を保持しながらWP coreの非常に少ない側面をロードするようです。