web-dev-qa-db-fra.com

L'utilisateur actuel dans le plugin renvoie NULL

Je développe actuellement un plugin et j'essaye d'utiliser le global $ 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();
  }
}

Cela fonctionne réellement. Cependant, je dois appeler le fichier pluggable.php qui ne devrait pas être nécessaire. J'ai également essayé d'appeler la variable globale $ current_user en vain: elle renvoie toujours NULL ... à moins bien sûr que j'importe à nouveau pluggable.php - comme ceci:

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

Cela pourrait être un doublon potentiel de: $ current_user var renvoie NULL

Et j'ai essayé toutes les solutions, mais j'ai toujours besoin d'importer pluggable.php, quoi qu'il arrive.

On dirait que l'auteur de l'autre thread a trouvé une solution qui ne partage pas.

Quelqu'un d'autre a déjà ce problème? Merci.

1
mousesports

Attendez l'action plugins_loaded avant de créer l'instance de classe. Les fonctions enfichables sont chargées à ce moment. De 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' );

Je voudrais même attendre wp_loaded dans la plupart des cas. Ensuite, l’objet global WP_Roles a été configuré. Vous connaissez le thème et les paramètres régionaux. Il est fort probable que vous ne vous retrouverez pas dans un problème en raison du manque d’informations.

Ne créez jamais que des instances de classe lorsque le fichier principal de votre plugin est chargé. C'est toujours trop tôt. Habituellement, vous souhaitez vérifier d'abord la demande pour empêcher votre code de ralentir les autres plugins AJAX demandes ou le traitement des commentaires/XML RPC/feed de WP.

Le fichier principal de votre plugin pourrait ressembler à ceci:

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