¿Cómo llamo a wp_get_current_user () en un complemento cuando los complementos se cargan antes de pluggable.php?

9

El resultado actual es "Error fatal de PHP: llamar a la función no definida wp_get_current_user ()", lo cual tiene sentido, pero no ayuda.

Necesito usar $ current_user.

Aquí está el código que estoy usando actualmente:

$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; 
}
    
pregunta PAFoster 13.07.2012 - 22:54

4 respuestas

7

Para agregar a la respuesta de @ EAMann, debe ajustar su llamada wp_get_current_user() (o cualquier llamada que intente acceder a una función definida dentro de pluggable.php ) dentro de la acción 'plugins_loaded' .

Entonces, si estás colocando esto dentro de tu archivo functions.php , hazlo así:

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
}

Tenga en cuenta que no estamos interesados en lo que esta función devuelve . Estamos interesados en cuando esta función se ejecuta , es decir, después de el archivo pluggable.php se ha cargado y definido su función wp_get_current_user() .

Por lo tanto, no espere hacer nada con el valor de retorno para esta función. En su lugar, considera esta función como el punto de partida para todo lo que quieres hacer una vez que tengas la información del usuario actual.

Haciéndolo en un plugin

En aras de la integridad, a continuación le indicamos cómo accederá a una función conectable similar desde el contexto de su propio complemento:

(ponga esto dentro de un archivo .php dentro de su carpeta 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();

He usado esta técnica con éxito para un tipo muy simple de complemento "Próximamente" que redirige al usuario a una página específica si no ha iniciado sesión con wp_safe_redirect() .

    
respondido por el Tom Auger 05.04.2013 - 16:59
3

El problema es que está intentando cargar el código directamente en lugar de con un enlace de WordPress. WordPress carga un montón de código en un orden específico (puede ver la lista de acciones activadas en una solicitud típica en el Códice ).

Al intentar disparar tu código directamente, estás ejecutando justo antes de que se cargue pluggable.php . Y usted no debería tratar de include() este archivo directamente. Deja que WordPress haga eso por ti.

En su lugar, defina una función que obtenga la información del usuario:

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; 
}

Luego puede usar esta función en cualquier parte de su tema sin problema. Por ejemplo:

echo wpse_58429();

Si necesitas usar $current_user en otro código, asegúrate de disparar ese código con una acción de WordPress ... no lo llames directamente o se ejecutará antes de que la función esté disponible.

    
respondido por el EAMann 16.07.2012 - 17:37
0

Parece que estás cargando tu código antes de que ciertas funciones estén disponibles. ¿Has probado?

 global $current_user; 
 //print_r($current_user); //all user related information
echo $current_user->ID; //get current user id 
    
respondido por el Innate 13.07.2012 - 23:38
0

Simplemente agregue esta función a su archivo .php de complemento

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

Luego llámalo donde quieras para obtener el estado de inicio de sesión del usuario. Por ejemplo:

echo is_logged_in();
    
respondido por el mahdi azarm 23.07.2017 - 01:24

Lea otras preguntas en las etiquetas