Comment appeler wp_get_current_user () dans un plugin lorsque les plugins sont chargés avant pluggable.php?

9

Le résultat actuel est "Erreur irrécupérable PHP: appel de la fonction non définie wp_get_current_user ()", ce qui est logique, mais ne résout pas le problème.

Je dois utiliser $ current_user.

Voici le code que j'utilise actuellement:

$wp->init(); 
do_action( 'init' ); // Check site status 
$file='http://xxxxxxxx.com/wp-admin/wp_includes/pluggable.php'; 
if ( is_multisite() ) { 
    if ( true !== ( $file = ms_site_check() ) ) { 
        require( $file );
        die(); 
    } 
    unset($file); 
}

// Get the current user's info 
$current_user = wp_get_current_user(); 

if ( !($current_user instanceof WP_User) ) 
    return; 

echo $current_user->user_login; 

function paf_uname(){ 
    return $current_user->user_login; 
}
    
posée PAFoster 13.07.2012 - 22:54

4 réponses

7

Pour ajouter à la réponse de @ EAMann, vous devez encapsuler votre appel wp_get_current_user() (ou tout appel tentant d'accéder à une fonction définie dans pluggable.php ) dans l'action 'plugins_loaded' .

Donc, si vous mettez ceci dans votre fichier functions.php , faites-le comme ceci:

add_action( 'plugins_loaded', 'get_user_info' );

function get_user_info(){
  $current_user = wp_get_current_user(); 

  if ( !($current_user instanceof WP_User) ) 
    return; 

  echo $current_user->user_login;

  // Do the remaining stuff that has to happen once you've gotten your user info
}

Notez que nous ne sommes pas intéressés par ce que cette fonction renvoie . Nous sommes intéressés par quand cette exécution , à savoir après le fichier pluggable.php chargé et défini votre fonction wp_get_current_user() .

Donc, ne vous attendez pas à faire quoi que ce soit avec la valeur de retour pour cette fonction. Au lieu de cela, considérez cette fonction comme le point de départ de tout ce que vous voulez faire une fois que vous avez les informations de l'utilisateur actuel.

Faire cela dans un plugin

Par souci d'exhaustivité, voici comment accéder à une fonction plug-in similaire à partir du contexte de votre propre plug-in:

(mettez cela dans un fichier .php dans votre dossier plugins )

class WPSE_58429 {
    public function __construct(){
        add_action( 'plugins_loaded', array( $this, 'check_if_user_logged_in' ) );
    }

    public function check_if_user_logged_in(){
        if ( is_user_logged_in() ){
           // ... do stuff for your logged-in user
        }
    }
}

$wpse_58429_plugin = new WPSE_58429();

J'ai utilisé cette technique avec succès pour un très simple type de plug-in "À venir bientôt" qui redirige l'utilisateur vers une page spécifique s'il n'est pas connecté avec wp_safe_redirect() .

    
réponse donnée Tom Auger 05.04.2013 - 16:59
3

Le problème est que vous essayez de charger le code directement plutôt qu'avec un hook WordPress. WordPress charge un tas de code dans un ordre spécifique (vous pouvez voir la liste des actions déclenchées dans une requête typique dans le Codex . ).

En essayant de lancer directement votre code, vous exécutez juste avant le chargement de pluggable.php . Et vous ne devriez pas essayer de include() ce fichier directement. Laissez WordPress le faire pour vous.

Au lieu de cela, définissez une fonction qui récupère les informations utilisateur:

function wpse_58429() {
    // Get the current user's info 
    $current_user = wp_get_current_user(); 

    if ( !($current_user instanceof WP_User) ) 
        return; 

    return $current_user->user_login; 
}

Vous pouvez ensuite utiliser cette fonction n’importe où dans votre thème sans problème. Par exemple:

echo wpse_58429();

Si vous devez utiliser $current_user dans un autre code, assurez-vous de le déclencher avec une action WordPress ... n'appelez pas le directement, sinon il sera exécuté avant que la fonction ne soit disponible.

    
réponse donnée EAMann 16.07.2012 - 17:37
0

Il semblerait que vous chargiez votre code avant que certaines fonctions ne soient disponibles. Avez-vous essayé:

 global $current_user; 
 //print_r($current_user); //all user related information
echo $current_user->ID; //get current user id 
    
réponse donnée Innate 13.07.2012 - 23:38
0

Ajoutez simplement cette fonction au fichier .php de votre plugin

function is_logged_in(){
    if(function_exists( 'is_user_logged_in' )) {
        return is_user_logged_in();
    }
}

Appelez-le où vous voulez pour obtenir le statut de connexion de l'utilisateur. Par exemple:

echo is_logged_in();
    
réponse donnée mahdi azarm 23.07.2017 - 01:24

Lire d'autres questions sur les étiquettes