Comment passer des variables supplémentaires dans L'URL avec Wordpress

J'ai du mal à essayer de passer une variable supplémentaire dans l'url de mon installation wordpress.

Par exemple /news?c=123

Pour une raison quelconque, cela ne fonctionne que sur la racine du site web www.example.com?c=123 mais cela ne fonctionne pas si l'url contient plus d'informations www.example.com/news?c=123. J'ai le code suivant dans mes fonctions.fichier php dans le répertoire du thème.

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

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

Des Idées?

55
demandé sur ajreal 2011-01-03 20:44:38

8 réponses

Il y a assez peu de solutions pour s'attaquer à ce problème. Vous pouvez d'abord opter pour un plugin si vous voulez:

Ou code manuellement, consultez ce post:

Consultez Également:

31
répondu Sarfraz 2011-01-03 17:52:23

Pour faire l'aller-retour "the WordPress Way" sur le "front-end" (ne fonctionne pas dans le contexte de wp-admin), vous devez utiliser 3 fonctions WordPress:

  • add_query_arg() - pour créer l'URL avec votre nouvelle variable de requête ('c' dans votre exemple)
  • lequery_vars filtre-pour modifier la liste des variables de requête publique que WordPress connaît (cela ne fonctionne que sur le front-end, car la requête WP n'est pas utilisée sur le back-end - wp-admin - donc cela ne sera pas non plus disponible dans admin-ajax)
  • get_query_var () - pour récupérer la valeur de votre variable de requête personnalisée passée dans votre URL.

Note: il n'est même pas nécessaire de toucher les superglobales ($_GET) Si vous le faites de cette façon.

Exemple

Sur la page où vous devez créer le lien / définir la variable de requête:

si c'est un lien vers cette page, il suffit d'ajouter la requête la variable

<a href="<?php echo esc_url( add_query_arg( 'c', $my_value_for_c ) )?>">

si c'est un lien vers une autre page

<a href="<?php echo esc_url( add_query_arg( 'c', $my_value_for_c, site_url( '/some_other_page/' ) ) )?>">

Dans vos fonctions.php, ou un fichier de plugin ou une classe personnalisée (front-end uniquement):

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

Sur la page / fonction où vous souhaitez récupérer et travailler avec la VaR de requête définie dans votre URL:

$my_c = get_query_var( 'c' );

À L'arrière (wp-admin)

À l'arrière, nous n'exécutons jamais wp(), donc la requête WP principale ne s'exécute pas. En tant que résultat, il n'y a pas de query vars et le crochet query_vars n'est pas exécuté.

Dans ce cas, vous devrez revenir à l'approche plus standard de l'examen de votre $_GET superglobal. La meilleure façon de le faire est probablement:

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

Bien que dans un pincement, vous pourriez faire le essayé et vrai

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

Ou une variante de celui-ci.

94
répondu Tom Auger 2016-05-19 19:57:28

Ajouter le code suivant dans la fonction.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;
}

Alors vous pourrez utiliser $_GET ['var1']

14
répondu shankhan 2011-01-03 17:52:17

Comme il s'agit d'un poste fréquemment visité, j'ai pensé poster ma solution au cas où cela aiderait quelqu'un. dans WordPress avec l'utilisation de Vars de requête, vous pouvez également modifier les permaliens comme ceci

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

Pour cela, vous devez ajouter ces lignes de code dans des fonctions.php ou votre fichier de base de plugin.

De shankhan de anwer

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;
}

Et en outre cela snipped pour ajouter des règles de réécriture personnalisées.

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

Pour le cas où vous devez ajouter une réécriture règles pour une page spécifique vous pouvez utiliser ce limace de page pour écrire une règle de réécriture pour cette page spécifique. Comme dans la question que OP a posée sur

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

Nous pouvons le changer au comportement désiré en ajoutant une petite modification à notre fonction précédente.

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

En espérant que cela devienne utile pour quelqu'un.

7
répondu shazyriver 2017-08-13 05:24:01
<?php
$edit_post = add_query_arg('c', '123', 'news' );

?>

<a href="<?php echo $edit_post; ?>">Go to New page</a>

Vous pouvez ajouter n'importe quelle page danslieu de "nouvelles".

1
répondu user3777827 2014-07-09 12:05:11

Un problème que vous pourriez rencontrer est is_home() renvoie true lorsqu'un query_var enregistré est présent dans L'URL d'accueil. Par exemple, si http://example.com affiche une page statique au lieu du blog, http://example.com/?c=123 renvoie le blog.

Voir https://core.trac.wordpress.org/ticket/25143 et https://wordpress.org/support/topic/adding-query-var-makes-front-page-missing/ pour plus d'infos sur cette.

Ce que vous pouvez faire (si vous n'essayez pas d'affecter la requête) est d'utiliser add_rewrite_endpoint(). Il devrait être exécuté pendant l'action init car elle affecte les règles de réécriture. Par exemple.

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 );
}

Cela devrait vous donner accès à $_GET['c'] lorsque l'url contient plus d'informations, comme www.example.com/news?c=123.

N'oubliez pas de vider vos règles de réécriture après avoir ajouté / modifié ceci.

1
répondu niall.campbell 2017-10-19 06:30:54

C'était le seul moyen pour que cela fonctionne

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

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

0
répondu brenjt 2012-09-26 17:52:38

Pour Ajouter un paramètre à l'url de publication (vers le lien perma), j'utilise ceci:

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

Sortie:

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

0
répondu T.Todua 2014-04-01 14:00:19