web-dev-qa-db-de.com

Eingeschränkte Seite auf 404 umleiten

Gibt es eine Möglichkeit, eine 404-Seite anzuzeigen, wenn der aktuell angemeldete Benutzer nicht über die erforderliche Berechtigung zum Anzeigen der Seite verfügt? Ich suche nach einer PHP Methode, so etwas wie

if( !current_user_can('administrator') ) { show_404(); exit(); }

Ich habe überlegt, eine Weiterleitung zu verwenden, möchte die URL jedoch beibehalten.

20
Evan Yeung

Ich konnte einen 404-Fehler anzeigen, indem ich den folgenden Code in meinem Header verwendete.

<?php
  global $wp_query;
  $wp_query->set_404();
  status_header( 404 );
  get_template_part( 404 ); exit();
?>

Um es aufzuschlüsseln:
$wp_query->set_404(): teilt der wp_query mit, dass dies ein 404 ist, dies ändert den Titel
status_header(): sendet einen HTTP 404-Header
get_template_part(): Zeigt die 404-Vorlage an

47
Evan Yeung

Warum erstellen Sie keine Seite, auf der eine Fehlermeldung angezeigt wird, und leiten den Benutzer dann zu dieser Seite weiter? Hier ist ein einfacher Weg, dies zu erreichen:

Öffnen Sie die Datei 404.php und fügen Sie diese Zeilen oben hinzu:

/**
 * Template Name: 404 Page
 */

Erstellen Sie eine Seite mit der Vorlage 404 Page. Leiten Sie dann Benutzer weiter:

if ( !current_user_can('administrator') ) {
    $404_page = get_permalink( $404_page_id );
    wp_redirect( $404_page );
    exit();
}

Der Grund, warum Sie eine Seite für eine 404-Anfrage verwenden sollten, ist: In WP 404-Seite ist tatsächlich eine Seite, nach der nicht existiert , WP suchen muss Der gesamte Inhalt vor der Rückgabe der 404-Seite und diese Arbeit ist eine Verschwendung von Ressourcen. Verwenden Sie eine vorkonfigurierte Seite, mit der Sie Ihr Blog möglicherweise schneller ausführen können.

2
Anh Tran

Ich hatte eine ähnliche Anforderung, bei der Benutzer nicht auf die Seite author.php zugreifen dürfen, basierend auf der Rolle, in der sich ein Benutzer befindet. Ich registriere die Aktion template_redirect, um meine Prüfungen durchzuführen und zur Seite 404 umzuleiten, noch bevor die eigentliche Seite geladen wird.

Anmeldung:

add_action( 'template_redirect', [ $this, 'handle_inactive_users']);

Handler:

public function handle_inactive_users() {
    global $wp_query;
    if ( $wp_query->is_author() ) {
        $user = $wp_query->get_queried_object();
        if ( is_a( $user, \WP_User::class ) && $user->has_cap( 'inactive' ) ) {
            $wp_query->set_404();
            status_header( 404 );
            get_template_part( 404 );
            exit();
        }
    }
}

Wenn Sie nur das folgende Codefragment in der Mitte des Vorlagenteils verwenden, wurde die Seite möglicherweise bereits teilweise gerendert und Sie werden nicht auf eine 404-Seite umgeleitet. Also besser in der Aktion template_redirect -

$wp_query->set_404();
status_header( 404 );
get_template_part( 404 );
exit();
0
Kalyan

Sie können diesen Code in die Datei 404.php im aktuell verwendeten Theme-Verzeichnis (wp-content/themes /..../ 404.php) schreiben:

<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location: ".get_bloginfo('url'));
exit();
?>

Dieser Code muss am Anfang der Datei (ohne vorherige Zeichen) beginnen.

Link zum Original: So leiten Sie Ihre 404-Seite auf die Homepage in WordPress um

0
Jan Čejka