web-dev-qa-db-fra.com

Cacher un utilisateur de WordPress

J'utilise le code ci-dessous pour masquer un user de la liste des utilisateurs de 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 
        );
    }
}

Le code fonctionne bien, mais il compte dans la liste des utilisateurs. il montre (2), alors que je veux montrer (1) uniquement pour l'utilisateur de mon client. De plus, il est possible d'y accéder à partir de l'interface en allant à l'URL de l'auteur:

http://domain.com/author/USER

Aucune suggestion?

3
WiTon Nope

Vous souhaitez masquer un utilisateur de WordPress à trois endroits:

  1. La liste des utilisateurs dans l'admin
  2. Le nombre au dessus de cette liste d'utilisateurs
  3. Archive de l'auteur de l'utilisateur sur le front-end

Comme vous l'avez mentionné, vous avez déjà résolu le point 1 et vous avez inclus le code correspondant. Je vais donc vous fournir les solutions pour les points 2 et 3.

L'utilisateur que vous souhaitez masquer est un administrateur avec un ID utilisateur égal à 1, je travaille donc sur cette hypothèse. J'ai également supposé que c'est le seul utilisateur administrateur là-bas. Si vous rencontrez cette réponse ultérieurement, vous devrez modifier le code en conséquence si vous souhaitez masquer un autre utilisateur/groupe d'utilisateurs.

Modification du nombre d'utilisateurs

Malheureusement, la fonction count_users () n'est pas filtrable. Toutefois, les comptes d'utilisateurs sont affichés dans les liens hypertextes vers les différents utilisateurs views , qui sont générés par la fonction WP_List_Table :: views () . Ces vues peuvent être filtrées à l'aide d'un filtre dynamique, views_{$this->screen->id}, qui sur la page des utilisateurs se traduit par views_users.

Nous allons donc nous accrocher à ce filtre et faire deux choses: supprimer complètement le Administrateur et diminuer le nombre de 1 dans le Tous . Nous ne le ferons que si l'utilisateur actuellement connecté n'est pas notre superutilisateur (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;

}

Masquage des archives d'auteurs d'un utilisateur sur le front-end

C'est un peu plus simple. Tout ce que nous allons faire ici, c'est nous lier à l'action template_redirect pour rediriger un visiteur vers la page d'accueil s'il tente d'accéder à l'archive de l'auteur de notre utilisateur privilégié.

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;
   }
}

Les blocs de code ci-dessus sont testés sur WordPress 4.5.3 (bien qu’avec un seul utilisateur dans mon installation de test - si vos résultats varient, faites-le moi savoir!).

5
Tim Malone