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