如何仅为管理员运行脚本,但在WordPress中的“/ wp-admin”之外?

时间:2011-10-06 21:36:57

标签: php wordpress cookies wordpress-plugin

在WordPress中,我正在尝试使用一个脚本,该脚本在我的插件目录中运行,并由浏览器通过其URL直接调用,例如: www.example.org/wp-content/plugins/myplugin/script.php 。该脚本仅适用于已登录的管理员。

我尝试做的是在脚本的最开头包含/wp-admin/admin.php,引导WordPress的功能,并检查是否有足够的权限。但是,在这个引导过程中,WordPress会将我重定向到登录屏幕,即使我已经登录也很困难。也就是说,因为 WordPress-authentification-cookie在/ wp-admin-之外不可用目录

所以,因为我的方法显然不起作用,我想知道:在admin-directory之外运行WordPress-admin-scripts的最佳做法是什么?是否有一些“包装器” -script里面/ wp-admin我可以使用,就像有admin-ajax.php的AJAX调用一样?或者甚至不是Wordpress,而只是我的服务器配置,auth-cookie仅在/ wp-admin中可用?

另外,请注意是注册admin-menu-item的选项,因为脚本应作为弹出窗口加载,而不能在菜单中使用。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

前一段时间,我created a function会检查某人是否已登录并拥有管理员权限,如果是,则会运行您想要的代码:

要使用它,请将此代码放在functions.php文件中:

<?php
function admin_level($user_login=''){
    global $current_user;
    get_currentuserinfo();

    if(current_user_can('level_10')) {
        if ($user_login!=''){
            if($current_user->user_login==$user_login){
                return true;
            } else {
                return false;
            }
        } else {
            return true;
        }
    } else {
        return false;
    }
}
?>

现在,这是一个如何创建“测试区域”的示例,其中仅当用户“admin”已登录且具有管理员权限时才运行代码:

<?php

//Test Area

   //Only run following code if logged in as admin

   if( admin_level($user_login = 'adminuser') ){

      //run your awesome code right here, adminuser!!!

   }

//End Test Area

?>

我在开发/测试期间一直使用它,当我登录时只需要运行一些东西,而没有其他用户看到它。

谢谢,我希望这有帮助!

答案 1 :(得分:0)

好。因为似乎没有人知道如何处理这个问题,所以我只是误用admin-ajax.php作为我的管理脚本的包装脚本。这不是一个非常漂亮的解决方案,但它确实有效。

请注意,在AJAX模式下使用时某些功能无法按预期工作,例如wp_die。如果有人必须处理同样的问题:你需要重写这些函数以便在AJAX模式下工作。