向特定用户显示数据的最佳实践是什么?

时间:2013-11-08 作者:Designer 17

我正试图在wordpress上构建一个锁定页面(通过插件),根据登录者的不同显示不同的数据。基本上它有三个屏幕,如下所示:

如果您作为管理员(或具有管理员权限的人)登录,则会显示一个屏幕,其中仅包含管理员的信息和功能

  • 如果您作为默认用户(由管理员创建)登录,您将进入私人注册页面if elseif else 陈述就像这样if (current_user_can( \'manage_options\' )): 1, elseif ( 2 == $current_user->ID ): 2, else: 3, endif;.

    我想知道的是,我调用第二个函数的方式是否是最佳实践,或者是否有更好/更省钱的方法?谢谢你的帮助!;)

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

    要检查用户是否是特定用户,您有4个选项:

    检查“ID”

  • 检查nicename(slug)
  • 检查电子邮件
  • 检查用户登录
    • 所有这4个字段对于每个用户都是唯一的。

      因此,检查ID是一个选项,但这是最糟糕的:当创建用户时,管理员不知道ID,他在创建用户后查看ID,因此您可以在创建用户后编写代码。。。这很糟糕。

      其他3个选项稍微好一点:你可以在创建用户之前查看代码,例如:

      if ( \'standard_user\' === $current_user->user_nicename ) {
        // do something
      }
      
      然后,管理员必须创建用户,但要记住使用\'standard_user\' 作为用户nicename。

      然而,一旦你问起最佳实践,我不能说这是最佳实践,因为它需要硬编码:你在编写代码时需要管理员在创建用户类型特定字符串时进行操作。。。如果出现拼写错误呢?如果admin无法回忆起要使用的字符串是什么?

      如果您是为自己编写代码,那么使用它不会有太大的痛苦,但是如果您是为其他人(客户?)编写代码的话或者你计划分发你的代码,你当然应该用另一种方式。

      有不同的可能性,这是一种:

      首先,您必须考虑您通常为特定的标准用户添加的角色。

      假设用户应该是贡献者。

      激活插件时,创建自定义角色克隆贡献者功能。

      function myplugin_install() {
        $contributor = get_role(\'contributor\');
        $standard = add_role( \'standard\', \'Standard User\', $contributor->capabilities );
      }
      
      register_activation_hook( __FILE__, \'myplugin_install\' );
      
      然后,写下你的条件如下:

      $user = wp_get_current_user();
      
      if ( user_can($user, \'manage_options\') ) {
        // code for admin
      } elseif ( in_array( \'standard\', $user->roles ) ) {
        // code for your standard user 
      } else {
        // code for others
      }
      
      现在,当管理员创建标准用户时,只需从用户角色下拉列表中选择“标准用户”。

      PS:记住在插件停用时删除您的自定义角色:

      function myplugin_unistall() {
        remove_role( \'standard\' );
      }
      
      register_deactivation_hook( __FILE__, \'myplugin_unistall\' );
      

    结束

    相关推荐

    如何通过插件将代码包含到函数.php文件中

    我的函数中有很多自定义代码。php文件,我想做的是将所有这些移到一个插件中,例如myplugin函数。然后将该文件包含到主题函数中。php文件。我可以使用挂钩来完成这项工作,还是必须手动包含该文件。我之所以想将其作为插件,是因为我可以轻松禁用它,而无需编辑主题文件!