Плагин WP No External Links

Вордпресс — довольно унылый движок, местами. Иногда он очень раздражает, еще больше — если не знать о некоторых его замечательных возможностях (ведь на самом деле, им можно кукловодить и кукловодить). Примеры есть — инвайтная система (до которой руки все не дойдут попробовать), и набор оптимизации от sunnybear (книжка которого уже летит ко мне почтой), и то, что мы сотворили для Школы Миши Квакина.


Но сегодня jehy попросил (а как я могу отказать такой девушке в недавнем прошлом!) меня .

А именно, о его плагине WP No External Links.

Честно говоря, отношение к перезакрытию всего блога от поисковиков у меня довольно резкое — по многим причинам, не последняя из которых невозможность найти потом по обраткам упоминание о себе.

Но у этого плагина есть очевидный плюс — он не портит ссылки, как это делает другая, довольно популярная (и особо яростно ненавидимая мною), реализация, (J) ExR. Ну и, соответственно, учитывает предпочтения и Яндекса-наше-всё.

Сначала выскажусь по поводу оформления странички самого плагина. Многабукв, ага. Насколько я помню, конструкция == Название == в readme.txt позволяет создавать собственные табы, нет? History здесь совсем лишнее — на самом деле, можно было и при отправке в репозиторий новых версий добавлять эту подпись (svn ci -m 'comment'), ну и так сейчас можно вынести в раздел Installation. Ну и немножко граммар-наци — пропущена буква «a» в «read at least».

Про noindex, кстати, нерусскоязычные пользователи и слыхом не слыхивали, так что можно спокойно ставить пометочку, что оно нужно лишь для Яндекса. (да и, честно говоря, держать отключенной эту опцию по умолчанию)

От страницы настроек больше ничего не надо, кроме того, что там есть. Ну разве что поправить опечатку «макировать» (да и вынести это слово в подзаголовок группы чекбоксов). Упомянуть, что «подмена путей» — это добавление goto перед ссылкой. Повесить на кнопку сабмита class="button-primary", чтобы в 2.7 она смотрелась в стиле админки.

Сам же плагин легко устанавливается и прекрасно работает. Собственно, что от него и требуется.

К тому же, он позволяет создавать список белых урлов, на которые не будет распространяться маскировка.

Но, если говорить по существу, это тот самый случай, когда неиспользование объектно-ориентированного подхода делает реализацию немного кривой (и я не только о том, что с таким неймспейсом куда удобней работать, чем мучаться с названиями функций).

Вот хорошо, что автор использует хуки активации-деактивации (правда, при отключении плагин забывает удалить из базы три поля, появившихся в новой версии). Можно пойти дальше и хранить в табличке опций только одно поле, в котором через пробелы или в битовом представлении зашифрованы значения опций (вообще, в ВП хорошо работает кеширование запросов, но так проще).

При объектном подходе мы можем вытаскивать get_option'ами настройки всего один раз в самом начале, а не вызывать их в каждой функции. И, соответственно, инкапсуляция сильно облегчит нам задачу, сократив код и сделав его удобочитаемым и расширяемым. И, кстати, насколько я знаю add_option сам благоразумно проверяет наличие опции в базе и при ее существовании даже не пробует их изменять.

Ну и, собственно, меня напрягает, что локализация сделана в ненативном Вордпресс-виде через __(), а через константы. А первая строчка с проверкой на прямой доступ к плагину, насколько я знаю, не имеет особого смысла — ВП следит за защитой сам.


Но, в целом, повторюсь, плагин достойно решает свою, пусть и банально-очевидную задачу.

Упрямым сеошникам и тицепараноикам — качайте уже
плагин для маскировки ссылок WP No External Links.

{44 комментария} Подписка на комментарии

из вышесказанного я так и не понял почему он лучше Jexr и за что ты джексер так не любишь?

@lilumi: Боже, ну ты не видел что ли во что отвратительный Jexr превращает ссылки?

А плагин от Jehy по настройкам просто добавляет nofollow и noindex, а если включена еще одна, перед ссылкой добавляет sitename.ru/?goto=. Обрабатывает текст в комментариях и постах, а также ссылка на авторе комментария.

Ещё ты только не сказал, что он с пермалинками работает )

Т.е если они включены, то получается ссылка без вопросика.

Замечаний много, учту сегодня-завтра.

Насчёт ООП — есть такое дело.

Просто у меня валяется мой плагин livejournal-friends, который позволяет читать жж френдов (в том числе френд-онли записи), и там я ООП получил по полной — тут лень было переделывать)

Про noindex, страницу инсталляции и стиль кнопочки — особенное спасибо.

Насчёт деактивации — по-хорошему, нужно ещё писать деинсталляцию отдельную, которая убивает ещё привязанные к постам поля, но я не стал заморачиваться — может, на неделе сделаю.

Первая строчка... Ммм. При отключенном htaccess я не понимаю, как вордпресс будет следить за доступом к плагину)

Там у меня нет никаких отдельных действий, которые бы были потенциально опасны — но почему бы не использовать её, как правило хорошего тона.

Нативный перевод вордпресса через __ я ненавижу тихой ненавистью) Ибо он чудовищно прожорлив, искусственен и излишен.

То есть — да, можно ставить фильтра на gettext () и что-нибудь менять в выдаче. Но в 99,999% случаев это не нужно.

Спасибо за разбор полётов :)

@Jehy: да, про пермалинки забыл (ну это же не совсем реклама была, да?)). Но вообще, считаю даже такой способ достаточно глупым — достаточно поисковикам начать определять 301 на внешние сайты и передавать пузомерки напрямую, как они делают это с внутренними страницами, и ваше дело швах.

По поводу перевода абсолютно согласен — но в таком случае вообще эти локализации не нужны =).

Доступ к плагину — насколько знаю, ВП всегда включает .htaccess, даже при отключенных пермалинках, поэтому я не видел ни одного плагина с такой проверкой (ну разве что года два назад в PHPNuke :))). В принципе, на это можно забить (кто не защитился — тот сам виноват)), но пусть будет.

Плагин же жж-френдов же — это отлично. Сделай так, чтобы через template_redirect подключалась отдельная страничка с френдлентой! Это еще больше сблизит ЖЖ и стэндэлоны, и, возможно, даст лишний плюс в нашу пользу ^_^

Да, я видел что творит джексер, но это при включенных всех опциях, а при правильном обращении он отлично работает.

Вот например у меня глянь. У меня он делает ссылки nofollow и превращает их во внутренние с запретом их индексации поисковиками в .htaccess а noindex я забрал, потому что считаю это уже лишним, а во-вторых, думаю, что поисковик считает подозрительным столь частое употребление noindex на странице.

Будут определять 301 — сделаем яваскриптовые ссылки)

У нас сейчас вообще эпическая война с яндексом идёт ;_;

Насчёт доступа — как вордпресс включит htaccess на сервере, где он выключен?:))

На многих серверах его просто нету.

Насчёт жж френдов — так оно и делается. Всё эта чудовищная лень не даёт отладить до конца и выложить няшечкой...

У меня страничка jehy.ru/articles/category/friends/

аж с декабря где-то лежит ((

@lilumi: последние версии не видел, так что, может быть, из него и сделали что-то получше. Мне-то оно вообще не надо, я ссылки вообще очень люблю.

@Jehy: ну, если ты о настройках сервера, а не о наличии файла — то уж проще предупредить саму возможность инъекций, ведь, опять же, тогда все плагины будут с такими дырками — я же говорю, не помню, плагов для ВП с защитой от прямого включения. А еще тогда надо добавлять index.htm в папку — на случай, если сервер вообще неправильно сконфигурирован :) И еще, и еще :)

И template_redirect с пермалинками в виде папок на некоторых конфигурациях сервера и из-за шаблона тоже может тупить, скажем. Когда я галерею для Школы Миши Квакина делал, первая страничка выдавала 404 (я подключал header.php, в котором уже стандартная проверка на отсутствие постов была — сейчас, удмаю, уже не так надо делать). Но потом /school-tasks/post/34/ перекидывала на пост, в котором в слаге упоминался кусок этого урла — опять же, пришлось создавать отдельную страничку под это дело.

Хотя я вот сейчас думаю, да, наверное, стоит включать проверку в плагины — на всякий случай, код не лишним будет, в любом случае (единственное, надо учитывать, что название папки плагина может измениться — мало ли что, — и узнавать ее из названия текущего файла — ведь в ВП они должны совпадать для правильной работы).

сегодня изменил старому j (exr) и поставил этот плагин WP No External Links, потому что обраружил баг в джексере, что он иногда не может редиректить на внешнии ссылки а редиректит на пост в блоге с похожим названием (сомневаюсь, що кто-то понял что я сказал, ну не важно).

Этот плагин хорош. Но еще б хотелось видеть в опциях возможность изменить goto на чтонибудь свое (у меня к примеру раньше стояло «link»). И ссылки с присвоенным классом (к примеру class="sap" для SAPE'вских ссылок ) или rel="my" для дружеских ссылок

Я думаю классы и изменение префикса автор ^_^

А вот за rel="my" я же первым и убью кого-нибудь. Микроформаты XFN опеределяют использование rel для установки социальных связей с другими сайтами — me (твой другой сайт), friend (друг) и прочие gmpg.org/xfn/11

У меня валяется простенький плагинчик для этого, который расставляет релы, опираясь на блогролл. Ну я его тогда выложу )

тьфу, ...автор сделает )

ну я и имел ввиду rel="my" для моих сайтов, можно и rel="friend" когда ссылаешься на сайт который не хочешь прятать в nofollow

me! me! me! :) и еще external рядом, если по спецификациям.

oops. завтыкал. надо будет поисправлять.

щ_Щ

Насчёт замены goto я понял...

Просто хотелось максимально упростить интерфейс настроек.

Не знаю, стоит ли добавлять такую опцию...

В конце концов, если кому-то вдруг понадобилось, то можно просто самому в скрипте плагина заменить)

А с gmpg.org/xfn/11 я всё понял, кроме того, зачем же эта штука нужна :))

Классы могу и сделать для дружественных и не очень ссылок.

В микроформатах и XFN, в частности, не сильно надо много понимать =). Я попробую все-таки дописать потс на эту тему.

Добавление классов — не думаю, что этот плагин требует такого расширения функционала. А вот изменение префикса — почему бы и нет? Какая разница, если все равно дергаешь до кучи опций из базы?

Пиши потс, почитаю с интересом :)

Префикс можно... В версии 0.71 можно было менять префикс, теперь — нет))

Ладно. В общем, включу в него только СЕОшные компоненты. Как ты справедливо заметил, классы к ним не относятся)

@Jehy: я хотел сначала изменить сам, но нашел 16 мест где goto используется, и где прикажешь менять?

Добавление классов удобно для таких как я, что продают ссылки на своих блогах из sape — задаешь класс в опциях плагина и в админке сапы и эти ссылки будут нормальными

@lilumi: Так ты имеешь в виду вдобавок к фильтру по доменам еще и фильтровать по классу — т.е. если у ссылки есть такой класс, то она не нофолловится? Ну если бы так сразу сказал, я бы согласился, что это совсем даже сеошная фича и ее в плагин тоже можно засунуть ))

@lilumi: Менять можно было все 16 при помощи Replace All :))

Nevermind, сделаю эту опцию на днях.

Ммм, а как ссылки с сапе относятся к маскировке внешних ссылок? Они ведь не внутри текста постов, а стоят отдельно, подключаемые в шаблон плагином или забитые в тему... И их там особо не помаскируешь:)) Нет. Вернее, конечно, помаскирую, если буду фильтр на output buffer вешать, но это только если специально задаться целью задавить ссылки сапе любой ценой :)))

Так что поясните, пожалуйста, мысль.

P.S. А если есть какие-то рекламные посты, то на них можно просто отключить обработку...

Речь же идет о вот этом плагине maxsite.org/plugin-sape да, @lilumi? Теперь САПу и поближе к тексту пихают, да, такие времена :). Да и в каждый пост — постовые, на которые нофоллоу вешать запрещено. С другой стороны, в таких блогах такой маниакальный нофоллоу и не нужен... :)

Вообще, тут все просто — просто фильтр content, где мы будем снимать нофоллоу с ссылок с классами, должен иметь высокий порядок действия, чтобы гарантированно после всех плагинов исполняться.

Да. И то правда. Мини-плагин, снимающий nofollow с ссылок определённого класса — гораздо более красивое решение.

А. То есть, имелась в виду контекстная реклама? Я просто только обычную использую, отсюда и узость кругозора ))

да, все верно.

@Jehy: >Просто у меня валяется мой плагин livejournal-friends, который позволяет читать жж френдов (в том числе френд-онли записи), и там я ООП получил по полной — тут лень было переделывать)

Простите, а где сие счастье можно скачать? Актуальная штуковина была бы.

Да пока что нигде...

Мы его как-то сделали в порыве энтузиазма, и оставалось пару штрихов — и тут оно надоело))

Надо только один аякс слегка дооформить.

Так и лежит бета у меня на сервере.

Свою роль сыграло то, что на самом деле штука не очень актуальная — мало есть пользователей вордпресса, читающих жж...

@Jehy: Да меня бы хоть бетка устроила, мне не шашечки, мне ехать! :) У вас же он работает, значит — жизнеспособный вполне. Могу расписаться, где надо, что за всякие разрушительные последствия, ежели таковые настанут, отвечаю только сама. :) Может, кинете ссылочку на скачивание? Можно временную, я сразу же заберу, и удаляйте файл на здоровье.

> мало есть пользователей вордпресса, читающих жж...

Ну нифига ж себе — мало! А для кого тогда существует туева хуча плагинов, так или иначе связывающих ЖЖ и вордпресс: всякая поддержка ЖЖ-шных юзерпиков, кросспостеры, и даже плагин, позволяющий юзернейм вставлять как в ЖЖ.

@автор: простите за некоторый флуд, я понимаю, что логичнее было бы с этим обратиться непосредственно в блог Jehy, но там ни единого упоминания об этом плагине обнаружить не удалось.

Плагинов много, но каждый решает только одну задачу интеграции.

Работающий кросспостер — есть только один.

Вставка жж ников — только один.

Насчёт юзерпиков не уверен.

Ридеров для френд ленты вообще нет нормальных опубликованных...

Если делать из этого комплекс (у меня была мысль, но закончилась), то он будет большой и страшный, и отожрёт половину мощностей блога.

А вы говорите — оптимальное и простое...

Арина, прочитайте трижды «отче наш», и плюньте через плечо — скорее всего поможет, если только ещё не пришли фиолетовые шлюмшлюпики.

@Jehy: а вы помните Псалом 129? Пора что-то со спамерами делать!!1

@Jehy: еще 2 ошибки — даже не заметил как пропустил. Во-первых, некоторые устанавливают блог не в корень, так что ожидание, что goto находится в начале реквест_ури и надо отмерить 6 символов от. К тому же, bloginfo ('siteurl') — уже deprecated codex.wordpress.org/Templ...ags/get_bloginfo

Ну и чисто Location в редиректе — недостаточно, стоит еще на всякий случай отдать хедер 301 Moved Permanently.

Ну я просто стороннюю штуку делал и вспомнил про тебя ^_^

Сейчас ещё решил потыкать этот плагин, пару вещей поменять...

> bloginfo ('siteurl') — уже deprecated

Это-то да, но вот кроме siteurl и home ничего нового не введено, и рекомендуемая к использованию функция get_bloginfo () всё равно берёт эти две настройки из таблицы options. Так что это они у себя же нагнали по поводу deprecated — иначе не понимаю, где ещё эти настройки хранятся.

Другой вопрос, что siteurl нужно заменить на home.

> стоит еще на всякий случай отдать хедер 301 Moved Permanently

Не вижу смысла, ибо всеми редирект отрабатывается как 302 (что гораздо правильнее, чем 301, см. www.w3.org/Protocols/rfc2...c2616-sec10.html)

Кстати

> так что ожидание, что goto находится в начале реквест_ури и надо отмерить 6 символов от

Ну мне наплевать, какой адрес используется — сайта, или блога, всё равно 6 символов отмеряются не от начала реквест ури, а от найденной в строке подстроки goto.

Извини на тройной комментарий :)

Переписал плагин с учётом замечаний, интересно твоё мнение.

Круто-круто переделал — я уже даже не вспомню, действительно ли я ступил, и ты успел втихую поправить )). Про 302 ты точно подметил.

Вместо siteurl сначала рекомендовалось home, но и он deprecated, сейчас это — просто url. Хотя, в принципе, по всем трем значениям сейчас все доступно, вдруг от устаревших откажутся полностью. Ну, еще есть wpurl, но это конкретная установка самого ВП.

Все остальное клево.

Ох, надеюсь, я все понятно написал, а то у меня жар ^_^

Ыть. Поправляйся)

У меня сейчас просто стоит 2.7, и там в табличке нет ничего кроме home и siteurl... Сейчас ещё раз проверил — url просто нету.

Ладно, как выйдет 2.8 — буду смотреть.

Ещё раз спасибо за кучу ценных замечаний :)

У меня проблема с плагином. Т.к. сайт jehy.ru у меня почему-то не работает то задам тут если автор не против... Вобщем ситуация такая. php 4c чем-то, wp 2.7 и при включении плагина ссылки становятся вида blog.ru/goto/http://site.ru жму на нее и получаю редирект на blog.ru/goto/http://site.../site.ru/site.ru... и т.д. на что собственно и получаю «url too long»... пока капаюсь сам, но модет автор ответит быстрее? =(

Заранее спасибо.

C php 5 все нормально, но очень хотелось бы знать куда копать при php 4.x

Зашёл на ваш блог — кажется, всё работает...

Это вы разобрались, не тот блог, или решили альтернативным способом?

Блог мой не работает т.к. сервер в дауне неделю...

С php4 каждый раз приходится копать злостно...

Поставил php5 вместо php4... почему не работает с php4 пока увы не разобрался по причине отсутствия времени.

Если как-нибудь разберётесь, будет хорошо.

Мой сервер всё ещё отдыхает, так что придётся дальше здесь флудить ^_^

ok если дойду, то обязательно отпишу.

Флудите-флудите, бансета здесь нет ^_^

А у меня плагин работает с ошибками . Первый раз при переходе по ссылке — переходит, второй раз пишет — You were going to the redirect link, but something did not work properly.

и в конец пути добавляет точку с запятой ;

В чем может быть проблема? Стоит PHP5 и WP Super Cache.

Deimos, точно такая же проблема. Никак не могу ее решить

А здесь можно оставить свое мнение ↓ Подписка на комментарии
какие-то из следующих трех полей можно оставить пустыми


нет тегам!!! **эмоция**, __ирония__, >цитата, {[код]}