Welcher Fluss eignet sich für benutzerdefinierte Daten aus URL in WP_Query?

14

Ich habe einen mehrstufigen Prozess, der komplexes Facettieren in WP-Abfragen integriert. Das Problem ist - je tiefer ich komme, desto unschärfer wird mir, wie es funktionieren soll , und ich könnte eine Richtlinie verwenden, anstatt erfinderisch zu sein (und mir ein Loch zu graben).

Allgemeine Stadien, die ich habe (Pseudocode, aber fast real):

  1. Wert von URL abrufen (etwas einfaches wie person=1)
  2. Wert verarbeiten und benutzerdefinierte Abfrageanweisungen anhängen ( $relationship_query[] = array('relationship' => 'person_to_cat', 'object' => 1 );)
  3. Abrufen der endgültigen benutzerdefinierten Abfrageanweisungen und Generieren der entsprechenden SQL-Anweisungen

Inzwischen habe ich eine Menge solcher Vorgänge (Beziehungen, Taxonomien, Daten) und sie werden zerbrechlich (eine Codeecke gibt keinen Wert an die Stelle, an der die andere Codeecke erwartet, dass er gefunden wird, und alles löst sich auf).

Die große Frage ist, welches Protokoll zum Weiterleiten, Empfangen, Speichern und Verarbeiten benutzerdefinierter Daten an WP über eine URL geeignet ist .

Kleinere Teile:

  • Wie kann ich sicherstellen, dass ich nicht mit WP-Interna kollidiere?
  • Wo und wie speichere ich Zwischendaten?
    • Unterschied zwischen queryund query_varsEigenschaften? Sie scheinen im Code fast gleich zu sein, aber sie tendieren dazu, unterschiedliche Werte und Methoden für query_varseinen zu verwenden.
Rarst
quelle

Antworten:

6

Ich denke, die WP-Funktion, die Sie suchen, ist add_rewrite_tag . Ziel ist es, Ihrer URL benutzerdefinierte GET-Parameter hinzuzufügen und diese automatisch in die URL aufzunehmen query_vars.

Beispielsweise können Sie dem Init-Hook Folgendes hinzufügen:

add_rewrite_tag('%person%','([^&]+)');

Für eine URL wie http://example.com?person=joe , die globale $wp_querywird

$wp_query->query_vars['person'] = 'joe'

Sie können auch eine Umschreiberegel hinzufügen , um die URL hübscher zu gestalten, z. B. http://example.com/person/joe

add_rewrite_rule('^person/([^/]*)/?','index.php?person=$matches[1]','top');

Weitere Informationen und Beispiele finden Sie in der Rewrite-API .

Fabien Quatravaux
quelle
2
Ich fand einige Zeit (endlich) über alle relevanten Code zu lesen in WPund WP_Queryund während es eine Menge Dinge passiert es, denke ich , dass add_rewrite_tag()scheint knappste Weise WP von benutzerdefinierten Abfrage var bewusst zu machen und spielen gut mit ihm.
Rarst
1
  1. Checken Sie die Datei wp-includes / class-wp.php aus, um alle reservierten query_vars zu überprüfen
  2. Ich bin mir nicht sicher, was Sie unter zwischengeschalteten Daten verstehen. Kannst du mehr erklären?
  3. WP lädt die Seite basierend auf einem query_string auf einer URL, die als Abfrage übersetzt wird. Anschließend werden sie von WP_Query verarbeitet, um zu bestimmen, welche query_var verwendet wird.

Beispiel: Wenn Sie eine Seite mit /? Seitenname = about laden, verarbeitet WP die Abfragezeichenfolge und stellt fest, dass die verwendete Abfragevariable page_id ist.

Ein weiteres Beispiel: /? Cat = 1, /? Category_name = uncategorized und / category / uncategorized haben dieselbe query_var 'cat'

AriePutranto
quelle
0

Ich hätte angenommen, dass dies über $_GETund / oder erfolgt und $_POSTdann entsprechend manipuliert wird.

Speichern Sie alternativ die großen Datenmengen in der Datenbank und analysieren Sie dann wie folgt eine ID für die URL

$data_id = $_GET['id'];

$data = $wpbd->get_results("SELECT * FROM wp_epic_table WHERE id=".$id);

Die Abfrage wird offensichtlich nicht so einfach sein, sie kann eine Menge Verknüpfungen und Verknüpfungstabellen beinhalten. Das ist, was ich auf einer meiner Seiten mache, parse eine eindeutige ID und erstelle dann die Daten über MySQL.

Joshua
quelle