web-dev-qa-db-fra.com

ajouter des paramètres d'URL à tous les liens

J'ai un formulaire dans toutes mes pages et il y a un champ caché nommé ref

Si l'utilisateur atterrit sur www.example.com/1/ref=fb_ad et remplit le formulaire de cette page, le formulaire intercepte le paramètre URL.

Toutefois, si l'utilisateur continue sur www.example.com/2 le paramètre d'URL ne l'accompagne pas, il remplit alors le formulaire dans une page autre que la page d'arrivée. Le champ masqué de référence reste vide.

Je recherche une option pour enregistrer ce paramètre d'URL, de sorte que le champ masqué reste visible même si l'utilisateur passe à une autre page.

2
Yaniv Lev Ari

1. Suivre l'affilié via Cookie

Pour suivre la source de l'affiliation, vous pouvez utiliser un cookie pour le suivi interne. Dans ce cas, il vous suffit de modifier les liens externes.

add_action( 'plugins_loaded', 'so265278_affiliate_check' );

function so265278_affiliate_check() {
    $is_affiliate = ! empty( $_GET['ref'] );
    if ( $is_affiliate ) {
        setcookie( 'affiliate', $_GET['ref'], MONTH_IN_SECONDS );
    }
}

Maintenant, vous pouvez toujours vérifier la source d'affiliation dans votre thème/plugins comme ceci:

function get_affiliate_source() {
    if ( ! empty( $_GET['ref'] ) ) { return $_GET['ref']; }
    if ( ! empty( $_COOKIE['affiliate'] ) ) { return $_COOKIE['affiliate']; }
    return false;
}

// ...
echo 'Affiliate source: ' . get_affiliate_source();

2. Remplacer les liens sur la page

La modification des liens (externes) est un peu délicate. Si vous devez modifier TOUS les liens, vous pouvez utiliser le crochet shutdown et utiliser une expression régulière pour remplacer tous les liens.

ob_start(); // I think WP does ob-buffering by itself. You can try to remove this line...

add_action( 'shutdown', 'so265278_shutdown' );

function so265278_shutdown() {
    $html = '';

    while (ob_get_level() > 1) {
        $html .= ob_get_clean();
    }

    // replace the links here...

    echo $html;
}

Bien sûr, vous devez avoir une bonne expression régulière pour remplacer tous les liens corrects sur votre page.

$regex = '#(<a.*?href=["\'])(.*?)(\2.*?>)#i';
$html = preg_replace_callback( $regex, '_modify_link', $html );

function _modify_link( $match ) {
    $url = add_query_arg( 
        array( 'ref' => get_affiliate_source() ), 
        $match[2] 
    );

    // Return the full `<a href...>` tag:
    return $match[1] . $url . $match[3];
}

Meilleure solution (approche différente)

Le gestionnaire shutdown ci-dessus n'est pas la solution la plus efficace, car il analysera chaque requête, également sur les pages wp-admin. Il serait préférable que vous ayez une fonction spécifique pour créer les liens externes avec le balisage correct.

Linke ceci:

function show_external_link( $url, $label ) {
    $affiliate = get_affiliate_source();

    if ( $affiliate ) {
        $url = add_query_arg( 
            array( 'ref' => get_affiliate_source() ), 
            $match[2] 
        );
    }

    printf(
        '<a href="%1$s" target="_blank" rel="nofollow" class="external">%2$s</a>',
        esc_url( $url ),
        $label
    );
}

// In your theme/plugins
<?php show_external_link( 'http://www.facebook.com/', 'Facebook' ); ?>
1
Philipp