Jaki jest odpowiedni przepływ niestandardowych danych z adresu URL w WP_Query?

14

Mam wieloetapowy proces, który integruje złożone aspekty w zapytaniach WP. Problem w tym, że im bardziej się pogłębiam, tym bardziej jestem rozmyty na temat tego, jak powinien działać, i mogłem skorzystać z wytycznej, zamiast być pomysłowym (i wykopać sobie dziurę).

Ogólne etapy, które mam (pseudo-kod, ale zbliżony do rzeczywistego):

  1. pobierać wartość z adresu URL (coś prostego jak person=1)
  2. przetwarzaj wartość i dołącz niestandardowe instrukcje zapytania ( $relationship_query[] = array('relationship' => 'person_to_cat', 'object' => 1 );)
  3. pobierz końcowe instrukcje niestandardowego zapytania i wygeneruj odpowiednie dyrektywy SQL

Do tej pory mam wiele takich wydarzeń (relacje, taksonomie, daty) i stają się one niestabilne (jeden róg kodu nie nadaje wartości tam, gdzie oczekuje się go w innym rogu kodu i wszystko się rozpada).

Tak duże pytanie brzmi - jaki jest odpowiedni protokół do przekazywania, odbierania, przechowywania i przetwarzania niestandardowych danych do WP za pośrednictwem adresu URL ?

Mniejsze części:

  • jak upewnić się, że nie koliduję z elementami wewnętrznymi WP?
  • gdzie i jak przechowuję dane pośredniczące?
    • różnica między queryi query_varswłaściwościami? Wydaje się, że są one używane prawie tak samo w kodzie, ale zwykle mają różne wartości, a metody sprzyjają query_varsjednej.
Rarst
źródło

Odpowiedzi:

6

Myślę, że funkcja WP, której szukasz, to add_rewrite_tag . Ma na celu dodanie niestandardowych parametrów GET do adresu URL i automatyczne włączenie go do query_vars.

Na przykład możesz dodać następujące elementy do haka inicjującego:

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

W przypadku adresu URL takiego jak http://example.com?person=joe globalny $wp_querybędzie miał

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

Możesz także dodać regułę przepisywania, aby URL był ładniejszy, na przykład http://example.com/person/joe

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

Zobacz Rewrite API, aby uzyskać więcej informacji i przykładów.

Fabien Quatravaux
źródło
2
Znalazłem trochę czasu (przynajmniej) do odczytu przez wszystkich istotnych kodu w WPi WP_Querya jednocześnie istnieje wiele rzeczy dzieje się tam, myślę, że add_rewrite_tag()wydaje się najbardziej zwięzły sposób, aby WP świadomi niestandardowego zapytania var i grać dobrze z nim.
Rarst
1
  1. Sprawdź wp-include / class-wp.php, aby sprawdzić wszelkie zarezerwowane zmienne query_vars
  2. Nie jestem pewien, co rozumiesz przez dane pośrednie. Czy możesz to bardziej wyjaśnić?
  3. WP ładuje stronę w oparciu o ciąg zapytania na adres URL, który jest tłumaczony jako zapytanie, a następnie są przetwarzane przez WP_Query w celu ustalenia, który parametr zapytanie jest używany.

Przykład: ładując stronę o nazwie /? Pagename = about, WP przetworzy ciąg zapytania i stwierdzi, że używany parametr query_var to page_id.

Inny przykład: /? Cat = 1, /? Nazwa_kategorii = bez kategorii i / kategoria / bez kategorii mają takie same zapytanie

AriePutranto
źródło
0

Zakładałbym, że zrobiono to za pośrednictwem $_GETi / lub $_POST, i odpowiednio manipulowałem.

Alternatywnie przechowuj ogromną wiązkę danych w bazie danych, a następnie parsuj identyfikator do adresu URL w ten sposób

$data_id = $_GET['id'];

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

Zapytanie oczywiście nie będzie takie proste, może obejmować wiele złączeń i tabel złączeń. To właśnie robię na jednej ze stron, analizuję unikalny identyfikator, a następnie buduję dane za pomocą MySQL.

Jozuego
źródło