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);Если у вас будут идеи доработки, пожалуйста, пишите в комментариях.
Отличное решение приведено. Как раз преобразование ссылки в оную в виде тайтла и искал. Спасибо!
Спасибо за информацию. Нашел много полезного у вас на блоге.