it-swarm.com.de

Ich möchte URL-Parameter an alle URLs anhängen

Ich versuche, URL-Parameter zu allen URLs der Wordpress-Website hinzuzufügen.

Dies dient zur Verfolgung der Verkäufe von Partnern durch Verfolgung von Links.

Z.B. Ich habe einen Link auf eine andere Website gesetzt

http://website.com/?aff=abc

Wenn eine Person über diesen Link auf meine Website gelangt, bleibt der Parameter in der URL, aber sobald die Person auf eine andere Seite meiner Website gelangt, ist der URL-Parameter weg.

Ich möchte den Parameter in der URL behalten, egal auf welcher Seite sich der Benutzer befindet.

Ich fand den folgenden Code, der funktioniert, aber es funktioniert nur für einen Parameter.

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

Gibt es eine Möglichkeit, den obigen Code so zu ändern, dass er einen Wert in der Parametervariable enthält? Momentan ist der Wert "abc" für die Variable festgelegt.

2
sharky

Ich weiß nicht, ob Sie die Antwort noch brauchen, aber hier ist ein funktionierendes Beispiel für Sie.

Header.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']);
}

Functions.php - wenn Sie einen Parameter übergeben müssen

/*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');

ODER: Functions.php - wenn Sie ein Array von Parametern übergeben müssen

/*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');
2
Komarovski

Ich würde empfehlen, die Partnerdaten in einem Cookie zu speichern und die Werte bei Bedarf zu verwenden. Meiner Meinung nach wäre es eine sichere Art, die wichtigen Informationen aufzubewahren.

2
Luckyfella

Verwenden Sie add_query_arg() ( hier dokumentiert ), um die Abfrageparameter an die URL anzuhängen. Dies (unten) ist ungetestet, und es gibt wahrscheinlich einen besseren Weg, um an $baseUrl zu gelangen, aber hoffentlich weist dieses Beispiel Sie in die richtige Richtung.

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'); 
0
Chris Vogt

Sie können die folgende Funktion verwenden, die parse_url und http_build_url verwendet:

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');  
0
Erwin Mayer