我希望将URL参数附加到所有URL

时间:2015-05-19 作者:sharky

我正在尝试向Wordpress网站的所有URL添加URL参数。

这是通过跟踪链接来跟踪关联销售。

E、 我在另一个网站上放了一个链接

http://website.com/?aff=abc
当一个人通过该链接访问我的网站时,该参数将保留在URL中,但当该人转到我网站上的另一个页面时,URL参数就会消失。

我想在URL中保留参数,无论用户在哪个页面上。

我发现以下代码可以工作,但它只适用于一个参数。

function wprdcv_param_redirect(){
if( !is_admin() && !isset($_GET[\'aff\']) ){
    $location = "http://".$_SERVER[\'SERVER_NAME\'].$_SERVER[\'REQUEST_URI\'];
    $location .= "?aff=abc";
    wp_redirect( $location );
}
}

add_action(\'template_redirect\', \'wprdcv_param_redirect\');  
是否有方法修改上述代码,使其在参数变量中具有任何值?现在,变量的值“abc”是固定的。

4 个回复
SO网友:Komarovski

我不知道你是否还需要答案,但这里有一个有效的例子。

标题。php

/*SAVE $_GET[\'aff\'] TO COOKIE*/
if(!isset($_SESSION[\'aff\']) and $_GET[\'aff\']){
    $cookie_expire = time()+60*60*24*30;
    $_SESSION[\'aff\'] = $_GET[\'aff\'];
    setcookie(\'aff\', $_SESSION[\'aff\'], $cookie_expire, \'/\', \'.\'.$_SERVER[\'HTTP_HOST\']);
}
功能。php-如果需要传递一个参数

/*APPEND \'aff\' PARAMETER IN URL THROUGH WHOLE SITE*/
function wprdcv_param_redirect(){
    if(isset($_COOKIE[\'aff\']) and !$_GET[\'aff\']){
        $location = esc_url(add_query_arg(\'aff\', $_COOKIE[\'aff\']));
        wp_redirect($location);
    }
}
add_action(\'template_redirect\', \'wprdcv_param_redirect\');
OR: 功能。php-如果需要传递参数数组

/*APPEND \'aff\' PARAMETER IN URL THROUGH WHOLE SITE*/
function wprdcv_param_redirect(){
    if(isset($_COOKIE[\'aff\']) and !$_GET[\'aff\']){
        $location = esc_url(add_query_arg(array(\'aff\' => $_COOKIE[\'aff\'], \'parameter_key\' => \'parameter_value\', \'parameter_key_two\' => \'parameter_value_two\')));
        wp_redirect($location);
    }
}
add_action(\'template_redirect\', \'wprdcv_param_redirect\');

SO网友:Luckyfella

我建议将关联公司相关数据保存在cookie中,并在需要时使用这些值。在我看来,这将是保存重要信息的一种节约方式。

SO网友:Chris Vogt

研究使用add_query_arg() (documented here) 将查询参数附加到URL。这(下文)未经测试,可能有更好的方法$baseUrl, 但希望这个例子能为您指明正确的方向。

function wprdcv_param_redirect(){
  if( !is_admin() ){
    $baseUrl = "http://" . $_SERVER[\'SERVER_NAME\'] . $_SERVER[\'REQUEST_URI\'];
    $location = add_query_arg( $_SERVER[\'QUERY_STRING\'], \'\', $baseUrl );
    wp_redirect( $location );
  }
}
add_action(\'template_redirect\', \'wprdcv_param_redirect\'); 

SO网友:Erwin Mayer

您可以使用下面的函数parse_urlhttp_build_url:

function wprdcv_param_redirect() {
    //Prevent infinite loop
    if ($_GET["redirected"] == "1") return;

    $url_parts = parse_url("http://".$_SERVER[\'SERVER_NAME\'].$_SERVER[\'REQUEST_URI\']);
    parse_str($url_parts[\'query\'], $params);

    $params["redirected"] = "1";
    foreach (array_keys($_GET) as $n) {
        $params[$n] = $_GET[$n];
    }

    // Note that this will url_encode all values
    $url_parts[\'query\'] = http_build_query($params);
    wp_redirect(http_build_url($url_parts));
    exit;
}
add_action(\'template_redirect\', \'wprdcv_param_redirect\');  

结束

相关推荐

Theme URLs problem

我编写了一篇主题文章(编辑:可能是single.php 模板)使用该函数get_userdata( $_GET[\'p\'] ). 但主管理员将URL重新格式化为:~/author/gamelaster (默认值为?author=1) 现在,这是不正确的工作。如何获取此URL格式的作者id?或如何从数据库中获取用户slug+get id?但是,我不能使用标准的author函数/post函数(get\\u ID等)。