Wie kann ich so etwas zum Laufen bringen?
// in a plugin / theme:
// This imaginary function will make WordPress think that the
// current request is a 404.
// Ideally this function could be ran anywhere, but realistically it
// will probably have to be before the template_redirect hook runs.
generate_404_somehow();
// later...
add_action('template_redirect', function() {
// should be "true"
var_dump(is_404());
});
Grundsätzlich möchte ich WordPress unter bestimmten Bedingungen anweisen, seine 404-Vorlage (die ich später einbinden kann, wenn ich möchte) anstelle der Vorlage anzuzeigen, die gerade geladen wird (z. B. eine Seite oder ein Archiv).
Ich weiß, ich könnte einfach 302
zu einer nicht existierenden Seite umleiten, aber das ist sehr chaotisch. Ich könnte einen 404
HTTP-Header auch manuell senden , aber dann kann ich die schöne 404-Seite von WP nicht verwenden (ich habe bereits Dinge, die sich in is_404()
diese Notwendigkeit einfügen, um zum richtigen Zeitpunkt ausgelöst zu werden).
404
. Ich bin mir auch sicher, dass ich es in Zukunft wieder brauchen werde.Antworten:
Dadurch wird natürlich Ihre gesamte Seite an die 404-Vorlage gesendet. Ich weiß nicht, unter welchen Bedingungen dies feuern soll oder nicht.
Oder um vorsichtiger zu sein (siehe Kommentare) ...
quelle
$wp_query->set_404()
auch ausgeführt$wp_query->init_query_flags()
, wodurch alle anderenis_*
Flags auf false gesetzt werden.is_single()
undis_archive()
return false, so dass jeder Haken , die sie korrekt sind zu überprüfen und fügen Sie keine Extramaterial auf der 404 - Seite (wie die „Weiter“ und „Zurück“ Links). Dies hängt jedoch von Plugins und Themes ab.$wp_query->set_404()
in meiner Funktion sollte dies abdecken. Ich gehe davon aus, dass Sie sich dazu entschlossen haben.Die andere Antwort von s_ha_dum setzt den HTTP-Header-Status nicht auf 404 Not Found . Dies fügt
status_header( 404 )
der Funktion hinzu.status_header()
quelle
nocache_headers()
wie in gesehenWP::handle_404()
.Was scheint zu funktionieren:
Dies scheint die HTTP-Header zu setzen und die richtige Vorlage zu laden (mit
is_404()
true).quelle