web-dev-qa-db-ja.com

プラグインの現在のユーザーはNULLを返します

私は現在プラグインを開発しています、そして私は$ current_userグローバルを利用しようとしています。

class Something {
  public function __construct() {
    $this->get_user();
    var_dump( $this->user );
  }

 private function get_user() {
    require_once( ABSPATH . '/wp-includes/pluggable.php' );
    $this->user = wp_get_current_user();
  }
}

これは実際にうまくいきます。しかし、私は必要ではないはずのpluggable.phpファイルを呼び出す必要があります。また、グローバルな$ current_user変数を呼び出さずに試してみました。もちろん、もう一度pluggable.phpをインポートしない限り、常にNULLを返します。

private function get_user() {
  require_once( ABSPATH . '/wp-includes/pluggable.php' );
  global $current_user;
  get_currentuserinfo();
  $this->user = $current_user;
}

これは次のものと重複する可能性があります。 $ current_user varはNULLを返します

そして私はすべての解決策を試してみましたが、それでもplugable.phpをインポートする必要があります。

他のスレッドの作者が共有していない解決策を見つけたようです。

他に誰もがこの問題を抱えている?ありがとう。

1
mousesports

クラスインスタンスを作成する前に、アクションplugins_loadedを待ちます。この時点でプラガブル機能がロードされます。 wp-settings.phpから:

/**
 * Fires once activated plugins have loaded.
 *
 * Pluggable functions are also available at this point in the loading order.
 *
 * @since 1.5.0
 */
do_action( 'plugins_loaded' );

私はほとんどの場合wp_loadedを待つでしょう。それからグローバルなWP_Rolesオブジェクトがセットアップされました、あなたはテーマとロケールを知っています - あなたはたぶん情報が足りないため問題に遭遇することはないでしょう。

プラグインのメインファイルがロードされたときにクラスインスタンスを作成しないでください。これはいつも早すぎる。通常、最初にリクエストをチェックして他のプラグインAJAXリクエストやWPのコメント/ XML RPC /フィード処理を遅くしないようにコードを除外します。

したがって、プラグインのメインファイルは次のようになります。

add_action( 'wp_loaded', [ new Something, 'setup' ] );
6
fuxia