为什么print_r在站点上的多个位置返回$classObj->userObj

时间:2014-02-17 作者:LPH

我正在尝试学习如何为我正在开发的桥接插件解释print\\r的结果。

Background

我的第一个问题是setting editor capabilities receiving administrator capabilities. 在工作中,我意识到only the first two capabilities in the array were being added. 现在已修复此问题。然而

Moving Forward

现在,我开始返回并查看正在进行的调用,以及在wp\\u die、var\\u dump和print\\r中插入的调用,以查看结果是否符合预期。

现在问题来了。The results are not as expected and maybe someone can explain why.

The Code

文件包含函数get\\u userdata($user\\u id)。在此文件中,检查is\\u numeric、empty和if$user\\u id返回false。下一步,如果$然后,用户调用一个类,该类的方法称为fillUserData。

fillUserData如下所示:

    public static function fillUserData($visitor, $classObj, $user_id) {
    if( $user_id != 0 ) {

        global $XF;

        $userModel = $XF->getModelFromCache(\'XenForo_Model_User\');

        $user = $userModel->getUserById($user_id, array(\'join\' => XenForo_Model_User::FETCH_USER_FULL));

        $classObj->userObj = $user;

            echo \'<pre>\';
            echo $user_id;
            print_r( $classObj->userObj[username] );
            echo \'</pre>\';
            //die();

        if( $user_id == $visitor->get(\'user_id\') ) {


            // doing stuff

            return $classObj;

        } else {

            // doing stuff

            return $classObj;

        }
    } 

    // return false;
    echo \'This is a mess\';

}   
在这一点上,我感到困惑。我希望只返回一个数组。但在主题中返回了几个主题(包括默认主题等)。

第一个显示在主题的左上角,这绝对是我所期望的。[更新:澄清一下,此阵列绝对是为当前登录的用户提供的]

    Array
(
[user_id] => 3
[username] => Albert
[email] => albert@tuxreports.com
[gender] => 
[custom_title] => 
[language_id] => 1
[style_id] => 0
[timezone] => Europe/London
[visible] => 1
下一篇文章位于其他用户完成的第一篇文章上方。这完全不是我所期望的。[更新:即使没有人登录该站点,此数组也会显示]

    Array
(
[user_id] => 1
[username] => LPH
[email] => lph@tuxreports.com
[gender] => 
[custom_title] => 
[language_id] => 1
[style_id] => 0
[timezone] => Europe/London
[visible] => 1
[user_group_id] => 2
这些数组将返回到另一个用户所做的另一篇文章上方。。。。而不是我所期望的,因为有一个if( $user_id != 0 ) 有条件的

如果我进入一个页面,那么打印显示的是文章的作者,而不是我登录的用户。。。

My question are:

我是否使用了$classObj->userObj=$user错误?为什么WordPress博客文章的作者会在print\\r中显示,而$user conditional建议不应该显示?

希望这是足够的信息,有人可以向我解释为什么这没有按预期工作。我的知识很薄弱(充其量)。当然,如果我不应该在可插入函数中调用该类,那么请建议一个更好的方法。

非常感谢。

1 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

get_userdata 可以并且是用于获取不同上下文中不同用户的数据。您似乎期望它只返回一个“预期”用户的数据,但我不知道为什么。您看到的是来自这些不同上下文的转储数据——例如,对于登录用户,对于帖子作者,等等get_userdata 用于依次检索关于其中每个的信息。

如果你看看法典,get_userdata 可以传递用户ID。如果以这种方式使用(例如通过插件或主题),它将返回有关传递给它的任何用户ID的数据。get_userdata Core还多次使用它来获取关于不同用户的数据,但不总是当前登录的用户(如果您是这样问的话)。

如果您希望它总是返回同一个用户,那么您使用它是错误的。很难说清楚你是如何把事情贴得如此离题的。您可能正在寻找get_currentuserinfo(), 它也是可插拔的。

结束

相关推荐