Ich muss auf einigen Posts eine 404 erzwingen, basierend auf den Bedingungen. Ich habe es geschafft (obwohl ich nicht weiß, ob ich es richtig gemacht habe) und ich bekomme eine 404.php
Vorlage, die wie erwartet geladen wird.
Mein Code:
function rr_404_my_event() {
global $post;
if ( is_singular( 'event' ) && !rr_event_should_be_available( $post->ID ) ) {
include( get_query_template( '404' ) );
exit; # so that the normal page isn't loaded after the 404 page
}
}
add_action( 'template_redirect', 'rr_404_my_event', 1 );
Code 2 aus dieser verwandten Frage - das gleiche Problem:
function rr_404_my_event() {
global $post;
if ( is_singular( 'event' ) && !rr_event_should_be_available( $post->ID ) ) {
global $wp_query;
$wp_query->set_404();
}
}
add_action( 'wp', 'rr_404_my_event' );
Mein Problem:
Obwohl es gut aussieht , erhalte ich einen Status, 200 OK
wenn ich die Netzwerkregisterkarte überprüfe. Da es sich um einen Status handelt 200
, befürchte ich, dass Suchmaschinen diese Seiten auch indizieren könnten.
Erwartetes Verhalten:
Ich möchte, dass ein Status 404 Not Found
gesendet wird.
200
.Antworten:
Sie können die Wordpress-Funktion verwenden
status_header()
, um denHTTP/1.1 404 Not Found
Header hinzuzufügen .Ihr Code 2- Beispiel wäre also:
Diese Funktion wird zum Beispiel in diesem Teil verwendet:
von der
wp
Klasse in/wp-includes/class-wp.php
.Versuchen Sie also, dieses modifizierte Code 2- Beispiel zusätzlich zu Ihrem
template_include
Code zu verwenden.quelle
Code 2
Ihnen gepostete Snippet funktioniert einwandfrei. Demset_header()
fehlte was.set_header()
auf hinzufügenHTTP/1.1 404 Not Found
, haben aberstatus_header()
in Ihrem Code verwendet?Dieser Code hat bei mir funktioniert:
quelle
global $wp_query;
$wp_query->is_404 = true;
Ich würde nicht empfehlen, einen 404 zu erzwingen.
Wenn Sie sich Sorgen um Suchmaschinen machen, warum nicht einfach ein "no-index, no-follow" -Meta auf diesen Seiten erstellen und es mit robots.txt blockieren?
Dies ist möglicherweise eine bessere Möglichkeit, die Anzeige von Inhalten zu blockieren
Sie könnten diese Methode wahrscheinlich auch zum Laden verwenden,
404.php
aber ich bin der Meinung, dass die Verwendung einer Seitenvorlage eine bessere Option ist.Quelle
quelle
locate_template()
stattdessen mit wechseln . Ich denke, dasrobots.txt.
ist keine garantierte Methode zum Schutz vor Indexierung. Einige Suchmaschinen nehmen die Seite möglicherweise noch auf. Ich möchte, dass die Seite wie eine normale 404-Seite aussieht. Außerdem werden die Posts dynamisch hinzugefügt. Das Bearbeiten derrobots.txt
Datei wird weitere Probleme verursachen.Meine Lösung:
quelle
Statuscodes werden in den Headern von HTTP-Anforderungen gesendet. Ihre aktuelle Funktion ist in einen Hook eingebunden, der zu spät aufgerufen wird.
Sie sollten versuchen, Ihre Funktion
rr_404_my_event()
in Aktion zu setzensend_headers
.Ich bin mir nicht sicher, ob es zu diesem Zeitpunkt überhaupt möglich ist, die Post-ID zu überprüfen, aber probieren Sie es aus:
quelle
404.php
könntest du in deinem einen anderen ladenheader.php
, zB<?php get_header('404'); ?>
ladenheader-404.php
. In dieser Überschrift würden Sieheader('HTTP/1.0 404 Not Found');
im<head>
Abschnitt hinzufügen .Ich wollte mitteilen, wie ich die markierte Lösung verwendet habe
Ich habe dies getan, um alle Benutzertypen vom Administrator zu trennen. In diesem Projekt kann nur der Administrator die
author.php
Seite sehen.Ich hoffe es konnte jemand anderem helfen.
quelle