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); } }); });
Доработанную версию, в которой реализована возможность оставлять определенные ссылки без экранирования, Вы можете найти на http://noted.org.ua/2453