web-dev-qa-db-ja.com

WordPress認証のみを使用する

WPサイトのユーザーのために小さなゲームをしたいです。ゲーム自体はのみ WPの認証システムを使用しますが、その他のロジックはすべて完全に外部です。

現在、カスタムテンプレート(ゲームのWordPressスクリプトを埋め込む)で標準のPHPページを使用すると、ロードはされますが、ユーザーにはロードが遅すぎるようです。私のゲームスクリプトは、WPと同じデータベースを使用し、高速です。テストの場合はオフにしました(テスト出力が残っているだけです)が、WPのこの「空の」ページでも遅すぎます。

WordPressを完全にバイパスして(つまり、テンプレートシステムとすべてを除く認証フローのために)、ゲームを直接読み込むことは可能ですか?私の最初の推測は、私のサイトのインストールのルートで別のスクリプトをホストすることですが、使用方法がわかりませんjust WordPressの認証コンポーネント-それはこのようにWordPressエンジンから単一のコンポーネントのみを使用することは可能ですか?

ゲームのスクリプトをホストするページを高速化する別の方法があるかもしれません...

3
Irina

わからないが、現在私の頭の中で最初の解決策。認証には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;
    }
}
2
bueltge

認証のためだけにWPを使用するための手順は次のとおりです。

  1. コード用にルートに別のフォルダを作成します。
  2. Wp-config.phpを別のファイルにコピーしてrequire_once ABSPATH . 'wp-settings.php';を削除します。
  3. コピーしたwp-configファイルをコードに含める
  4. WPを呼び出すためのヘルパー関数をコーディングします。

    function i_need_wp() {  
        global $table_prefix;
        require_once ABSPATH . 'wp-settings.php';
    }
    
  5. WP認証を使用する前にi_need_wp()を呼び出してください。

1
Sunny Luthra

減速の原因は、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の方法が既に回避されているように思われるので...

1
Jeremy Ross