Главная > CMS > WordPress — экранирование внешних ссылок

WordPress — экранирование внешних ссылок

1.В используемой теме редактируем файл functions.php. Дописываем:

<?php
function preg_callback2($matches) {
  $url = explode(':', $matches[2]);
  if (($url[0] == 'http') || ($url[0] == 'https')) {
    $need = "http://krylov.org.ua";
    $replace = "http://krylov.org.ua/redirect.php?";
    if (substr($matches[2], 0, strlen($need)) != $need) {
      $matches[2] = $replace.$matches[2];
    }
  }
  return $matches[1].$matches[2].$matches[3];
}
 
function removeLinks($content) {
  if (! is_feed()) {
    $content = preg_replace_callback('@(]*href=")([^>\"]*)("[^>]*>)@i', "preg_callback2", $content);
    $content = preg_replace_callback('@(]*href=\')([^>\"]*)(\'[^>]*>)@i', "preg_callback2", $content);
  }
  return $content;
}
 
add_filter('the_content', 'removeLinks');
add_filter('comment_text', 'removeLinks');
add_filter('get_comment_author_link', 'removeLinks');
add_filter('get_comment_author_url_link', 'removeLinks');
add_filter('comment_url', 'removeLinks');
add_filter('wp_list_bookmarks', 'removeLinks');
?>

wp_list_bookmarks — функиция, используемая для отображения ссылок из blogroll, если вы используете другую функцию замените на другое значение.
2. Содержание файла redirect.php, который помещаем в корень сайта:

<?php
$uri = "";
if (array_key_exists("QUERY_STRING", $_SERVER)) {
  $uri = $_SERVER["QUERY_STRING"];
}
header("Location: ".$uri);
?>

3. Запрещаем индексирование обрабатываемых ссылок поисковиками. В robots.txt в корне сайта пишем:

User-Agent: *
Disallow: /redirect.php

4. Чтобы в браузере ссылки выглядели как обычно после открытия <body> подключаем jquery и следующий js-скрипт:

$(document).ready(function(){
  $("a").each(function(i){
    var remove_str = 'http://krylov.org.ua/redirect.php?';
    var str = this.href.substring(0, remove_str.length);
    if (str == remove_str) {
      this.href = this.href.substring(remove_str.length);
    }
  });
});
Categories: CMS Tags: , ,
  1. Konstantin Krylov
    22 июля,2011 в 13:55 | #1

    Доработанную версию, в которой реализована возможность оставлять определенные ссылки без экранирования, Вы можете найти на http://noted.org.ua/2453

Похожие публикации