如何捕获变量查询字符串,然后将其附加到WordPress站点中的所有URL

时间:2016-02-23 作者:adrian collins

我有一个网站,人们将被发送到那里,带有各种促销代码查询字符串(这些字符串将随时更改),即www.example。com/?来源=电子邮件广告

如何捕获查询字符串,然后将其附加到站点中的所有URL。

我搜索了一个小时,找到了如何捕获查询字符串,以及如何将已知值附加到href上,但没有找到如何捕获未知字符串并将其附加到上。我只需要从?打开并将其附加到URL,而不管字符串是什么。

谢谢你的帮助!

1 个回复
最合适的回答,由SO网友:Doug Wollison 整理而成

这个$_GET 全局存储所有查询字符串条目,您应该能够使用它。至于将它们附加到URL,可以在post_content 过滤以更新帖子/页面内容中的任何链接,以及各种permalink过滤器上的挂钩(例如。page_link, post_link, 等等)。

就个人而言,过滤器方法需要做大量工作才能确保覆盖网站上的所有链接。我建议您在页面加载时使用javascript来更新它们。下面是如何在jQuery中执行此操作

$(\'a[href]\').each(function(){
    var href = $(this).attr(\'href\');

    if(href.indexOf(\'?\') !== -1){
        // Query string exists, append current query string
        href += \'&\' + location.search.replace(/^\\?/, \'\');
    }else{
        // No query string yet, add it
        href += location.search;
    }

    $(this).attr(\'href\', href);
});
Thelocation.search 包含页面的查询字符串。该函数将更新找到的任何链接,因此您可能希望对其进行优化,以仅覆盖与您的站点相关的链接(如果this.href 从站点的主url开始。

如果页面加载后可能会创建任何链接,则需要将其重新编辑为click事件,以替换href 属性激发之前。

我不知道为什么需要这样做,但根据用途的不同,只需使用一些自定义代码将数据存储在$_SESSION 这样,他们就可以通过电子邮件访问站点,而不必到处保留查询字符串。

if(isset($_SESSION[\'source\'])){
    $_SESSION[\'was_referred\'] = true;
}
if(isset($_SESSION[\'was_referred\'])){
    // do stuff
}