如何隐藏 WooCommerce 客户或按用户角色的管理栏

已发表: 2020-02-23

按角色隐藏管理栏 向订阅者、客户和非管理员用户隐藏 WooCommerce 中的管理栏以避免访问 WordPress 仪表板非常重要。 本教程中突出显示了隐藏 WordPress 管理栏的方法——如何在 WordPress 中隐藏管理栏。这些相同的技术可以在 WooCommerce 网站中使用,但每种情况都有一些条件。

WooCommerce 隐藏客户或订阅者的管理栏

隐藏 WooCommerce 管理选项的管理栏

要为管理员隐藏管理栏,可能有一些插件也可以提供帮助,并且也适用于 WooCommerce。

在使用插件之前,您应该首先在 WordPress 管理仪表板中尝试这个快速选项。这个选项也适用于 WooCommerce 网站,没有区别。

转到管理员用户配置文件设置并检查此选项以在查看站点时为管理员隐藏管理栏。 WooCommerce 隐藏客户或订阅者的管理栏

取消选中此选项并保存设置,然后访问前端以查看管理栏是否已隐藏。 正如您在下图中看到的那样,在查看站点时,管理栏将对管理员用户隐藏。

WooCommerce 隐藏客户或订阅者的管理栏

这是了解您未登录时网站外观的重要方式。

当您尝试调试与标题显示相关的一些 WooCommerce 主题问题时,它也会有所帮助。

WooCommerce 隐藏管理员条形码选项

要为 WooCommerce 客户和订阅者实现相同的功能,我们需要使用'show_admin_bar'过滤器来返回 false,即我们隐藏了管理栏。

有多种方法可以使用这个钩子,还有一个同名的函数可以工作。

函数show_admin_bar( bool $show )采用一个Boolean参数( True 或 False ),可按如下方式使用:

 show_admin_bar(假);

此代码添加到主题的 functions.php 文件时,将隐藏管理栏。 我已经安装了 WooCommerce 店面主题对其进行了测试,它完美地隐藏了管理栏。

WooCommerce 隐藏客户或订阅者的管理栏

您可以进一步改进此功能并添加条件测试,允许管理员查看管理栏,而客户不应查看。

在这种情况下,您将有条件地使用客户角色或您要隐藏管理栏的站点上的任何其他角色进行测试。

您可以从“添加新用户”获取 WordPress 站点中可用的角色,最后一个选项具有“角色”下拉菜单:

wordpress 用户角色

为了获取当前用户角色,我写了一篇关于如何在 WordPress 中获取当前角色的教程,您可以在案例中使用它来获取客户用户角色并将show_admin_bar()函数设置为 false。

在这种情况下,您可以使用以下代码获取当前用户角色并有条件地检查用户角色是否为客户。

我在教程中分享的关于如何在 WordPress 中获取当前用户角色的代码,我们可以在这种情况下重新调整它的用途:

 add_action('wp_head', 'njengah_get_current_user_role');

功能 njengah_get_current_user_role() {

  if( is_user_logged_in() ) { // 检查是否有登录用户

   $user = wp_get_current_user(); // 获取&设置当前用户
   $roles = ( 数组 ) $user->roles; // 获取角色

   //返回$角色; // 返回当前用户的角色

     // 使用 print_r 进行测试
      打印('<pre>');
      print_r($角色);
       打印('</pre>');

    } 别的 {

          返回数组(); // 如果没有登录用户返回空数组

   }

}

当您通过添加到 functions.php 来测试此代码时,您应该会看到当前用户角色显示在数组中,如下图所示:

WooCommerce 隐藏管理员条形码选项

我们可以使用key [0]从数组中获取此用户角色,当我们稍微修改代码并打印出用户角色时,我们应该会看到打印出的用户角色,如下面修改后的代码所示:

 add_action('wp_head', 'njengah_get_current_user_role_print');

功能 njengah_get_current_user_role_print() {

        if( is_user_logged_in() ) { // 检查是否有登录用户

          $user = wp_get_current_user(); // 获取&设置当前用户

          $roles = ( 数组 ) $user->roles; // 获取角色

            回声$角色[0];

              } 别的 {

              返回数组(); // 如果没有登录用户返回空数组

       }

}

由于我们已经成功获得了用户角色,我们现在可以在show_admin_bar()函数中有条件地使用它来隐藏可以是任何角色的特定用户角色的管理栏。

为了说明,我们现在使用以下代码隐藏管理员角色的管理栏:

 add_action('wp_head','njengah_hide_admin_bar_for_administrator');

功能 njengah_hide_admin_bar_for_administrator() {

     if( is_user_logged_in() ) { // 检查是否有登录用户

       $user = wp_get_current_user(); // 获取&设置当前用户

         $roles = ( 数组 ) $user->roles; // 获取角色

          if( $roles[0] == 'administrator'){ //这里检查角色。 您可以将其替换为其他用户角色。 示例“客户”编辑器等

           回声$角色[0]; //将角色打印到屏幕以用于演示目的(应在生产中删除)

           show_admin_bar(假); //隐藏这个条件的角色

     }

        } 别的 {

           返回数组(); // 如果没有登录用户返回空数组

     }

}

当您将此代码添加到 functions.php 文件时,您将看到管理员角色像以前一样显示在屏幕上,并且管理员栏已被有条件地隐藏。

您可以将此管理员角色替换为客户,还可以在条件中添加几个条件测试,如下所示:

 add_action('wp_head','njengah_hide_admin_bar_for_customer');

功能 njengah_hide_admin_bar_for_administrator() {

if( is_user_logged_in() ) { // 检查是否有登录用户

              $user = wp_get_current_user(); // 获取&设置当前用户

                $roles = ( 数组 ) $user->roles; // 获取角色

                    if( $roles[0] == 'customer'){ //在这里查看角色。 您可以将其替换为其他用户角色。 示例“客户”编辑器等

                回声$角色[0]; //将角色打印到屏幕以用于演示目的(应在生产中删除)

                      show_admin_bar(假); //隐藏这个条件的角色

        }

        } 别的 {

                返回数组(); // 如果没有登录用户返回空数组

      }

}

与测试时的管理员案例一样,您应该看到角色名称显示为客户,并且隐藏了管理栏。

按当前用户功能隐藏管理栏

对所有用户隐藏管理栏的另一种方法期望管理员您可以将以下代码添加到 functions.php :

 如果(!current_user_can('manage_options')){

   show_admin_bar(假);

}

此代码使用current_user_can()条件测试,您可以将其编辑为不同的权限,例如对于客户,它应该如下所示:

 if ( ! current_user_can( 'read' ) ) {

   show_admin_bar(假);

}

这相当于 WordPress 中订阅者的角色。 WooCommerce 创建了两个角色——客户和商店经理。 客户相当于订阅者,因此在这种情况下,订阅者的能力是“读取”。

您可以从 – Roles & Capabilities 文档中查看 WordPress 用户的所有功能。 您可以从 WooCommerce 角色和功能文档中了解有关 WooCommerce 角色的更多信息。

在 WooCommerce 中实现代码以隐藏管理栏

在上面的代码中,我们已经详细解释了如何在 WooCommerce 中隐藏管理栏。

如果您注意到我使用附加到'wp_head'add_action()用于测试目的,但在生产中,我们需要使用过滤器而不是操作挂钩。

在这种情况下,过滤器应该挂在'show_admin_bar'上,代码如下:

 add_filter('show_admin_bar', 'njengah_hide_admin_bar_for_customers', 20, 1);

功能 njengah_hide_admin_bar_for_customers($show){

           $user = wp_get_current_user(); // 获取&设置当前用户

            $roles = ( 数组 ) $user->roles; // 获取角色

               if( $roles[0] == 'administator'){ // 根据数组键 [0] [1] 和各自的值测试这里的用户角色

                       $显示=假;

                              返回$显示;

               }

}

您还可以使用每个角色的功能来隐藏管理栏,过滤器将如下所示:

 /**

*隐藏其他角色的管理栏期望管理员

*/

add_filter('show_admin_bar', 'njengah_hide_admin_bar_others_expect_admin', 20, 1);

功能 njengah_hide_admin_bar_others_expect_admin( $show ) {

    if ( ! current_user_can( 'administrator' ) ) $show = false;

     返回$显示;

    }

将此代码添加到 functions.php 以对其他角色(期望管理员)隐藏管理栏。

最后的想法

我们已经概述了如何使用各种方法在 WordPress 或 WooCommerce 中隐藏管理栏。 您可以选择其中一种方法并将代码添加到您的functions.php。 您还可以进一步修改代码以使其适用于不同的场景,例如对 WordPress 自定义用户角色隐藏管理栏。