自动将链接更改为代销商链接

时间:2020-02-03 作者:Alina

我的目标:

我希望与我所属的商店(例如亚马逊)建立外部链接,以自动获取其附属ID。

示例:

我在博客帖子编辑器中放置的链接https://www.amazon.com/dp/B07K344J3N/

前端更改为https://www.amazon.com/dp/B07K344J3N/?tag=myafftag-02

我发现:

我使用的主题的创建者提供了一些非常接近我所寻找的内容:

add_action(\'wpfepp_form_actions\', \'link_change_custom\');
function link_change_custom($data){
if ( !empty( $_POST[\'rehub_offer_product_url\'] ) ) {

    $url = $_POST[\'rehub_offer_product_url\'];

    $checkdomain = \'amazon.com\';
    if (!empty($url) && strpos($url, $checkdomain) !== false) :

        $afftag = \'myafftag-02\'; //our affiliate ID
        $affstring = \'tag=\'; // url parameter for affiliate ID

        if (parse_url($url, PHP_URL_QUERY)): //check if link has query string
            if (strpos($affstring, $url) !== false) : //check if link already has affiliate ID
                $url = preg_replace("/(".$affstring.").*?(\\z|&)/", "$1".$afftag."$2", $url);
            else:
                $url = $url.\'&\'.$affstring.$afftag;
            endif;   
        else:
            $url = $url.\'?\'.$affstring.$afftag;
        endif;

    endif;  

    update_post_meta( $data[\'post_id\'], \'rehub_offer_product_url\', esc_url($url) );
}     
}
问题是:

它只适用于存储在“rehub\\u offer\\u product\\u url”字段中的链接,但我希望它适用于我在博客帖子内容中输入的任何指向亚马逊的链接。

我感谢你的帮助。

2 个回复
SO网友:WebElaine

如果使用的是经典编辑器,则找到的代码可以正常工作。它接受POST数据(如POST HTTP请求)并在其进入数据库之前进行转换。因此,除了只更新某个元字段外,它也只在向前添加代码时起作用。任何旧链接都不受影响。

假设你可能想影响现有链接和新链接,你可以过滤the_content 相反这也适用于经典编辑器,但也适用于块编辑器。

这应该会让您走上正确的道路——您只需要找到正确的正则表达式来标识Amazon链接的查询字符串。(如果您已经知道没有一个Amazon链接有查询字符串,那么可以完全跳过正则表达式,继续执行下面的操作。)str_replace() 步骤。)

<?php
// Add a filter to `the_content`, which is called when pulling the post data out of the database
add_filter(\'the_content\', \'wpse_357790_add_amazon_affiliate\');
function wpse_357790_add_amazon_affiliate($content) {
    // See if "amazon.com" is found anywhere in the post content
    if(strpos($content, \'amazon.com\') !== false) {
        // Capture all Amazon links and their query strings
        // TO DO: work out the correct regex here. This next line is not complete.
        preg_match_all(\'\\?tag=[^&]+(&|")\', $content, $matches);
        // Add the affiliate query string to each URL
        foreach($matches as $url) {
            $content = str_replace($url, $url . \'?tag=myafftag-02\', $content);
        }
    }
    // Always return the content, even if we didn\'t change it
    return $content;
}
?>
优点:可以与任何一个编辑器配合使用,过滤所有帖子内容,处理所有已发布但尚未创建的内容。

SO网友:Rick Hellewell

我在我的一个网站上需要同样的自动功能:需要更改任何Zon链接以包含我的附属代码,无论是帖子、页面或评论中的链接。找不到这样的插件,所以构建了自己的插件。

这里叫“亚马逊人”https://wordpress.org/plugins/amazolinkenator/ . 如果你想“分叉”它,你可以查看里面的代码,当然也可以只使用插件。(我注意到我应该将“tested to”值更改为5.3;它在当前WP版本中运行良好。)通过插件页面提供支持。

但是,您只需要使用适当的正则表达式来查找/替换任何Zon链接。(我不得不添加代码来处理缩短的URL。)大约有80-100行代码要替换。

另外,如果你有一点。使用API代码,它将缩短找到的URL。仅适用于Zon URL。

相关推荐

PHP联系人表单未重定向

我在wordpress上构建了一个PHP联系人表单,根据用户选择的区域重定向用户。我用过“www.google”。com作为测试URL。但是,表单在提交后不会被重定向并保持在同一页面上。我哪里做错了?请查找以下代码:<?php if(isset($_POST[\'submit\'])) { $region = $_POST[\'Region\']; switch ($region ) { case \'North\': $