it-swarm.com.de

hänge URL-Parameter an alle Links an

Ich habe ein Formular auf allen meinen Seiten und es hat ein verstecktes Feld mit dem Namen ref

Wenn der Benutzer unter www.example.com/1/ref=fb_ad landet und das Formular auf dieser Seite ausfüllt, fängt das Formular den URL-Parameter ab.

Wenn der Benutzer jedoch weiterhin www.example.com/2 mit dem URL-Parameter nicht einverstanden ist und das Formular auf einer anderen Seite als der Zielseite ausfüllt, bleibt das Feld ref hidden leer.

Ich suche nach einer Option zum Speichern dieses URL-Parameters, damit sich das ausgeblendete Feld auch dann durchsetzt, wenn der Benutzer auf eine andere Seite wechselt

2
Yaniv Lev Ari

1. Partner über Cookie verfolgen

Um die Partnerquelle zu verfolgen, können Sie ein Cookie für das interne Tracking verwenden. In diesem Fall müssen Sie nur externe Links ändern.

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

Jetzt können Sie die Partnerquelle in Ihrem Theme/Plugin immer wie folgt überprüfen:

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. Links auf Seite ersetzen

Das Ändern (der externen) Links ist etwas schwierig. Wenn Sie ALLE Links ändern müssen, können Sie den Hook shutdown verwenden und einen regulären Ausdruck verwenden, um alle Links zu ersetzen.

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

Natürlich benötigen Sie einen guten regulären Ausdruck, um alle korrekten Links auf Ihrer Seite zu ersetzen.

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

Bessere Lösung (anderer Ansatz)

Der oben genannte shutdown-Handler ist nicht die effizienteste Lösung, da er jede Anfrage auch auf Seiten von wp-admin analysiert. Es ist besser, wenn Sie eine bestimmte Funktion haben, um die externen Links mit dem richtigen Markup zu erstellen.

Verlinke dies:

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