0

我正在尝试将链接从 linkshare 转换为 itunes 链接,唯一的方法是在我的 wordpress 主题标题中插入这行 jQuery 代码

$(document).ready(function() {
    // READ THIS!!
    // START OF REQUIRED CHANGES
    // you MUST change this value to one for your georiot account TSIDs
    var tsid = 2062;
    // END OF REQUIRED CHANGES
    // DO NOT MODIFY BELOW THIS LINE
    convertToGeoRiotLinks(tsid);

});

function convertToGeoRiotLinks(tsid) {
    var numberOfLinks = document.links.length;
    var currentLinkIndex = 0;

    for (currentLinkIndex = 0; currentLinkIndex < numberOfLinks; currentLinkIndex++) {
        var currentLink = document.links[currentLinkIndex];
        var linkType = getLinkType(currentLink.href);

        if (linkType == "apple" || linkType == "amazon") {
            currentLink.href = "http://target.georiot.com/Proxy.ashx?TSID=" + tsid + "&GR_URL=" + encodeURIComponent(currentLink.href);
        } else if (linkType == "linkshare" || linkType == "tradedoubler" || linkType == "dgmperf") {
            var itunesUrl = extractItunesLinkFromAffiliateUrl(currentLink, linkType);

            if (itunesUrl != "") {
                currentLink.href = "http://target.georiot.com/Proxy.ashx?TSID=" + tsid + "&GR_URL=" + itunesUrl;
            }
        } else
            continue;
    }
}

function extractItunesLinkFromAffiliateUrl(currentLink, linkType)
{
    if (currentLink.href.indexOf("?") > 0)
    {
        var arrParams = currentLink.href.split("?");
        var arrURLParams = arrParams[1].split("&");     
        var arrParamNames = new Array(arrURLParams.length);
        var arrParamValues = new Array(arrURLParams.length);    
        var i = 0;
        for (i=0;i < arrURLParams.length;i++)
        {
            var sParam =  arrURLParams[i].split("=");
            arrParamNames[i] = sParam[0];
            if (sParam[1] != "") {
                arrParamValues[i] = sParam[1];

                if (linkType == "tradedoubler" && arrParamNames[i] == "url") {
                    return arrParamValues[i];
                } else if (linkType == "linkshare" && arrParamNames[i] == "RD_PARM1") {
                    return arrParamValues[i];
                } else if (linkType == "dgmperf" && arrParamNames[i] == "u") {
                    return arrParamValues[i];
                }
            } else
                arrParamValues[i] = "";
        }
    }
    return "";
}

/* Returns link type: unknown, amazon, apple, linkshare, dgm, tradedoubler
    */
function getLinkType(currentLinkHref) {
    var appleRegex = /itunes.apple.com\/\S+id[0-9]+/i;
    var tradeDoublerRegex = /clk[uk]*\.tradedoubler\.com\S*\?\S*url=[https%3A%2F%2F|http%3A%2F%2F]*\itunes\.apple\.com/i;
    var linkshareRegex = /click\.linksynergy\.com\S*?\S*RD_PARM1=[https%3A%2F%2F|https%253A%252F%252F|http%253A%252F%252F|http%3A%2F%2F]*\itunes\.apple\.com/i;
    var dgmPerfRegex = /t.dgm-au.c\S+\?+\S*u=[https%3A%2F%2F|http%3A%2F%2F|https%253A%252F%252F|http%253A%252F%252F]*\itunes\.apple\.com/i;
    var amazonRegex = /\.amazon\./;

    if (appleRegex.test(currentLinkHref))
        return "apple";
    else if (tradeDoublerRegex.test(currentLinkHref))
        return "tradedoubler";
    else if (linkshareRegex.test(currentLinkHref))
        return "linkshare";
    else if (dgmPerfRegex.test(currentLinkHref))
        return "dgmperf";
    else if (amazonRegex.test(currentLinkHref))
        return "amazon";
    else
        return "unknown";
}

结果是加载时页面标题中的脱机代码如何正确执行而没有任何冲突,谢谢

4

1 回答 1

0

在 WordPress 中执行此操作的正确方法是使用wp_register_script()wp_enqueue_script()确保您满足所有依赖项并且不会引起任何冲突。

你应该在你的主题目录中创建一个文件并将你的 .js 代码保存在那里,为了一个例子,我们称之为 custom.js。然后,您需要在主题中打开 functions.php 文件并添加以下代码:

function my_custom_javascript() {
    wp_enqueue_script( 'script-name', get_template_directory_uri() . 'custom.js', array(), '1.0.0', true );
}

add_action( 'wp_enqueue_scripts', 'my_custom_javascript' );

这将告诉 WordPress 您希望它查找位于主题目录中的名为“custom.js”的 javascript 文件。然后它添加了一个钩子wp_enqueue_scripts,即 WordPress 查找您需要的所有脚本并将它们包含在您的页面中,并将您的自定义脚本与其余脚本一起包含在内。

看起来你可能有一个 jQuery 依赖项——你可以通过'jquery'在数组中添加一个项目来让 WordPress 知道你的自定义脚本依赖于 jQuery wp_enqueue_script(),所以它看起来像这样:

wp_enqueue_script( 'script-name', get_template_directory_uri() . 'custom.js', array( 'jquery' ), '1.0.0', true );
于 2014-05-14T19:31:27.150 回答