NoFollow Rel="sponsored" pre_replace

NoFollow Rel="sponsored" pre_replace

我使用 wordpress,我在我的 functions.php 中添加了一些代码,以自动将所有 link 不符合特定条件的不关注。

目前,如果 link examplesite.comexamplesite2.com 标记为 dofollow 否则设置为 nofollow

我用来实现它(完美运行)的代码是:

function add_nofollow_content($content) {
$content = preg_replace_callback(
'/<a[^>]*href=["|\']([^"|\']*)["|\'][^>]*>([^<]*)<\/a>/i',
function($m) {
if (strpos($m[1], "https://www.examplesite.com") === false && strpos($m[1], "https://www.examplesite2.com") === false)
return '<a href="'.$m[1].'" rel="nofollow" target="_blank">'.$m[2].'</a>';
else
return '<a href="'.$m[1].'" target="_blank">'.$m[2].'</a>';
},
$content);
return $content;
}
add_filter('the_content', 'add_nofollow_content');

但是,我想添加一个附加条件。

如果站点是 examplesiteexamplesite2.com,则将其标记为 rel="follow"

其他

如果是 examplesite3.comexamplesite4.com 标记为 rel=”sponsored”

else(如果不满足其中任何一个条件return

no Follow 代替。

有人可以帮我解决这个问题吗?我尝试添加

function add_nofollow_content($content) {
$content = preg_replace_callback(
'/<a[^>]*href=["|\']([^"|\']*)["|\'][^>]*>([^<]*)<\/a>/i',
function($m) {
if (strpos($m[1], "https://www.examplesite.com") === false && strpos($m[1], "https://www.examplesite2.com") === false && strpos($m[1], "https://examplesite3.com") === false && strpos($m[3], "https://examplesite4.com") === false)
return '<a href="'.$m[1].'" rel="nofollow" target="_blank">'.$m[2].'</a>';
else
return '<a href="'.$m[1].'" target="_blank">'.$m[2].'</a>';
return '<a href="'.$m[1].'" rel="sponsored" target="_blank">'.$m[3].'</a>';
},
$content);
return $content;
}
add_filter('the_content', 'add_nofollow_content');

但是它创建了一个循环并且不起作用。预先感谢您的任何想法!

我也试过这个,改变 elseif 但它似乎没有超过第二个条件。

function add_nofollow_content($content) {
$content = preg_replace_callback(
'/<a[^>]*href=["|\']([^"|\']*)["|\'][^>]*>([^<]*)<\/a>/i',
function($m) {
if (strpos($m[1], "https://www.examplesite.com") === false && strpos($m[1], "https://www.examplesite2.com") === false && strpos($m[3], "https://www.bluehost.com") === false && strpos($m[3], "https://amzn.to") === false)
return '<a href="'.$m[1].'" rel="nofollow" target="_blank">'.$m[2].'</a>';
elseif (strpos($m[3], "https://www.examplesponsor.com") === false && strpos($m[3], "https://www.examplesponsor2.com") === false && strpos($m[3], "https://examplesponsor3.com") === false)
return '<a href="'.$m[3].'" rel="sponsored" target="_blank">'.$m[4].'</a>';
        else
return '<a href="'.$m[1].'" target="_blank">'.$m[2].'</a>';
},
$content);
return $content;
}
add_filter('the_content', 'add_nofollow_content');

试试这样:

function add_nofollow_content($content) {
  $content = preg_replace_callback(
    '/<a[^>]*href=["|\']([^"|\']*)["|\'][^>]*>([^<]*)<\/a>/i',
    function($m) {
      if ((strpos($m[1], "https://www.examplesite.com") !== false) ||
          (strpos($m[1], "https://www.examplesite2.com") !== false)) {
        return '<a href="'.$m[1].'" rel="follow" target="_blank">'.$m[2].'</a>';
      } elseif ((strpos($m[1], "https://www.examplesite3.com") !== false) ||
                (strpos($m[1], "https://www.examplesite4.com") !== false)) {
        return '<a href="'.$m[1].'" rel="sponsored" target="_blank">'.$m[2].'</a>';
      } else {
        return '<a href="'.$m[1].'" rel="nofollow" target="_blank">'.$m[2].'</a>';
      }
    },
    $content);
  return $content;
}
add_filter('the_content', 'add_nofollow_content');

这将检查是否使用 strpos 找到两个 URL 中的任何一个,并且 returns 是否适合每种情况 rel=。对于所有其他 URL,它将 return rel="nofollow"。如果您必须定义更多 URL,请确保在逻辑上也对它们进行 ||

对于更长的 URL 列表,我将更改代码结构以进行 URL → rel 类型的数组映射,并循环匹配每个匹配项的条目.