CODYSHOP
темы и плагины для WordpressСегодня хотел поделиться коротким сниппетом для WordPress. Идею я подсмотрел на сайте “Тостер”. Кто не знает, это сервис вопросов и ответов для IT-шников. Суть идеи – преобразование url в человекопонятный заголовок. Другими словами, когда пользователь в комментарии отправит ссылку вида http://site.ru/some-page/
, WordPress автоматически получит заголовок статьи, на которую ссылаются. Ссылка будет выглядеть простым текстом: Title of post
.
Давайте попробуем это реализовать. Сделаю небольшую оговорку. Наш код будет преобразовывать ссылки ведущие только на внутренние страницы текущего сайта. Если в комментарии есть ссылка на сторонний ресурс, он будет выводиться обычным способом.
Кроме того, сделаем еще одну штуку. Если пользователь ввел длинную ссылку на сторонний ресурс, например вида http://site.ru/some-page-with-long-url/
, он будет занимать слишком много места. Давайте все такие длинные ссылки укоротим, они будут выглядеть примерно так: http://site.ru/some-...-url/
. И еще. Всем внешним ссылкам добавим атрибут nofollow
.
Итак, обозначив задачу, приступим к её выполнению. Необходимые комментарии, я разместил прямо в коде. Разместите следующий сниппет в файл function.php:
function url_to_title($matches) { $site_url = 'site.ru'; // замените на адрес вашего сайта $result = strpos ( $matches[1], $site_url ); // проверим, принадлежит ли url в тексте комментария текущему сайту или нет if ( $result !== false ) { // получаем id по url $postid = url_to_postid( $matches[1] ); // получаем заголовок по id $title = get_the_title( $postid ); return '<a href="' . $matches[1] . '" target="_blank">' . $title . '</a>'; } else { $short_url = preg_replace('~^([^/]*)/(.{5})(.{3,})(.{10})$~', '$1/$2...$4', $matches[2]); return '<a href="' . $matches[1] . '" target="_blank" rel="nofollow noindex">' . $short_url . '</a>'; } } function detect_comment_url($content) { $pattern= '/<a.*href=\"(https?:\/\/.*)\".*>https?:\/\/(.*)<\/a>/iU'; $content= preg_replace_callback($pattern, 'url_to_title', $content); return $content; } add_filter( 'comment_text', 'detect_comment_url' , 9);
Если у вас будут идеи доработки, пожалуйста, пишите в комментариях.
Отличное решение приведено. Как раз преобразование ссылки в оную в виде тайтла и искал. Спасибо!
Спасибо за информацию. Нашел много полезного у вас на блоге.