Utilizzo del filtro query_vars in WordPress
Sto cercando di creare un link dall'area di amministrazione di WordPress per visualizzare i post in modo specifico.
La struttura dell'URL per questo è example.com/post123/?my-preview=456
/post123/
è il permalink regolare di un post. Il parametro ?my-preview=456
consente a una sezione di quel post di recuperare informazioni basate sul valore my-preview.
So che WordPress rimuove i parametri $_GET
dall'URL, quindi ho provato a usare add_filter('query_vars','my_query_vars');
con:
function my_query_vars($query_vars){
$query_vars[] = 'my-preview'; // Aggiunge 'my-preview' alle query vars
return $query_vars;
}
Nella sezione dove effettivamente devo ottenere quel valore, ho provato a usare:
global $wp_query;
var_dump($wp_query->query_vars); // Stampa tutte le query vars disponibili
Anche con un URL come nell'esempio sopra, la coppia 'my-preview' non compare nell'array $wp_query->query_vars.
Non sto seguendo i passaggi corretti per registrare un query_var aggiuntivo da usare successivamente? Se li sto seguendo, perché non rimane?
EDIT:
Ho anche provato:
add_action('init', 'add_query_vars');
con
function add_query_vars() {
global $wp;
$wp->add_query_var('my-preview'); // Aggiunge la query var 'my-preview'
}
e wp_die(var_dump(get_query_var('my-preview')));
restituisce string(0) ""

Il filtro per le variabili di query non è necessario per ciò che stai facendo qui, dato che non lo stai utilizzando in una query. Aggiungerlo all'URL come parametro GET non lo farà apparire nell'array delle variabili di query, poiché non esiste un meccanismo che converta una variabile GET in una variabile di query: hai solo garantito che non venga rimossa se viene aggiunta alla query.
Fintanto che la variabile GET è univoca e non è riservata da WordPress, non c'è nulla che dovrebbe impedire di impostare e poi accedere a una variabile GET tramite i mezzi normali: $_GET['my-preview']
.

Secondo http://codex.wordpress.org/Query_Overview#More_on_WP-.3Eparse_request.28.29, parse_request()
rimuove i parametri $_GET dall'URL. Quando visito example.com/post123/?my-preview=123 (dubito che my-prevoew sia riservato), WordPress rimuove i parametri get e finisco per atterrare su example.com/post123/

Inoltre, hai detto che non esiste un meccanismo per convertire i parametri get in query vars, ma è esattamente ciò che fa il passo 4 di parse_request secondo quella pagina.

Se query_vars non è la soluzione, perché WordPress rimuove i miei parametri get e cosa posso fare al riguardo?

parse_request rimuove le variabili get allo scopo di analizzare la richiesta, non reindirizza a quella versione dell'URL. Perché non funziona nel tuo caso non posso dirlo, lo faccio sempre senza problemi - ho appena testato su un'installazione pulita e il tema twentytwelve, e funziona come previsto.

Avevi ragione! Era questo plugin: http://wordpress.org/plugins/404-redirected/ che causava la rimozione dei parametri get. Strano. Ora ricordo perché non installo mai plugin con più di 6 mesi senza conoscere lo sviluppatore...
