Folosirea filtrului query_vars

23 iul. 2013, 21:01:14
Vizualizări: 18.1K
Voturi: 6

Încerc să creez un link din administrația WP pentru a vizualiza postări într-un mod specific. Structura URL-ului pentru aceasta este example.com/post123/?my-preview=456

/post123/ este permalinkul standard pentru o postare. Parametrul ?my-preview=456 permite unei secțiuni din acea postare să recupereze informații bazate pe valoarea my-preview.

Am înțeles că WP elimină parametrii $_GET din URL, așa că am încercat să folosesc add_filter('query_vars','my_query_vars'); și

function my_query_vars($query_vars){
    $query_vars[] = 'my-preview'; // Adaugă variabila 'my-preview' la lista de query_vars
    return $query_vars;
}

În secțiunea unde am nevoie de această valoare, am încercat să folosesc:

global $wp_query;
var_dump($wp_query->query_vars); // Afișează toate variabilele de interogare disponibile

Chiar și cu un URL ca cel din exemplu, perechea 'my-preview' nu apare în array-ul $wp_query->query_vars.

Nu fac pașii corecți pentru a înregistra un query_var suplimentar pentru utilizare ulterioară? Dacă da, de ce nu persistă?

EDIT: Am încercat și: add_action('init', 'add_query_vars');
cu

function add_query_vars() {
    global $wp;
    $wp->add_query_var('my-preview'); // Adaugă variabila de interogare personalizată
}

și wp_die(var_dump(get_query_var('my-preview'))); returnează string(0) ""

2
Comentarii

Vă mulțumesc pentru comentariu. 1. Nu caut să extind permalink-urile frumoase. Doar vreau să folosesc parametri în stil $_GET. 2. Am încercat metodele enumerate în răspunsul acceptat fără succes. Voi actualiza întrebarea mea cu acel cod.

Josh Levinson Josh Levinson
23 iul. 2013 23:18:51
Toate răspunsurile la întrebare 1
6

Filtrul pentru variabilele de interogare este inutil pentru ceea ce faci aici, deoarece nu îl folosești într-o interogare. Adăugarea lui în URL ca parametru GET nu va face să apară în array-ul de variabile de interogare, deoarece nu există un mecanism care să convertească o variabilă GET într-o variabilă de interogare, ai doar asigurat că nu va fi eliminată dacă este adăugată la interogare.

Atâta timp cât variabila GET este unică și nu este rezervată de WordPress, nu ar trebui să existe nimic care să împiedice setarea și apoi accesarea unei variabile GET prin mijloace normale: $_GET['my-preview'].

23 iul. 2013 23:52:43
Comentarii

Conform http://codex.wordpress.org/Query_Overview#More_on_WP-.3Eparse_request.28.29, parse_request() elimină parametrii $_GET din URL. Când accesez example.com/post123/?my-preview=123 (mă îndoiesc că my-prevoew este rezervat), wp elimină parametrii get și ajung în cele din urmă pe example.com/post123/.

Josh Levinson Josh Levinson
24 iul. 2013 07:23:28

De asemenea, ai spus că nu există niciun mecanism pentru a converti parametrii get în bare de interogare, dar exact asta face pasul 4 din parse_request conform acelei pagini.

Josh Levinson Josh Levinson
24 iul. 2013 07:28:59

Dacă query_vars nu este soluția, de ce wp elimină parametrii mei get și ce pot face în legătură cu asta?

Josh Levinson Josh Levinson
24 iul. 2013 07:30:12

parse_request elimină variabilele get în scopul analizării cererii, dar nu redirecționează către acea versiune a URL-ului. De ce nu funcționează pentru tine nu pot spune, eu fac asta tot timpul fără probleme - tocmai am testat pe o instalare curată și tema Twenty Twelve și funcționează conform așteptărilor.

Milo Milo
24 iul. 2013 07:37:18

Hm...Va trebui să testez asta și să revin cu un răspuns.

Josh Levinson Josh Levinson
24 iul. 2013 17:37:36

Aveai dreptate! Era din cauza acestui plugin: http://wordpress.org/plugins/404-redirected/ care provoca eliminarea parametrilor get. Ciudat. Acum îmi amintesc de ce nu instalez niciodată pluginuri mai vechi de 6 luni fără să cunosc dezvoltatorul...

Josh Levinson Josh Levinson
25 iul. 2013 16:16:23
Arată celelalte 1 comentarii