Внешние URL-адреса
Вам придется извлечь содержимое веб-страницы и извлечь из нее заголовок.Будьте осторожны с этим, поскольку это может значительно замедлить скорость загрузки вашей страницы в зависимости от того, сколько ссылок вы пытаетесь перехватить, и сколько времени их серверам требуется для передачи контента.
Для этого также необходимопарсит HTML с регулярным выражением, которое обычно чего-то, чего следует избегать .
Вот как будет выглядеть конечный результат:
function shortcode_out($atts) {
$atts = shortcode_atts( array(
'link' => '/',
'newtab' => false
) , $atts);
//get the URL title
$contents = file_get_contents($atts['link']);
if ( strlen($contents) > 0 ) {
$contents = trim(preg_replace('/\s+/', ' ', $contents));
preg_match("/\<title\>(.*)\<\/title\>/i", $contents, $title);
$site_title = $title[1];
} else {
$site_title = 'URL could not be found';
}
if ($atts['newtab'] == true)
return '<a target=_blank href='.$atts['link'].'>'.$site_title.'</a>';
else
return '<a href='.$atts['link'].'>'.$site_title.'</a>';
}
Внутренние URL
Если вы хотите получить внутренний URL-адрес, то на самом деле есть функция WordPress, которая может обработать это для вас: url_to_postid()
.Получив идентификатор сообщения, вы можете использовать get_the_title()
для получения заголовка сообщения следующим образом:
$post_id = url_to_postid($url);
$title = get_the_title($post_id);
Вот как будет выглядеть конечный результат:
function shortcode_out($atts) {
$atts = shortcode_atts( array(
'link' => '/',
'newtab' => false
) , $atts);
//get the post title
$post_id = url_to_postid($atts['link']);
$title = get_the_title($post_id);
if ($atts['newtab'] == true)
return '<a target=_blank href='.$atts['link'].'>'.$title.'</a>';
else
return '<a href='.$atts['link'].'>'.$title.'</a>';
}
url_to_postid
вернет int(0)
, если не сможет разрешить URL-адрес, поэтому, если вы хотите быть очень осторожным, вы всегда можете изменить переменную $title
, чтобы проверить сначала так:
$title = ($post_id ? get_the_title($post_id) : 'Post could not be found');