我希望能够在 MediaWiki 安装上自动将链接自动更改为联盟链接。如果将来需要更改代码,这将有助于减少管理链接的时间。
这是我的GOG.com联盟计划的设置:我需要将此密钥附加到每个GOG.com链接的末尾:?pp=708a77db476d737e54b8bf4663fc79b346d696d2
gog.com/en/gamecard/baldurs_gate_the_original_saga/?pp=708a77db476d737e54b8bf4663fc79b346d696d2
一段代码(如Javascript)是否可以拦截所有链接(如http://www.gog.com/en/gamecard/baldurs_gate_the_original_saga/
)并在末尾附加联盟代码,如上例所示?
我知道这段名为Amazon Associate Link Localiser的Javascript代码做了类似的事情。但是,它仅适用于Amazon链接,它还可以本地化链接,这是我不想要的功能。
答案 0 :(得分:1)
正确的方法是使用LinkerMakeExternalLink mediawiki钩子(你可以将它放在LocalSettings.php的底部:
$wgHooks['LinkerMakeExternalLink'][] = 'ExampleExtension::exampleLinkerMakeExternalLink';
class ExampleExtension {
public static function exampleLinkerMakeExternalLink( &$url, &$text, &$link, &$attribs, $linktype ) {
if( strpos( $url, 'gog.com') !== false ) {
$url .= '?pp=708a77db476d737e54b8bf4663fc79b346d696d2';
}
return false;
}
}
答案 1 :(得分:0)
不确定数百个链接的性能有多好。
// Plain Javascript
var links = document.getElementsByTagName('a');
for (var i = 0, max = links.length; i < max; i++) {
var _href = links[i].href;
if (_href.indexOf('gog.com') !== -1) {
links[i].href = _href + '?pp=708a77db476d737e54b8bf4663fc79b346d696d2';
}
}
答案 2 :(得分:0)
因此您也可以使用jquery绑定任何链接点击。这样您就可以动态地进行链接评估。这个jsfiddle是我认为你想要完成的事情。警报只是为了您的利益,应该删除。
$("a").click(function() {
addAffiliate(this);
});
myCode = "?pp=708a77db476d737e54b8bf4663fc79b346d696d2";
myAmazonCode = "?tag=shihac-20"
function addAffiliate(link) {
alert("enterting script: " + link.href);
if ((link.href).indexOf("gog.com") > -1 && (link.href).indexOf(myCode) < 0) {
link.href = link.href + myCode;
}else if((link.href).indexOf("amazon.com") > -1 && (link.href).indexOf(myAmazonCode) < 0){
link.href = link.href + myAmazonCode;
}
alert(link.href);
return true;
}
更新:添加了代码和完全限定的路径
更新:为其他代码添加'else if'块。使用'else if'代替另一个if if块有望减少不必要的处理。