You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在WordPress特定区域(相关产品挂件)为所有链接添加rel=nofollow?

给WordPress文章中特定区域(相关产品)的链接添加rel=nofollow

嘿,你的现有代码存在几个问题,而且会给文章里所有链接都加上nofollow,这显然不是你想要的。我来帮你修正,给出两种精准定位的方案:

先说说你代码里的问题

  • 正则里用了&lt;和&gt;,这是HTML转义字符,PHP处理原生HTML内容时应该用实际的<和>
  • preg_replace_callback的第二个参数必须是回调函数,你直接写字符串' rel=nofollow;'会触发语法错误
  • 没有限定修改范围,会把单篇文章里所有链接都修改,不符合你“仅针对相关产品区域”的需求

方案一:通过容器类精准定位(推荐)

假设你的相关产品区域有个专属的CSS类,比如related-products(你可以换成实际的类名/ID),我们先把这个区域的内容单独拎出来处理,再替换回去:

add_filter('the_content', 'my_related_products_nofollow', 10, 1);
function my_related_products_nofollow($content) {
    // 只在单篇文章页面生效
    if (!is_single()) {
        return $content;
    }

    // 匹配带related-products类的div容器(按需修改选择器)
    $container_pattern = '/(<div class="related-products">.*?<\/div>)/is';
    
    // 对匹配到的区域单独处理链接
    return preg_replace_callback($container_pattern, function($matches) {
        $product_area = $matches[1];
        // 处理链接:兼容已有rel属性的情况,追加nofollow
        return preg_replace(
            '/<a([^>]*)(rel="([^"]*)")?([^>]*)>/i',
            $matches[2] ? '<a$1rel="$3 nofollow"$4>' : '<a$1rel="nofollow"$4>',
            $product_area
        );
    }, $content);
}

为什么推荐这个方案?

  • 只会修改相关产品区域内的链接,完全不影响文章其他部分的链接
  • 兼容已经有rel属性的链接(比如rel="noopener"),不会覆盖原有属性,而是追加nofollow
  • is修饰符让正则能跨换行匹配整个容器,避免因为内容换行导致匹配失败

方案二:通过链接特征定位(如果没法用容器)

如果你的相关产品链接有特定特征(比如URL里包含/product/,或者指向特定域名),可以用这种方式精准匹配:

add_filter('the_content', 'my_specific_product_links_nofollow', 10, 1);
function my_specific_product_links_nofollow($content) {
    if (!is_single()) {
        return $content;
    }

    // 匹配URL中包含/product/的a标签(按需修改特征)
    $link_pattern = '/<a[^>]*href="[^"]*\/product\/[^"]*"[^>]*>/i';
    
    return preg_replace_callback($link_pattern, function($matches) {
        $link = $matches[0];
        // 检查是否已有rel属性
        if (strpos($link, 'rel="') !== false) {
            // 追加nofollow到现有rel属性
            return preg_replace('/rel="([^"]*)"/', 'rel="$1 nofollow"', $link);
        } else {
            // 直接添加rel="nofollow"
            return str_replace('<a', '<a rel="nofollow"', $link);
        }
    }, $content);
}

额外提醒

  • 不管用哪种方案,先在测试环境调试,确认没问题再部署到生产环境
  • 正则匹配HTML不是100%完美的,如果你的相关产品是通过短代码、自定义插件生成的,最好直接修改生成链接的原代码,这是最可靠的方式

内容的提问来源于stack exchange,提问作者leilan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 09:54:09