【问题标题】:How do I run an script only for admins, but outside of "/wp-admin" in WordPress?如何仅为管理员运行脚本,但在 WordPress 中的“/wp-admin”之外运行?
【发布时间】:2011-12-02 14:31:19
【问题描述】:

在 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 的最佳做法是什么? 是否有一些“包装器” -我可以使用 /wp-admin 中的脚本,比如有 admin-ajax.php 用于 AJAX 调用?或者它甚至不是 Wordpress,而只是我的服务器配置,即 auth-cookie 仅在 /wp-admin 中可用?

另外,请注意不是注册管理菜单项的选项,因为脚本将作为弹出窗口加载,并且在菜单中不可用。 p>

提前感谢您的帮助。

【问题讨论】:

    标签: php cookies wordpress


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      不久前,我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
      
      ?>
      

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

      谢谢,希望对你有帮助!

      【讨论】:

        猜你喜欢
        • 2010-10-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-12
        • 1970-01-01
        • 2019-05-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多