WPサイトのユーザーのために小さなゲームをしたいです。ゲーム自体はのみ WPの認証システムを使用しますが、その他のロジックはすべて完全に外部です。
現在、カスタムテンプレート(ゲームのWordPressスクリプトを埋め込む)で標準のPHPページを使用すると、ロードはされますが、ユーザーにはロードが遅すぎるようです。私のゲームスクリプトは、WPと同じデータベースを使用し、高速です。テストの場合はオフにしました(テスト出力が残っているだけです)が、WPのこの「空の」ページでも遅すぎます。
WordPressを完全にバイパスして(つまり、テンプレートシステムとすべてを除く認証フローのために)、ゲームを直接読み込むことは可能ですか?私の最初の推測は、私のサイトのインストールのルートで別のスクリプトをホストすることですが、使用方法がわかりませんjust WordPressの認証コンポーネント-それはこのようにWordPressエンジンから単一のコンポーネントのみを使用することは可能ですか?
ゲームのスクリプトをホストするページを高速化する別の方法があるかもしれません...
わからないが、現在私の頭の中で最初の解決策。認証にはWordPressからのデータが必要ですか。 wp-load.php
を含めると、WordPressとその機能、おそらく識別子へのアクセス権が得られます。しかし、静的パスとして含めるファイルは、本当に素晴らしくてしっかりしたものではありません。
define( 'WP_USE_THEMES', FALSE );
require( $_SERVER['DOCUMENT_ROOT'] . '/wp-load.php' );
あなたはカスタム値でクエリを変更することができます、そしてこの値が存在するならばあなたはあなたのゲームにフックを通してリダイレクトすることができます。このリダイレクト後は、すべてのwp関数にアクセスし、さらにユーザーを確認します。このアイデアはフロントエンドでのみ機能し、バックエンドでページを変更するための解決策はありません。ヒントとしてのみ使用できます。
フォローソースは、カスタム文字列を使用してクエリを強化し、カスタムコードにリダイレクトするための一例です。
add_filter( 'query_vars', 'fb_plugin_add_trigger', 10, 1 );
function fb_plugin_add_trigger( $vars ) {
$vars[] = 'fb_plugin_trigger';
return $vars;
}
add_action('template_redirect', 'fb_plugin_trigger_check');
function fb_plugin_trigger_check() {
if ( (int) get_query_var('fb_plugin_trigger') === 1 ) {
// Here is your custom code.
exit();
}
}
このトリガーのURLは例example.com/?fb_plugin_trigger=1
です。
またそこにあなたが試すべきオプション。 カスタムエンドポイントを追加します 。
add_action( 'init', 'fb_my_endpoint' );
function fb_my_endpoint() {
add_rewrite_endpoint( 'fb_plugin_trigger', EP_ROOT );
}
この後、あなたはexample.com/fb_plugin_trigger/
のように、URLの中に値を見つけるでしょう。
ちょっとしたヒントは、エンドポイントを追加した後に書き換えルールをフラッシュすることです。パーマリンクを使用しない場合は、ヒントとしてURLのパラメータをidentifierに追加するためにadd_query_arg()
関数を使用してください。
これで、この値をクエリで解析してゲームのソースを含めることもできます。
add_action( 'parse_query', 'fb_parse_query' );
function fb_parse_query( $query ) {
if ( isset( $query->query_vars['my_api'] ) ) {
include( plugin_dir_path( __FILE__ ) . 'game/index.php');
exit;
}
}
認証のためだけにWPを使用するための手順は次のとおりです。
require_once ABSPATH . 'wp-settings.php';
を削除します。WPを呼び出すためのヘルパー関数をコーディングします。
function i_need_wp() {
global $table_prefix;
require_once ABSPATH . 'wp-settings.php';
}
WP認証を使用する前にi_need_wp()
を呼び出してください。
減速の原因は、WordPressがwp_head()で読み込んでいるすべてのスクリプトに関連していると思います。いくつかのプラグインを実行している場合、またはレンダリングをブロックするjs/cssを実行している場合は、パフォーマンスが大幅に向上します。
Header-mygame.phpのようなカスタムヘッダファイルをロードして、テンプレートファイルのget_header()
をget_header('mygame')
に置き換えてください。
Header-mygame.phpで、wp_head()と、ゲームを実行するのに必要でないものはすべて削除します。 <script>
タグと<link>
タグを使用して、手動で必要な依存関係だけを元に戻します。
WordPressもそこにスクリプトをエンキューすることができるので、get_footer()
でも同じことができます。
明らかにこれは 'WordPressの方法'でアセットをエンキューしていません、しかしそれはWordPressの方法が既に回避されているように思われるので...