Utilizzo del filtro query_vars in WordPress

23 lug 2013, 21:01:14
Visualizzazioni: 18.1K
Voti: 6

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) ""

2
Commenti

Grazie per il tuo commento. 1. Non sto cercando di estendere i pretty permalinks. Voglio solo utilizzare parametri in stile $_GET. 2. Ho provato i metodi elencati nella risposta accettata senza successo. Aggiornerò la mia domanda con quel codice.

Josh Levinson Josh Levinson
23 lug 2013 23:18:51
Tutte le risposte alla domanda 1
6

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

23 lug 2013 23:52:43
Commenti

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/

Josh Levinson Josh Levinson
24 lug 2013 07:23:28

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.

Josh Levinson Josh Levinson
24 lug 2013 07:28:59

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

Josh Levinson Josh Levinson
24 lug 2013 07:30:12

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.

Milo Milo
24 lug 2013 07:37:18

Mm...dovrò provarlo e tornare sull'argomento.

Josh Levinson Josh Levinson
24 lug 2013 17:37:36

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

Josh Levinson Josh Levinson
25 lug 2013 16:16:23
Mostra i restanti 1 commenti