In WordPress integrierte externe Seite gibt einen 404-Fehler zurück

7

Ich habe ein Skript, das ich über AJAX von meinem WordPress-Theme aus aufrufen möchte. Es basiert auf einigen zentralen WordPress-Funktionen, daher füge ich den WordPress-Blog-Header folgendermaßen hinzu:

define( 'WP_USE_THEMES', false );
require( '../../../../wp-blog-header.php' );

Irgendwann während der Verarbeitung von wp-blog-header.phpWordPress wird ein 404-Header gesetzt, der dazu führt, dass meine AJAX-Anforderung fehlschlägt, obwohl das von mir aufgerufene Skript vorhanden ist und Inhalt zurückgibt.

Ich habe seitdem status_header( 200 );nach diesem Snippet hinzugefügt , das den Status-Header wieder auf 200 ändert und das Problem löst. Es fühlt sich jedoch sehr nach einem Hack an. Ich habe mich nur gefragt, ob es eine empfohlene Lösung für dieses Problem gibt.

David Hancock
quelle
1
Ich denke, Sie erhalten intern einen 404-Header, weil WP_Query versucht, die angeforderte Seite aufzulösen, was nicht möglich ist. Ich würde nach einem Flag / const / trick suchen, damit WP_Query nicht ausgeführt / überladen wird, um Ressourcen nicht unnötig umsonst zu brennen.
hakre
Ich denke, das ist eine vernünftige Lösung. Ich bin auf dasselbe Problem in einer anderen Form gestoßen - beim Teilen von Code zwischen einer PHP-Anwendung und einer eng verwandten WordPress-Site. PHP würde einen falschen 404-Statuscode erzeugen. Die meisten Browser ignorieren den 404-Status, wenn Inhalte zurückgegeben werden. Der IE kann die Seite jedoch manchmal nicht rendern, wenn die Option "Freundliche HTTP-Fehlermeldung" aktiviert ist. Das Setzen von status_header ('200') nach dem Erfordernis von wp-blog-header.php hat das Problem behoben.
Jan Hettich
Es klingt nach einer schlecht gestalteten Architektur. Das Skript befindet sich außerhalb von WordPress, hängt aber von internen WordPress-Funktionen ab? Befindet sich das Skript auf demselben Server wie die WordPress-Installation? Wenn ja, warum nicht einfach in ein Plugin einfügen? Wenn nicht, sollte es BackPress enthalten . Wofür werden die WP-Funktionen verwendet? Vielleicht sollte Ihr Thema alle benötigten Daten übergeben, damit es nicht die WP-Funktionen verwenden muss.
Ian Dunn
Dies ist ein Alptraum für die Wartung. Die Verwendung der WP AJAX-Haken ist viel, viel einfacher und einfacher, weitaus weniger Aufwand
Tom J Nowell
Von welcher externen PHP-App rufen Sie WP auf?
Tom J Nowell

Antworten:

3

Sie sollten einschließen wp-load.php, nicht wp-blog-header.php(was nur für die Verwendung durch WordPress reserviert ist). Dies ist höchstwahrscheinlich die Ursache Ihres Problems.

Shea
quelle
Danke! Einige Tutorials sagen, wp-blog-header.php einzuschließen .. das war das Problem
yeahman
1

Ja, es gibt eine empfohlene Lösung für die Verwendung der WordPress-Funktion über AJAX, bei der die wp_ajaxHooks verwendet werden. Sie können ein sehr detailliertes Beispiel in meiner Antwort auf "Was ist die bevorzugte Methode zum Schreiben von AJAX-fähigen Plugins? " sehen.

Bainternet
quelle
1
Vielen Dank für Ihre interessante Antwort, aber das ist nicht das Problem, das ich habe. Ich rufe ein Skript außerhalb des WordPress-Kerns auf, das WordPress-Funktionen enthalten muss. Während dieses Vorgangs beschließt WordPress jedoch, einen 404-Header festzulegen. Entschuldigung, wenn meine Frage nicht sehr klar war.
David Hancock
0

Haben Sie, anstatt WordPress in 'Lösung A' aufzunehmen, darüber nachgedacht, es umgekehrt zu machen, indem Sie die überlegene / einfachere WP AJAX-API verwenden und dann 'Lösung A' in WordPress aufnehmen?

Das Aufrufen von wp-blog-header.php für AJAX ist ein schwerwiegender Fehler. Ich kann nicht betonen, wie groß die Kopfschmerzen sind, die Sie einführen, was Sicherheit und Wartung betrifft (z. B. zeigt diese Frage etwas davon).

Was ist die bevorzugte Methode zum Schreiben von AJAX-fähigen Plugins?

Auch wp-load.phpnicht einschließenwp-blog-header.php

Tom J Nowell
quelle