Как можно прочитать заголовок внешней страницы с заданным URL-адресом в качестве параметра в пользовательском шорткоде? - PullRequest
0 голосов
/ 09 июня 2018

Я хотел бы показать заголовок страницы URL (например, https://www.google.it/), указанный в качестве параметра в моем пользовательском плагине шорткода. Вот мой код:

function shortcode_out($atts) {
    $atts = shortcode_atts( array(
        'link' => '/',
        'newtab' => false
    ) , $atts);


    if ($atts['newtab'] == true)
        return '<a target=_blank href='.$atts['link'].'>'.{GET_TITLE_OF_$atts['link']}.'</a>';
    else
        return '<a href='.$atts['link'].'>'.{GET_TITLE_OF_$atts['link']}.'</a>';
}

Как я могудостичь этого?

1 Ответ

0 голосов
/ 09 июня 2018

Внешние 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');
...