Gibt es irgendwelche Haken, die die 404-Logik verändern?

27

Vorausgesetzt, Sie haben eine 404-Seite in Ihrem Thema definiert, zeigt Wordpress eine 404-Seite an, wenn "Tag" in $ wp_query-> query_vars definiert ist und es keine Beiträge gibt, die mit diesem Tag übereinstimmen.

Ich schreibe ein Plugin, das neben Beiträgen auch einige Informationen auf jeder Seite anzeigt. Ich möchte die 404-Logik so ändern, dass die 404-Seite angezeigt wird, wenn es keine Posts gibt, die mit einem Tag übereinstimmen, und das Plugin keine Daten abrufen kann, die mit diesem Tag übereinstimmen. Wenn das Plugin Daten findet, möchte ich eine normale Seite anzeigen, unabhängig davon, ob sich auf dieser Seite Beiträge befinden oder nicht ...

Ich habe gegoogelt, Code gelesen, den Codex gelesen und hier herumgestöbert und konnte nicht herausfinden, wo Wordpress diese 404 auslöst und wie ich sie überschreiben kann. (Ich habe das Gefühl, es könnte etwas mit status_header () in functions.php zu tun haben, aber es ist nicht klar, wie und wann ich mich einklinken muss).

Jede Hilfe / Ideen / Aufklärung geschätzt.

Vielen Dank,

~ Patch

Patch
quelle

Antworten:

29

Nachdem ich mich ein bisschen mehr mit Code und Googeln beschäftigt hatte, fand ich die Antwort. Es ist in diesem Thread enthalten (siehe den Beitrag von Otto42), aber für den Datensatz überschreibt das Hinzufügen des Folgenden zu Ihrem Plugin die 404-Behandlung für die von Ihnen angegebenen Bedingungen:

add_filter('template_redirect', 'my_404_override' );
function my_404_override() {
    global $wp_query;

    if (<some condition is met>) {
        status_header( 200 );
        $wp_query->is_404=false;
    }
}

Beachten Sie, dass Sie "is_404" auf "false" setzen müssen, bevor PHP Header ausgibt. Deshalb ist es eine gute Idee, diese in die template_redirect-Logik einzubinden.

~ Patch

Patch
quelle
5

Ich musste dasselbe für ein benutzerdefiniertes Projekt tun, bei dem es immer 200 Seiten gab, und fand heraus, dass Sie dies auch einfach oben in Ihre Vorlagendatei einfügen können (über get_header ();)

global $wp_query;
status_header( 200 );
$wp_query->is_404=false;
keine Eingabe
quelle
1
Groß! Das hat bei mir funktioniert. Ich habe mein Skript erstellt und es hat 404 generiert. Ich habe versucht, Skripte von wp-> main auszuführen, aber das war keine sehr saubere Lösung. Das hat bei mir funktioniert:// configuration require('./wp-load.php'); // init WP (inits objects, language and stuff). wp(); // fix title (this is not 404) $wp_query->is_404 = false; // doesn't fix the actual 404 status status_header( 200 ); // but this does :-)
Nux
1

Erstellen Sie eine 404.phpVorlagendatei in Ihrem Design und passen Sie sie nach Bedarf an (fügen Sie Ihre Plugin-Ausgabe hinzu oder was auch immer). Sie erwähnen in Ihrem Thema definiert , was genau mit diesem Ansatz für Sie falsch ist?

Codex, der eine Fehler 404-Seite erstellt

Rarst
quelle
Ich suche nach einer Möglichkeit, die Umstände zu ändern, unter denen diese 404-Seite ausgelöst wird. Im Moment wird die Seite 404 angezeigt, wenn Wordpress keine Beiträge findet, die mit einem Tag in den Abfragevariablen übereinstimmen. Ich möchte zusätzlichen Code einfügen, der sicherstellt, dass die 404-Seite nur angezeigt wird, wenn Wordpress keine Beiträge findet und mein Plugin keine zusätzlichen Informationen zum Anzeigen findet.
Patch
Der Zweck von 404 ist, dass der Besucher weiß, dass der Link falsch ist, und dass Sie ihn protokollieren und korrigieren (falls erforderlich). Sie möchten dem Besucher weder mitteilen, dass er einen defekten Link verwendet, noch sich dessen bewusst sein. Das Anzeigen von Informationen zu 404 funktioniert einwandfrei. Die Entführung ist keine Voraussetzung. Warum also die Mühe machen? Ich versuche nur, Ihre Logik und / oder technischen Details zu erfassen.
Rarst
1
Ich suchte nach einer Möglichkeit, die Definition der "falschen" Seiten zu ändern. Die Site, die ich baue, hat eine Blog-Komponente, aber das ist noch nicht alles. Ich verwende Wordpress-Tags sowohl zum Anzeigen von Wordpress-Posts als auch zum Aufrufen zusätzlicher Inhalte über das Plugin. Ich möchte einen 200-Statuscode zurückgeben, wenn entweder a) Beiträge vorhanden sind oder b) mein Plug-in Elemente zur Anzeige findet, die dem Tag entsprechen. Daher die Notwendigkeit, die Logik neu zu verkabeln. Ungeachtet dessen, danke, dass du dir die Zeit genommen hast, eine Antwort zu schreiben - entschuldige, dass mein Problem so seltsam war, dass ich eine kompliziertere Antwort brauchte :-)
Patch