Come passare variabili extra nell’URL con WordPress

Sto avendo problemi a cercare di passare una variabile extra nell’URL alla mia installazione di wordpress.

Ad esempio /news?c=123

Per qualche ragione, funziona solo sul sito web www.example.com?c=123 ma non funziona se l’url contiene ulteriori informazioni www.example.com/news?c=123 . Ho il seguente codice nel mio file functions.php nella directory dei temi.

 if (isset($_GET['c'])) { setcookie("cCookie", $_GET['c']); } if (isset($_SERVER['HTTP_REFERER'])) { setcookie("rCookie", $_SERVER['HTTP_REFERER']); } 

Qualche idea?

Ci sono poche soluzioni per affrontare questo problema. Innanzitutto puoi utilizzare un plug-in se desideri:

  • WordPress Quickie: plugin per stringhe di query personalizzate

O codice manualmente, controlla questo post:

  • Passaggio dei parametri stringa di query nell’URL di WordPress

Guarda anche:

  • add_query_arg

Per effettuare il round trip “The WordPress Way” sul “front-end” (non funziona nel contesto di wp-admin ), è necessario utilizzare 3 funzioni WordPress:

  • add_query_arg () – per creare l’URL con la nuova variabile di query (‘c’ nell’esempio)
  • il filtro query_vars – per modificare l’elenco delle variabili di query pubbliche di cui WordPress sa (funziona solo sul front-end, perché la Query WP non è utilizzata nel back-end – wp-admin – quindi anche questo non sarà disponibile in admin-ajax )
  • get_query_var () – per recuperare il valore della variabile di query personalizzata passata nel tuo URL.

Nota: non è necessario nemmeno toccare i superglobali ( $_GET ) se lo fai in questo modo.

Esempio

Nella pagina in cui è necessario creare il collegamento / impostare la variabile di query:

se si tratta di un collegamento a questa pagina, è sufficiente aggiungere la variabile di query

se è un collegamento ad un’altra pagina

Nel tuo functions.php, o qualche file plugin o class personalizzata (solo front-end):

 function add_custom_query_var( $vars ){ $vars[] = "c"; return $vars; } add_filter( 'query_vars', 'add_custom_query_var' ); 

Nella pagina / funzione in cui desideri recuperare e lavorare con la query var impostata nel tuo URL:

$my_c = get_query_var( 'c' );

Nel back-end ( wp-admin )

Sul back-end non eseguiamo mai wp() , quindi la query WP principale non viene eseguita. Di conseguenza, non vi sono query vars e l’hook query_vars non viene eseguito.

In questo caso, dovrai tornare all’approccio più standard di esaminare il tuo $_GET . Il modo migliore per farlo è probabilmente:

$my_c = filter_input( INPUT_GET, "c", FILTER_SANITIZE_STRING );

anche se in un colpo puoi fare il provato e vero

$my_c = isset( $_GET['c'] ? $_GET['c'] : "";

o qualche sua variante.

aggiungi il seguente codice in function.php

 add_filter( 'query_vars', 'addnew_query_vars', 10, 1 ); function addnew_query_vars($vars) { $vars[] = 'var1'; // var1 is the name of variable you want to add return $vars; } 

allora sarai in grado di usare $ _GET [‘var1’]

Dal momento che questo è un post visitato di frequente ho pensato di pubblicare la mia soluzione nel caso in cui aiuti qualcuno. In WordPress insieme all’utilizzo di query vars puoi cambiare anche i permalink come questo

 www.example.com?c=123 to www.example.com/c/123 

Per questo devi aggiungere queste linee di codice in functions.php o nel tuo file di base del plugin.

Dall’anima di Shankhan

 add_filter( 'query_vars', 'addnew_query_vars', 10, 1 ); function addnew_query_vars($vars) { $vars[] = 'c'; // c is the name of variable you want to add return $vars; } 

Inoltre, questo viene tagliato per aggiungere regole di riscrittura personalizzate.

 function custom_rewrite_basic() { add_rewrite_rule('^c/([0-9]+)/?', '?c=$1', 'top'); } add_action('init', 'custom_rewrite_basic'); 

Nel caso in cui sia necessario aggiungere regole di riscrittura per una pagina specifica, è ansible utilizzare tale slug di pagina per scrivere una regola di riscrittura per quella specifica pagina. Come nella domanda che OP ha chiesto

 www.example.com/news?c=123 to www.example.com/news/123 

Possiamo cambiarlo al comportamento desiderato aggiungendo una piccola modifica alla nostra funzione precedente.

 function custom_rewrite_basic() { add_rewrite_rule('^news/([0-9]+)/?', 'news?c=$1', 'top'); } add_action('init', 'custom_rewrite_basic'); 

Sperando che diventi utile per qualcuno.

 < ?php $edit_post = add_query_arg('c', '123', 'news' ); ?> Go to New page 

Puoi aggiungere qualsiasi pagina al posto di “notizie”.

Questo era l’unico modo per farlo funzionare

 add_action('init','add_query_args'); function add_query_args() { add_query_arg( 'var1', 'val1' ); } 

http://codex.wordpress.org/Function_Reference/add_query_arg

per aggiungere un parametro per postare url (al collegamento perma), io uso questo:

 add_filter( 'post_type_link', 'append_query_string', 10, 2 ); function append_query_string( $url, $post ) { return $url.'?my_pid='.$post->ID; } 

produzione:

http://yoursite.com/pagename?my_pid=12345678

Un problema che potresti incontrare è is_home() restituisce true quando una query_var registrata è presente nell’home URL. Ad esempio, se http://example.com visualizza una pagina statica anziché il blog, http://example.com/?c=123 restituirà il blog.

Vedi https://core.trac.wordpress.org/ticket/25143 e https://wordpress.org/support/topic/adding-query-var-makes-front-page-missing/ per maggiori informazioni su questo.

Quello che puoi fare (se non stai tentando di influenzare la query) è usare add_rewrite_endpoint() . Dovrebbe essere eseguito durante l’azione init in quanto influenza le regole di riscrittura. Per esempio.

 add_action( 'init', 'add_custom_setcookie_rewrite_endpoints' ); function add_custom_setcookie_rewrite_endpoints() { //add ?c=123 endpoint with //EP_ALL so endpoint is present across all places //no effect on the query vars add_rewrite_endpoint( 'c', EP_ALL, $query_vars = false ); } 

Questo dovrebbe darti accesso a $_GET['c'] quando l’url contiene più informazioni come www.example.com/news?c=123 .

Ricorda di svuotare le regole di riscrittura dopo aver aggiunto / modificato questo.