web-dev-qa-db-ja.com

最小限のWordPress環境をロードする

私は自分のWebサイト用に、WPとは別の独自のアップロードサービスを作成しましたが、WPを使用して低レベルのdb機能とユーザー検証を提供します。そうするために、私は私のメインスクリプト(Uploadify)にwp-load.phpを含めます、しかしそれをすることはサーバーのメモリを不必要なコンポーネントでいっぱいにするようです。そのおかげで、インストールされたWPプラグインを指しているように思われるエラーが私のスクリプトに見られます。

コアのWPコンポーネントのみをロードしてプラグインを無視するにはどうすればよいですか?これでも可能ですか?

11
MechEngineer

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'
6
bueltge

プラグインを完全に無効にすると、多くの利点が失われます。

さらに進んで投稿やリンクなどを切り取る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プロセスを終了することもできますが、それがどれほど安全かについてはお勧めできません。

プラグインを選択的に読み込む

プラグインを選択的にロードすることに関するこの記事もあります しかし、それはワードプレスのコアファイルにハックを必要としません

6
Tom J Nowell

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定数をスキップして手動で雑然とした。

3
cavameta

define('SHORTINIT', true);を試しましたか?私は自分でテストしたことはありませんが、十分な機能を保持しながらWP coreの非常に少ない側面をロードするようです。

2
Tomas Buteler