WordPress过滤器APPEND nofollow可以解除关联

时间:2019-04-18 16:14:41

标签: regex wordpress filter

我正在尝试附加nofollow来添加外部链接。如果链接不具有rel属性,则将添加rel="nofollow"。如果链接已经具有rel="nofollow",则不会发生任何事情;如果链接具有rel=something else,则还应添加nofollow值。

function nofollow($content) {
  $content = preg_replace_callback('/<a[^>]*href=["|\']([^"|\']*)["|\'][^>]*>([^<]*)<\/a>/i',
  function($m) {
    $parseUrl = parse_url(home_url());
    $mydomain = $parseUrl['host'];
    if (strpos($m[1], $mydomain) === false) {
      return '<a href="'.$m[1].'" rel="nofollow">'.$m[2].'</a>';
    } else {
      return '<a href="'.$m[1].'">'.$m[2].'</a>';
    }
  },
  $content);
  return $content;
}
add_filter('the_content', 'nofollow');

代码成功将rel=follow添加到外部链接,但例如,如果链接具有rel="noopener" it will replace it will rel = follow . Why is it no appending like so? rel =“ noopener nofollow”`

1 个答案:

答案 0 :(得分:0)

因为您忽略了<a>标签之外的href标签的所有属性。如果要考虑现有的rel值,则还应该阅读它。也许使用某些html解析器功能会更容易,因为regexp对于您的情况来说有点太低了。