Замена url на название поста в комментариях на Wordpress

3992

Сегодня хотел поделиться коротким сниппетом для 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);

Если у вас будут идеи доработки, пожалуйста, пишите в комментариях.

2 comments to post “"Замена url на название поста в комментариях на WordPress"
  • Yan Alexandrov
    Кирилл19 Апр 2018 00:58

    Отличное решение приведено. Как раз преобразование ссылки в оную в виде тайтла и искал. Спасибо!

    Ответить
  • Yan Alexandrov
    Сергей10 Июл 2019 22:44

    Спасибо за информацию. Нашел много полезного у вас на блоге.

    Ответить
Добавить комментарий

B I PHP JS

Made with by CodyShop