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.
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 Titelstatus_header()
: sendet einen HTTP 404-Headerget_template_part()
: Zeigt die 404-Vorlage an
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.
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();
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