【问题标题】:Change all website links to affiliate links automatically自动将所有网站链接更改为附属链接
【发布时间】:2012-08-03 15:05:49
【问题描述】:

我希望能够在我的 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 代码做了类似的事情。但是,它只适用于亚马逊链接,它还可以本地化链接,这是我不想要的功能。

【问题讨论】:

    标签: javascript web mediawiki affiliate


    【解决方案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;
        }
    }
    

    【讨论】:

      【解决方案2】:

      不确定数百个链接的性能会有多好。

      // 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';   
          }
      }
      

      DEMO

      【讨论】:

        【解决方案3】:

        所以你也可以使用 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;
                }​
        

        http://jsfiddle.net/du47b/23/

        更新:添加代码和完全限定路径

        更新:为其他代码添加了“else if”块。使用 'else if' 而不是另一个 if 块有望减少不必要的处理。

        【讨论】:

        • 非常感谢,这看起来是一个非常好的解决方案。我不擅长 JavaScript。你能告诉我添加额外代码的最佳方法是什么吗?例如,我希望我的 amazon.com 链接将 ?tag=shihac-20 附加到末尾。我只是复制 myCodeAmazon ="?tag=shihac-20"; if ((link.href).indexOf("amazon.com") > -1 && (link.href).indexOf(myCode)
        猜你喜欢
        • 2023-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-20
        相关资源
        最近更新 更多