Qual è il flusso appropriato per i dati personalizzati dall'URL in WP_Query?


14

Ho un processo a più fasi che integra la sfaccettatura complessa nelle query WP. Il problema è: più divento profondo, più divento confuso su come dovrebbe funzionare e potrei usare una linea guida piuttosto che essere inventiva (e scavare un buco).

Stadi generali che ho (pseudo-codice, ma vicino al reale):

  1. recuperare valore dall'URL (qualcosa di semplice come person=1)
  2. valore di processo e aggiungi istruzioni di query personalizzate ( $relationship_query[] = array('relationship' => 'person_to_cat', 'object' => 1 );)
  3. recuperare le istruzioni finali personalizzate per le query e generare le direttive SQL appropriate

Ormai ho molte cose del genere (relazioni, tassonomie, date) e sta diventando fragile (un angolo del codice non mette valore dove un altro angolo del codice si aspetta che trovi e tutto si rompe).

La domanda così ampia è: qual è il protocollo corretto per passare, ricevere, archiviare ed elaborare dati personalizzati a WP tramite URL ?

Parti più piccole:

  • come assicurarsi che non mi scontri con gli interni di WP?
  • dove e come conservo i dati dell'intermediario?
    • differenza tra querye query_varsproprietà? Sembrano essere usati quasi nello stesso codice, ma tendono a contenere valori e metodi diversi che ne favoriscono query_varsuno.

Risposte:


6

Penso che la funzione WP che stai cercando sia add_rewrite_tag . Ha lo scopo di aggiungere parametri GET personalizzati al tuo URL e includerlo automaticamente in query_vars.

Ad esempio, è possibile aggiungere quanto segue al hook di init:

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

Per un URL come http://example.com?person=joe , $wp_queryavrà il globale

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

Puoi anche aggiungere una regola di riscrittura per rendere più bello l'URL, ad esempio http://example.com/person/joe

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

Consulta l' API di riscrittura per ulteriori informazioni ed esempi.


2
Ho trovato un po 'di tempo (finalmente) per leggere tutto il codice rilevante in WPe WP_Querye mentre ci sono molte cose che accadono lì, penso che add_rewrite_tag()sembra il modo più succinto per rendere WP consapevole della query personalizzata var e giocarci bene.
Rarst

1
  1. Dai un'occhiata a wp-Includes / class-wp.php per controllare eventuali query_vars riservati
  2. Non sono sicuro di cosa intendi per dati intermedi. Puoi spiegare di più?
  3. WP carica la pagina in base a una stringa_stringa sull'URL che viene tradotta come query, quindi vengono elaborati da WP_Query per determinare quale query_var viene utilizzata.

Esempio: caricando una pagina con /? Pagename = about, WP elaborerà la stringa di query e scoprirà che query_var in uso è page_id.

Un altro esempio: /? Cat = 1, /? Category_name = uncategorized e / category / uncategorized hanno lo stesso query_var 'cat'


0

Avrei supposto che fosse fatto tramite $_GETe / o $_POST, quindi manipolare di conseguenza.

In alternativa, archivia l'enorme mazzetto di dati nel database, quindi analizza un ID nell'URL in questo modo

$data_id = $_GET['id'];

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

La query ovviamente non sarà così semplice, potrebbe comportare molti join e tabelle di join. Questo è quello che faccio in una delle mie pagine, analizzo un ID univoco, quindi costruisco i dati tramite MySQL.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.