В статье предлагается способ маскировки ссылок в шаблоне темы, содержащих php-код, изображения или скрипты с помощью плагина RC Link Redirector. А также рассматриваются некоторые «фишки» при использовании функций этого плагина.

WordPress LogoВ жизни любого блога наступает момент,  когда возникает необходимость в маскировке внешних ссылок. Причин может быть много, но наиболее частые — монетизация блога и желание скрыть ссылки в комментариях к постам, которые зачастую оказываются спамом. Для этих целей существует огромное количество плагинов к 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 класс, отменяющий обработку ссылки.
  • Обеспечивает высокий уровень защиты от несанкционированного использования редиректа
  • Если текст сам является ссылкой меняет его на [ссылка]

Преобразование ссылок выглядит следующим образом:[code lang=»html»]<a href=»http://www.site.com»>Super Site</a>

<a href=»http://archive.brezhnev.pro/ck03b2/XkVCQQIeGABbBgdITEELQlMTQQBEQUpeRV9K/»>Super Site</a>

<a href=»http://www.site.com»>http://www.site.com</a>

<a href=»http://archive.brezhnev.pro/ck03b2/XkVCQQIeGABbBgdITEELQlMTQQBEQUpeRV9K/»>[ссылка]</a>[/code]

Все замечательно кроме одного — ссылки размещенные в шаблоне темы или текстовых виджетах обрабатываться не будут. Обидно? Наверное, но решение существует и лежит в общем-то на поверхности: достаточно внимательно изучить файл плагина, чтобы обнаружить функцию rcr_encode. Именно она нам и нужна для шифрования и редиректа ссылок. Синтаксис вызова функции достаточно простой:

[code lang=»php»]<?php echo rcr_encode(‘<a href=»http://www.site.com/»> Super Site </a>’); ?>[/code]

Достаточно вставить это код в нужное место темы и на выходе получить зашифрованную ссылку.  Обратите внимание, что текст внутри тегов не должен сам являться ссылкой, т.е. не должен содержать ‘http://’ .  Сложные конструкции, типа <a><img /></a> также обрабатываются корректно, но только в том случае, если вызов картинки не содержит php-кода или скриптов. Если же код внутри ссылки присутствует, то функция rcr_encode возвращает строку без изменения. Но и это ограничение легко обходится.

Для решения этой задачи можно применить вот такую конструкцию:[code lang=»php»]<?php

$link = rcr_encode(‘<a href=»http://www.site.com»>.</a>’);

echo str_replace («<a href=\»»,»»,str_replace («\»>.</a>»,»»,$link));

?>[/code] все достаточно просто и, думаю, пояснений не требует. Однако, следует заметить, что этот пример верен в том случае, если плагин не «оборачивает» ссылки в nofollow и noindex и не добавляет target=’_blank’. Если же какая-либо из этих функций плагина будет использоваться, то следует изменить строку поиска str_replace.

В каких ситуациях это может понадобиться? Например вот в такой: [code lang=»html»]<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>[/code]

В действии этот код можно увидеть в шапке и сайдбаре моего сайта.