[英]Add affiliate URL query parameter to all links of a domain on a single page in Wordpress
我正在我的 wordpress 网站上准备一个页面,我将在其中发布我所属网站的优惠券和产品网址。
我不想在每个 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,或者只为这个页面安装插件。
是否可以通过编辑器中的“脚本”屏幕选项将其作为页眉或正文脚本添加到页面中?
我从这个答案中找到了以下代码,
<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>
以及来自这个答案的以下代码
<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>
...但不幸的是,我不知道足够的编程来使它们适用于我的情况。
如果没有查询字符串,此代码将添加参数,并将解析、添加参数并重新编码已具有查询字符串的链接:
<!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>
标记的内容,而 bob 是您的叔叔。
第一个答案看起来有效,除非 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>
试一试,如果它适合你,我会对参数做一些改进。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.