2017-06-08 44 views
0

我准备在我的WordPress网站上发布一个页面,我将在该网站上发布优惠券和产品网址,我是网站的附属公司。将加盟网址查询参数添加到Wordpress中的单个页面上的域的所有链接

我不想在每个URL上手动创建联属链接,而是想自动在此特定域的每个URL上添加联属查询参数。

的URL可能是:

example.com 
example.com/ 
example.com/cell-phones-c_11293/ 
example.com/cell-phones/pp_617010.html?wid=4 

的查询参数我想补充的是lkid = 12345678(同样为每一个URL)?

example.com?lkid=12345678 
example.com/?lkid=12345678 
example.com/cell-phones-c_11293/?lkid=12345678 
example.com/cell-phones/pp_617010.html?wid=4&lkid=10823628 

我想这个功能仅适用于这个特定页面,而不是为WordPress的每一个岗位,所以我不喜欢的代码添加到functions.php文件,或者安装一个插件只为这一个页面。

是否可以通过编辑器中的“脚本”屏幕选项将它作为标题或正文脚本添加到页面中?

我发现从this answer下面的代码,

<script> 
var $links = $('a'); // get all anchor tags 

// loop through each anchor tag 
$.each($links, function(index, item){ 
    var url = $(this).attr('href'); // var for value of href attribute 
      // use regex to match your domain 
      var pattern = new RegExp(/(example.com\/)(.*)/i); 
      if(pattern.test(url)) 
       $(this).attr('href', url + '?lkid=12345678'); 
       // append ?lkid=12345678 if url contains example 
}); 
</script> 

而且从this answer

<script> 
function updateQueryStringParameter(uri, key, value) { 
    var re = new RegExp("([?&])" + key + "=.*?(&|$)", "i"); 
    var separator = uri.indexOf('?') !== -1 ? "&" : "?"; 
    if (uri.match(re)) { 
    return uri.replace(re, '$1' + key + "=" + value + '$2'); 
    } 
    else { 
    return uri + separator + key + "=" + value; 
    } 
} 
</script> 

下面的代码...但我很遗憾,我不知道足够的编程,使他们的工作为我的情况。

+0

我编辑了我的文章并添加了一个解决方案,该解决方案既适用于已有查询字符串的链接,也适用于那些不适用的链接。 – thephpdev

回答

0

此代码添加参数,如果它不已经有一个查询字符串,并将解析,添加参数,并重新编码的链接,已经有一个查询字符串:

<!DOCTYPE html> 
<html> 
    <head> 
     <title>></title> 
    </head> 
    <body> 
     <a href="http://www.example.com">Test</a> 
     <a href="//www.google.com?test=1">Test</a> 
     <a href="http://www.example.com/?test=1">Test</a> 
     <a href="www.example.com?test=1">Test</a> 
     <a href="../?test=1&another=2">Test</a> 
     <a href="?test=1&another=2">Test</a> 
     <script> 
      // parseQuery: Originally from StackOverflow of: https://stackoverflow.com/a/13419367/2529423 
      function parseQuery(qstr) { 
       var query = {}; 
       var a = (qstr[0] === '?' ? qstr.substr(1) : qstr).split('&'); 
       for (var i = 0; i < a.length; i++) { 
        var b = a[i].split('='); 
        query[decodeURIComponent(b[0])] = decodeURIComponent(b[1] || ''); 
       } 
       return query; 
      } 

      // encodeQuery originally from StackOverflow: https://stackoverflow.com/a/1714899/2529423 
      function encodeQuery(obj) { 
       var str = []; 
       for(var p in obj) 
       if (obj.hasOwnProperty(p)) { 
        str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p])); 
       } 
       return str.join("&"); 
      } 

      function addQueryParameterToDomain(key, value, conditionDomain) { 
       var links = document.querySelectorAll('a[href]'), 
        linksLength = links.length, 
        index, 
        queryIndex, 
        queryString, 
        query, 
        url, 
        domain, 
        colonSlashSlash; 

       // Iterate through and add query paramter 
       for(index = 0; index < linksLength; ++index) { 
        url = links[index].href, 
        queryIndex = url.indexOf('?'), 
        colonSlashSlash = url.indexOf('://'); 

        domain = url.substring(colonSlashSlash + 3); 
        domain = domain.substring(0, domain.indexOf('/')); 

        if(domain !== conditionDomain) { 
         continue; 
        } 

        if(queryIndex === -1) { 
         url += '?' + key + '=' + value; 
        } else { 
         queryString = url.substring(queryIndex); 
         url = url.substring(0, queryIndex); 
         query = parseQuery(queryString); 

         query[key] = value; 

         url += '?' + encodeQuery(query); 
        } 

        links[index].href = url; 
       } 
      } 

      jQuery(function() { 
       addQueryParameterToDomain('lkid', '12345678', 'example.com'); 
       addQueryParameterToDomain('lkid', '12345678', 'www.example.com'); 
      }); 
     </script> 
    </body> 
</html> 

所有你我们需要做的是将上面的<script>标签的内容替换为您的脚本,而鲍勃是您的叔叔。

+0

谢谢你的真棒代码。只需要一个小小的请求:是否可以仅在example.com链接上添加查询?因为当前的代码将其添加到页面上的每个链接上,菜单链接,广告链接,地段。 –

+0

我已经完成了。 – thephpdev

+0

@AngelosKyritsis,刚刚意识到你甚至说在你的问题。对不起,我有时候没有正确地阅读。 – thephpdev

0

除非href已经有一些参数(?x = y),否则第一个答案看起来工作。另外,建议将jQuery代码放在.ready函数中。而在去年,在默认情况下,WordPress的,你需要使用的jQuery代替$别名,或通过$进入功能,我在这里做:

<script> 
jQuery(document).ready(function($){ 
    var $links = $('a'); // get all anchor tags 

    // loop through each anchor tag 
    $.each($links, function(index, item){ 
     var url = $(this).attr('href'); // var for value of href attribute 
      // use regex to match your domain 
      var pattern = new RegExp(/(example.com\/)(.*)/i); 
      if(pattern.test(url)) 
       var chr = url.indexOf("?") == -1 ? "?" : "&"; // will be "&" if "?" in url 
       $(this).attr('href', url + chr + 'lkid=12345678'); 
       // append ?lkid=12345678 if url contains example 
    }); 
}); 
</script> 

给它一个镜头,如果你的作品我我会对参数做一些改进。

+0

如果链接已经有查询字符串参数,这仍然不会工作,我编辑我的张贴和现在添加我的脚本。由于'?test = 1&another = 2?lkid = 12345678'不是有效的查询字符串。 – thephpdev

+0

我知道那......读我答案的第一行。另外OP表示他不喜欢将代码添加到functions.php。 – yezzz

+1

再次阅读我的答案,它现在不使用PHP。 – thephpdev

相关问题