将url参数附加到所有链接

时间:2017-04-28 作者:Yaniv Lev Ari

我在所有页面中都有一个表单,它有一个隐藏字段,名为ref

如果用户登陆www.example。com/1/ref=fb\\u ad并填写此页面中的表单-表单捕获URL参数。

但是,如果用户继续访问www.example。URL参数与他无关,因此如果他在登录页以外的其他页面中填写表单,ref hidden字段将保持为空。

我正在寻找一个保存url参数的选项,这样即使用户移动到另一个页面,隐藏字段也会被捕获

1 个回复
SO网友:Philipp

1. Track Affiliate via Cookie

要跟踪分支机构来源,您可以使用Cookie进行内部跟踪。在这种情况下,您只需要修改外部链接。

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 );
    }
}
现在,您可以随时检查主题/插件中的关联源,如下所示:

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. Replace links on page

修改(外部)链接有点棘手。如果需要修改所有链接,则可以使用shutdown 钩住并使用正则表达式替换所有链接。

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;
}
当然,您需要一个好的正则表达式来替换页面上所有正确的链接。

$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];
}
<小时>Better solution (不同的方法)

以上shutdown 处理程序并不是最有效的解决方案,因为它将解析每个请求,也在wp管理页面上。如果您有一个特定的函数来创建具有正确标记的外部链接,那就更好了。

链接此:

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

相关推荐

Wordpress URL error for links

我的数据库中有以下内容siteurl subdomain.example.com home subdomain.example.com 当我尝试转到某些页面时,页面会转到subdomain.example.com/services/subdomain.example.com这有什么原因吗?由于这个奇怪的错误,我也无法进入wp管理,我不明白为什么会发生这种情况?我尝试用更改数据库中的值http:// 也已经预先准备好了。如有任何建议,我们将不胜感激。