当插件在Pluggable.php之前加载时,如何在插件中调用wp_get_Current_User()?

时间:2012-07-13 作者:PAFoster

当前的结果是“PHP致命错误:调用未定义的函数wp\\u get\\u current\\u user()”,这很有意义,但没有帮助。

我需要使用$current\\u user。

以下是我当前使用的代码:

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

4 个回复
SO网友:Tom Auger

要添加到@EAMann的答案中,您需要包装您的wp_get_current_user() 调用(或尝试访问中定义的函数的任何调用pluggable.php) 在\'plugins_loaded\' 行动

如果你把这个放进你的functions.php 文件,这样做:

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
}
请注意,我们对该函数返回的内容不感兴趣。我们感兴趣的是该函数何时执行,即在pluggable.php 文件已加载并定义wp_get_current_user() 作用

所以,不要期望对这个函数的返回值做任何事情。相反,当您获得当前用户的信息后,可以将此函数作为您想要执行的所有操作的起点。

在插件中执行此操作

为了完整起见,下面是如何从您自己的插件上下文中访问类似的可插入功能:

(将其放入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();
我已经成功地将这种技术用于一种非常简单的“即将推出”类型的插件,如果用户没有使用wp_safe_redirect().

SO网友:EAMann

问题是您试图直接加载代码,而不是使用WordPress挂钩。WordPress按特定顺序加载一组代码(您可以看到典型请求中触发的操作列表in the Codex).

通过尝试直接启动代码,您可以在pluggable.php 已加载。你不应该include() 直接创建此文件。让WordPress为您做这件事。

相反,请定义一个获取用户信息的函数:

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; 
}
然后,您可以在主题中的任何位置使用此功能,而不会出现问题。例如:

echo wpse_58429();
如果需要使用$current_user 在其他代码中,请确保使用WordPress操作触发该代码。。。不要直接调用它,否则它将在函数可用之前执行。

SO网友:Innate

看起来您是在某些函数可用之前加载代码的。您是否尝试过:

 global $current_user; 
 //print_r($current_user); //all user related information
echo $current_user->ID; //get current user id 

SO网友:mahdi azarm

只需将此函数添加到插件中即可。php文件

function is_logged_in(){
    if(function_exists( \'is_user_logged_in\' )) {
        return is_user_logged_in();
    }
}
然后在任何你想获得用户登录状态的地方调用它。例如:

echo is_logged_in();

结束

相关推荐

Retrive post by tags PHP code

例如,我正在建设一个电影院网站。。对于电影-我在使用post-电影都是在那里发布的。。对于actors,我使用post\\u类型:persoane,分类法:lista。我怎样才能重温布鲁斯·威利斯在http://cinema.trancelevel.com/persoane/bruce-willis/例如,我有:http://cinema.trancelevel.com/the-cold-light-of-day-2012-2/ 这部电影有布鲁斯·威利斯的标签。。。。(这是wp中的regolar帖子)在布