Привет
нужно оформить код в плагин для вордпреса и немного дописать функционал
Прошу задать свои вопросы в комментариях, а так же оценить по времени и срокам
техническое задание на разработку плагина:
============================================
1. при установке плагин добавляет пункт меню в Настройки -> SEO Перелинковка
2. среда настройки параметров
хранение настроек плагина (не создавать доп таблицы, понять как хранятся настройки в базе
[V] маскировать внешние ссылки
за исключением МЕМО поле в котором каждый фильтр с новой строки
[V] маскировать внутренние ссылки в которых в URL содержится
МЕМО поле (каждое с новой строки)
[V] маскировать внутренние ссылки, которые содержат следующие классы (class=..)
[V] маскировать ссылки с rel=nofollow (во всех вариантах)
rel='nofollow', rel=«nofollow», rel=nofollow
[V] маскировать ссылки, которые находятся внутри блока <noindex>
или <!- noindex ->
[V] обрабатывать ссылки в шорткодах
(по сути простой параметр, который определяет когда отработает наш фильтр до того как отработают фильтры шорткодов или после реализуется при добавлении фильтра функции add_filter (пример фильтров в основной теме проекта lifeha.ru)
способ скрытия ссылок при помощи span технологии
при установке плагина добавляется JS-код в тему
<!-- generator seo perelink -->
<script type="text/javascript" src="/wp-content/themes/life-haker/js/span.js"></ script>
технология реализации:
===========================
это просто сделать через фильтры add_filter
который позволит обработать выдачу html до того как она будет отправлена юзеру
оптимально реализация через регулярные выражения
сейчас это сделано просто в виде функции для отдельного сайта в файле functions.php
=======================
// *********************************************************
// замена внешних ссылок на <span class="seolink" rel=href>
// после того как страница отдается, все спаны с этим классом заменяются обратно на ссылки
// но уже не будут видны поисковикам
// страница на которой тренировался
// view-source:
lifeha.ru/youtube/skolko-... // *********************************************************
function remove_extenal_links($content) {
// находим все ссылки которые не ведут на текущих домен
// !!! + TODO
// скрываем все ссылки на сокращатель lifeha.ru/go/.. нужно разобраться с регуляркой
// неработающий пример: |lifeha.ru/go/.*?
// проблема если в тексте ссылки тег <br/>
// СМ строка 300: view-source:
lifeha.ru/youtube/skolko-... $host = strtr($_SERVER['HTTP_HOST'], array('.' => '.'));
// TODO
// Известные проблемы:
// !!! не заменяет ссылку если href в одинарных кавычках
// пример 192 view-source:
lifeha.ru/vkontakte/kak-z... // !!! не заменяет ссылки внутри плагина видеогалереи (не понял когда он отрабатывает))
// правильное выражение которое лихо заменяет все внешние ссылк
//$pattern = '/<a(.*?)href=["'](http|https)://(?!'.$hos t.')([^"']+)["']([^>]*?)>(.*?|[^a] *?)</a>/i';
$pattern = "/<a(.*?)href=["'](http|https)://(?!".$hos t.")([^"']+)["']([^>]*?)>([sS.]*?) </a>/i";
$replace = "<span class='seolink_target' rel="http://$3"$1$4>$5</span>";
$content = preg_replace($pattern, $replace, $content);
// скрываем все ссылки lifeha.ru/go вторым проходом
$pattern = '/<a(.*?)href=["'](http|https)://(lifeha.ru/go/ )([^"']+)["']([^>]*?)>([sS.]*?)</a> /i';
$replace = "<span class="seolink_target" rel="http://$3$4"$1$5>$6</span>";
$content = preg_replace($pattern, $replace, $content);
return $content;
}
// важно поставил приоритет после того как отработают все с приоритетами 10(по умолчанию)
add_filter ('the_content', 'remove_extenal_links',11);
add_filter ('the_excerpt', 'remove_extenal_links',11);
add_filter ('get_comment_author_link', 'remove_extenal_links',11);