Добавление rel = "nofollow" ко всем ссылкам в постах Wordpress - PullRequest
2 голосов
/ 10 мая 2011

Я хочу добавить rel = "nofollow" ко всем ссылкам в моих постах WordPress и хочу иметь список ссылок, которые не получат nofollow.

Я былстараюсь много, но я не могу сделать это правильно, потому что я действительно не очень хорошо понимаю регулярные выражения.

Итак, у меня есть строка $ text, и я хочу заменить href = "url">с href = "url" rel = "nofollow">, если только href не соответствует некоторым конкретным доменам.

1 Ответ

4 голосов
/ 10 мая 2011

Скажем, вы добавили класс к ссылкам, на которые вы не хотите переходить ...

$skipClass = 'preserve-rel';

$dom = new DOMDocument;

$dom->loadHTML($str);

$anchors = $dom->getElementsByTagName('a');

foreach($anchors as $anchor) { 
    $rel = array(); 

    if ($anchor->hasAttribute('class') AND preg_match('/\b' . preg_quote($skipClass, '/') . '\b/', $anchor->getAttribute('class')) {
       continue;
    }

    if ($anchor->hasAttribute('rel') AND ($relAtt = $anchor->getAttribute('rel')) !== '') {
       $rel = preg_split('/\s+/', trim($relAtt));
    }

    if (in_array('nofollow', $rel)) {
      continue;
    }

    $rel[] = 'nofollow';
    $anchor->setAttribute('rel', implode(' ', $rel));
}

var_dump($dom->saveHTML());

Это добавит nofollow ко всем ссылкам, кроме тех, у которых класс определен выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...