it-swarm.com.de

Einen Benutzer vor WordPress verstecken

Ich benutze den folgenden Code, um einen Benutzer aus der WordPress-Benutzerliste auszublenden:

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

Der Code funktioniert einwandfrei, wird jedoch in der Benutzerliste gezählt. es zeigt (2), während ich (1) nur für den Benutzer meines Kunden zeigen möchte. Außerdem kann vom Frontend aus auf die Autoren-URL zugegriffen werden:

http://domain.com/author/USER

Irgendwelche Vorschläge?

3
WiTon Nope

Sie möchten einen Benutzer an drei Stellen vor WordPress verstecken:

  1. Die Benutzerliste im Admin
  2. Die Anzahl über dieser Benutzerliste
  3. Das Autorenarchiv des Benutzers im Front-End

Wie du erwähnt hast, hast du Punkt 1 bereits gelöst und den Code dafür eingefügt. Daher werde ich die Lösungen für die Punkte 2 und 3 bereitstellen.

Der Benutzer, den Sie ausblenden möchten, ist ein Administrator mit der Benutzer-ID 1, daher arbeite ich an dieser Annahme. Ich habe auch angenommen, dass es der einzige Administrator ist. Wenn Sie später auf diese Antwort stoßen, müssen Sie den Code entsprechend ändern, wenn Sie einen anderen Benutzer/eine andere Benutzergruppe ausblenden möchten.

Ändern der Benutzeranzahl

Leider kann die Funktion count_users () nicht gefiltert werden. Die Anzahl der Benutzer wird jedoch in den Hyperlinks zu den verschiedenen Benutzern views angezeigt, die von der Funktion WP_List_Table :: views () ausgegeben werden. Diese Ansichten können mithilfe des dynamischen Filters views_{$this->screen->id} gefiltert werden, der auf der Benutzerseite in views_users übersetzt wird.

Wir werden uns also in diesen Filter einhängen und zwei Dinge tun: Entfernen Sie die Ansicht Administrator vollständig und verringern Sie die Anzahl in der Ansicht Alle um 1. Dies tun wir nur, wenn der aktuell angemeldete Benutzer nicht unser Superuser ist (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;

}

Autorenarchiv eines Benutzers im Front-End ausblenden

Das ist etwas einfacher. Hier müssen wir uns nur in die Aktion template_redirect einklinken, um einen Besucher zurück zur Homepage zu leiten, wenn er versucht, auf das Autorenarchiv unseres privilegierten Benutzers zuzugreifen.

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

Die obigen Codeblöcke wurden unter WordPress 4.5.3 getestet (allerdings mit nur einem Benutzer in meiner Testinstallation - wenn Ihre Ergebnisse variieren, lassen Sie es mich wissen!).

5
Tim Malone