Маскируем «сложные» ссылки в шаблоне темы WordPress
В статье предлагается способ маскировки ссылок в шаблоне темы, содержащих php-код, изображения или скрипты с помощью плагина RC Link Redirector. А также рассматриваются некоторые «фишки» при использовании функций этого плагина.
В жизни любого блога наступает момент, когда возникает необходимость в маскировке внешних ссылок. Причин может быть много, но наиболее частые — монетизация блога и желание скрыть ссылки в комментариях к постам, которые зачастую оказываются спамом. Для этих целей существует огромное количество плагинов к WordPress, но наиболее популярными заслуженно считаются два — WP No External Links и RC Link Redirector. Первый «на лету» производит замену внешних ссылок на внутренние, оборачивает их в теги <noindex> и 'rel=nofollow', может добавить тег target='_blank' и т.д.
В итоге ссылка <a href='http://www.site.com'>Super Site</a>
принимает вид: <noindex><a rel='nofollow' target='_blank' href='http://www.site.com'>Super Site</a></noindex>
Однако очевидно, что фактический адрес редиректа остается неизменным и виден посетителю. Намного эффективней работа плагина RC Link Redirector от Роланда Чанишвили — помимо редиректа он шифрует ссылку, делая её «неопознаваемой», да и вообще функционал плагина один из широчайших:
- Гибкое и удобное управление из панели Администратора.
- «Шифрование» всех исходящих ссылок.
- «Оборачивает» ссылки в постах и страницах
- «Оборачивает» ссылки в цитатах
- «Оборачивает» ссылки в комментариях
- «Оборачивает» ссылки в текстах комментариев
- «Оборачивает» ссылки на сайты коментаторов
- «Оборачивает» ссылки в блогролле
- Использует свою базовую ссылку при редиректе
- Базовая ссылка автоматически меняется при сохранении параметров плагина
- Добавляет target='_blank' ко всем обработанным ссылкам, кроме архивов и исполнимых файлов
- Добавляет rel='nofollow' ко всем обработанным ссылкам
- Использует «белый список» слов отменяющих обработку ссылок их содержащих.
- Использует служебное значение тега rel='*****' отменяющее обработку конкретной ссылки.
- Учитывает специальный CSS класс, отменяющий обработку ссылки.
- Обеспечивает высокий уровень защиты от несанкционированного использования редиректа
- Если текст сам является ссылкой меняет его на [ссылка]
Преобразование ссылок выглядит следующим образом:
<a href="http://www.site.com">Super Site</a> <a href="http://a-brezhnev.ru/ck03b2/XkVCQQIeGABbBgdITEELQlMTQQBEQUpeRV9K/">Super Site</a> <a href="http://www.site.com">http://www.site.com</a> <a href="http://a-brezhnev.ru/ck03b2/XkVCQQIeGABbBgdITEELQlMTQQBEQUpeRV9K/">[ссылка]</a>
Все замечательно кроме одного — ссылки размещенные в шаблоне темы или текстовых виджетах обрабатываться не будут. Обидно? Наверное, но решение существует и лежит в общем-то на поверхности: достаточно внимательно изучить файл плагина, чтобы обнаружить функцию rcr_encode. Именно она нам и нужна для шифрования и редиректа ссылок. Синтаксис вызова функции достаточно простой:
<?php echo rcr_encode('<a href="http://www.site.com/"> Super Site </a>'); ?>
Достаточно вставить это код в нужное место темы и на выходе получить зашифрованную ссылку. Обратите внимание, что текст внутри тегов не должен сам являться ссылкой, т.е. не должен содержать 'http://' . Сложные конструкции, типа <a><img /></a> также обрабатываются корректно, но только в том случае, если вызов картинки не содержит php-кода или скриптов. Если же код внутри ссылки присутствует, то функция rcr_encode возвращает строку без изменения. Но и это ограничение легко обходится.
Для решения этой задачи можно применить вот такую конструкцию:
<?php
$link = rcr_encode('<a href="http://www.site.com">.</a>');
echo str_replace («<a href=\»","«,str_replace („\“>.</a>»,"«,$link));
?> все достаточно просто и, думаю, пояснений не требует. Однако, следует заметить, что этот пример верен в том случае, если плагин не „оборачивает“ ссылки в nofollow и noindex и не добавляет target='_blank'. Если же какая-либо из этих функций плагина будет использоваться, то следует изменить строку поиска str_replace.
В каких ситуациях это может понадобиться? Например вот в такой:
<a href=»<?php $link = rcr_encode('<a href="http://twitter.com/abrezhnev">.</a>');
echo str_replace («<a href=\»","«,str_replace („\“>.</a>»,"«,$link)); ?>»
title="Следите за новостями блога на Twitter. Фолловеров уже
<?php if(function_exists('show_followers_count')) show_followers_count(); ?> «>
Твиттер</a>
Пример 2:
<a href=»<?php $link = rcr_encode('<a href="http://www.rss2email.ru">.</a>');
echo str_replace («<a href=\»","«,str_replace („\“>.</a>»,"«,$link)); ?>» target="_blank">
<img src="<?php bloginfo('template_directory'); ?>/images/rss2email.png" alt="rss2email" />
</a>
В действии этот код можно увидеть в шапке и сайдбаре моего сайта.
Приветствую Вас на моем персональном сайте. Когда-то это была рекламная площадка моих услуг, а сейчас она становится чем-то вроде блога. Круг моих профессиональных занятий и хобби: инженер, фотограф, вэб-дизайнер, WoW'ер. Обо мне: Александр Брежнев, 34 года, живу в Саратове, женат, есть очаровательная дочка.