可以获得当前登录的管理员的IP地址吗?

时间:2012-11-22 作者:Gaia

如果wordpress(3.4.x)安装只有一个管理员,如果有管理员登录,我如何从插件中获取当前登录管理员的IP?

换句话说:如果有管理员登录,我需要获取管理员的IP,并将此IP用于其他目的。请求不一定来自以管理员身份登录的人员。如果没有管理员登录,函数应返回空,因为我只需要管理员登录时的IP。

2 个回复
最合适的回答,由SO网友:Mridul Aggarwal 整理而成

此功能无法直接使用,您必须跟踪数据库内的登录(可能是暂时的)(&;检查瞬态是否可用。

function check_for_admin() {
    $user = wp_get_current_user();
    if(in_array(\'administrator\', $user->roles))
        set_transient(\'admin_ip\', get_ip(), 60*10);
}
add_action(\'init\', \'check_for_admin\');
之后,您可以使用get_transient(\'admin_ip\') &;检查是否可用

要检索IP,可以使用toscho的代码。

编辑:

这个60*10 在代码中,表示如果在过去10分钟内没有管理员处于活动状态,则认为他们都处于脱机状态&;清理数据库。

当用户手动注销时,也可以删除瞬态,您需要挂接到\'clear_auth_cookie\' 清理数据库的操作。

function clear_the_transient() {
    $user = wp_get_current_user();
    if(in_array(\'administrator\', $user->roles))
        delete_transient(\'admin_ip\')
}
add_action(\'clear_auth_cookie\', \'clear_the_transient\');
当只有1名管理员时,此代码将在您的情况下工作。但这段代码有一个大问题,它会从数据库中删除IP,即使有2个管理员在线&;其中只有一个注销。为了克服这种情况,您必须在数据库中存储用户id及其相应的上次活动时间。

SO网友:fuxia

和其他IP一样,管理员的IP也没有什么不同…

function get_ip() 
{
    $ip      = \'\';
    $sources = array (
        \'REMOTE_ADDR\',
        \'HTTP_X_FORWARDED_FOR\',
        \'HTTP_CLIENT_IP\',
    );

    foreach ( $sources as $source ) {
        if ( isset ( $_SERVER[ $source ] ) )  {
            $ip = $_SERVER[ $source ];
        } elseif ( getenv( $source ) ) {
            $ip = getenv( $source );
        }
    }

    return $ip;
}
确保validate the value.

结束

相关推荐

Multiple loops are not reset

我可爱的同事们再次设计了一款让我很难在Wordpress中找到它的东西。令人惊讶的是,这是我以前做过多次的事情;在一个页面上有最近的帖子和页面内容。主页是一个页面。在页面内容上方有三篇最近的帖子。对于帖子,我需要在<!--more--> 标签这个循环似乎工作得很好。稍后,在模板中,我循环查看实际页面内容。无论我做什么,它总是给我不可靠的结果。这是我的索引的精简版本。php/页。php模板(它们恰好相同):<div id=\"content\"> <?php g