Erkennen 404, bevor Header gesendet werden

Ich habe einen Code, der beim ersten Besuch eines Nutzers ein Banner anzeigt, und setzt dann einen Cookie, der verhindert, dass er erneut angezeigt wird.

Wenn die Seite jedoch einen 404-Fehler aufweist, legt die 404-Seite der angeforderten Ressource den Cookie fest und das Banner wird nicht angezeigt. Das Überprüfen von is_404() auf dem Init-Hook vermeidet diese Situation nicht.

Wie korrigiere ich dieses Problem und erkenne das 404 auf dem Init-Hook?

Solutions Collecting From Web of "Erkennen 404, bevor Header gesendet werden"

Verwenden Sie einen späteren Aktionshaken

Sie können Conditional Tags nicht verwenden, bevor der posts_selection Hook ausgeführt wurde (gemäß Codex), was direkt nach pre_get_posts und ziemlich kurz nach init geschieht.

Wäre es daher nicht einfacher, den Cookie zu einem späteren Zeitpunkt der Anfrage zu setzen, anstatt zu versuchen, den 404 früher zu erkennen (was ich auf Anhieb nicht wissen würde)?

Die wp Aktion sollte zum Beispiel früh genug sein.
Wenn ich Sie richtig verstehe, sollten Sie grundsätzlich den Cookie am Ende der Anfrage setzen können, da er nur auf die folgende Anfrage relevant wird.

[Weitere Informationen] Wie funktionieren Conditional Tags?

Bedingte Tags hängen von den booleschen Eigenschaften des öffentlichen “Abfragetyps” des Abfrageobjekts (Instanz von WP_Query ) ab, die standardmäßig auf ” false (siehe wp-includes / query.php, Zeilen 1008 ff. [Ab 3.5.1] ).
Diese Eigenschaften werden mit den korrekten Werten in der WP_Query -Methode von WP_Query parse_query , die direkt vor pre_get_posts (siehe wp-includes / query.php, Zeilen 1907 ff. [Ab 3.5.1] ).

Daher, obwohl der Codex anders vorschlägt, sollten Conditional Tags (die dafür nicht verbürgt sind) tatsächlich bereits in pre_get_posts Callbacks verwendet werden.
Definitiv nicht früher – init kommt nicht in Frage.