Hide a user from WordPress

时间:2016-06-22 作者:WiTon Nope

我正在使用以下代码从WordPress用户列表中隐藏用户:

add_action( \'pre_user_query\', \'ap_pre_user_query\' );
function ap_pre_user_query( $user_search ) {
    $user = wp_get_current_user();
    if ( $user->ID != 1 ) { // Is not administrator, remove administrator (you can add any user-ID)
        global $wpdb;
        $user_search->query_where = str_replace( 
            \'WHERE 1=1\',
            "WHERE 1=1 AND {$wpdb->users} . ID<>1", 
            $user_search->query_where 
        );
    }
}
代码运行良好,但已计入用户列表;它显示(2),而我只想为客户的用户显示(1)。此外,可以通过访问作者URL从前端访问:

http://domain.com/author/USER
有什么建议吗?

1 个回复
SO网友:Tim Malone

您想在以下三个位置对WordPress隐藏用户:

管理员中的用户列表该用户列表上方的计数前端用户的作者存档正如您所提到的,您已经解决了第1项,并包含了该项的代码。因此,我将提供第2项和第3项的解决方案。

您要隐藏的用户是一个用户ID为1的管理员,因此我正在进行此假设。我还假设它是那里唯一的管理员用户。对于以后遇到此答案的任何人,如果要隐藏其他用户/用户组,则需要相应地修改代码。

修改用户计数不幸的是count_users() function 不可过滤。但是,用户计数显示在指向不同用户视图的超链接中,这些视图由WP_List_Table::views() 作用这些视图可以使用动态过滤器进行过滤,views_{$this->screen->id}, 在用户页面上,转换为views_users.

因此,我们将连接到此过滤器并执行两件事:完全删除Administrator视图,并在All视图中将计数减少1。只有当前登录的用户不是我们的超级用户(ID==1),我们才会这样做。

add_filter( \'views_users\', \'wpse230495_modify_user_views\' );

function wpse230495_modify_user_views( $views ) {

  if( get_current_user_id() === 1 ) { return $views; } // bow out if we\'re user number 1

  // filter the \'all\' count and remove 1 from it
  $views[\'all\'] = preg_replace_callback(
    \'/\\(([0-9]+)\\)/\',
     function( $matches ){ return \'(\' . ( $matches[1] - 1 ) . \')\'; },
     $views[\'all\']
  );

  // filter the \'administrator\' count and remove 1 from it
  $views[\'administrator\'] = preg_replace_callback(
    \'/\\(([0-9]+)\\)/\',
     function( $matches ){ return \'(\' . ( $matches[1] - 1 ) . \')\'; },
     $views[\'administrator\']
  );

  // alternatively, uncomment next line if you want to remove Administrator view completely
  // unset( $views["administrator"] );

  return $views;

}
在前端隐藏用户的作者档案这有点简单。我们要做的就是template_redirect 如果访问者试图访问我们的特权用户的作者档案,则将其重定向回主页的操作。

add_action( \'template_redirect\', \'wpse230495_author_archive_redirect\' );

function wpse230495_author_archive_redirect() {
   if( is_author() && get_the_author_meta(\'ID\') === 1 ) {
       wp_redirect( home_url(), 301 );
       exit;
   }
}
以上代码块是在WordPress 4.5.3上测试的(尽管在我的测试安装中只有一个用户-如果您的结果不同,请告诉我!)。

相关推荐

set a user-meta key as avatar

我有一个名为“meta kay”的用户;阿凡达;;此值包含用户上载的图像的URL。如何将此元值设置为用户化身?我使用此代码,但不工作add_filter( \'get_avatar\', \'slug_get_avatar\', 10, 5 ); function slug_get_avatar( $avatar, $id_or_email, $size, $default, $alt ) { //If is email, try and find user ID