Eine sanftere Möglichkeit, WordPress benutzerdefinierte URL zu haken

Ich habe ein Plugin namens foo , und ich möchte, wenn der Benutzer URL /hello eingegeben und es wird die Zeichenkette world angezeigt

Es gibt einen vorhandenen Post, der den folgenden Code verwendet

 if ($_SERVER["REQUEST_URI"] == '/hello') { echo "world"; die; } 

Aber das ist hacky, wie es sofort beendet wird. Zum Beispiel ignoriert es den shutdown Haken.

Gibt es eine bessere Herangehensweise, die es mir ermöglicht, die Ausgabe zu drucken und den Aktionslebenszyklus elegant zu verfolgen?

Solutions Collecting From Web of "Eine sanftere Möglichkeit, WordPress benutzerdefinierte URL zu haken"

So scheint es, dass Sie es so spät wie möglich verlassen möchten, bevor Sie sitemap.xml , was WordPress zurückgeben soll (unter bestimmten Umständen – zB wenn sitemap.xml angefordert wird).

Es gibt zwei Methoden – die weitgehend identisch sind – aber die Nutzung der WordPress-API erfolgt in unterschiedlichem Maße.

Derselbe Grundsatz gilt für fast jedes Inhaltsformat (JSON, ICAL usw.) und nicht nur für XML

Methode 1: Fügen Sie einen Feed hinzu:

Das hat zur Folge, dass WordPress die Anfrage sofort “erkennt”. Leider lässt es Sie mit “Feed” in der URL – was Sie möglicherweise nicht wünschenswert sein. Bei ICAL-Kalendern denke ich beispielsweise, dass diese Methode gut funktioniert.

 add_action('init','eventorganiser_public_export'); function eventorganiser_public_export(){ add_feed('wpse73174', 'wpse73174_content_callback'); } 

Dann wird die Ausgabe von wpse73174_content_callback() und ist verfügbar unter www.example.com/feed/wpse73174/ (abhängig von Permalinks).

Methode 2: Manuelle Annäherung

Ein bisschen mehr “Hands on” ist es, um redirect_template Aktion. Es liegt an Ihnen, zu entscheiden, ob die Suchanfrage für den Inhalt gilt, den Sie bereitstellen möchten:

 add_action('template_redirect','maybe_wpse73174_content_callback'); function maybe_wpse73174_content_callback(){ if( /* we are after this content */ ){ wpse73174_content_callback(); } } 

Das Problem besteht nun darin, ob der Benutzer Ihren Inhalt anfordert. Sie müssen Ihre eigenen Rewrite-Regeln / Permastrukturen und Abfragevariablen hinzufügen, um die Abfrage zu erkennen. (Für JSON-Inhalte ist es recht nett, einen Endpunkt hinzuzufügen). Möglicherweise finden Sie diese von mir geschriebenen Artikel bei WP.Tuts relevant.

Der callback

Die Callback-function wpse73174_content_callback() ist erforderlich, um die Header (falls zutreffend) zu setzen, den Inhalt zu drucken und dann exit() ;

 function wpse73174_content_callback(){ echo 'Hello World'; exit(); }