Folosirea filtrului query_vars
Î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) ""

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']
.

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/.

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.

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

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.

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...
