Вывод RSS ленты другого сайта через шорткоды в WordPress

Всех приветствую! В этой статье, мне бы хотелось рассказать — как используя шорткоды подключиться к стороннему сайту, получить список последних статей по RSS, и вывести их через шорткод на своем сайте. В красиво оформленном блоке :).

На самом деле, задача довольно странная, спрашивается — зачем мне ссылки на чужие сайты в своем блоге? Да это просто пример, можно скажем выводить котировки валют, или погоду на сегодняшний день или неделю (о чем, я и напишу в следующей статье). А сейчас все по проще — чтение RSS и отображение информации.

Приступим. Открываем файл «functions.php» вашей темы. И в самый конец файла добавляем следующий код:

function wp2fl_rss($atts, $content = null)
{
    $atts = shortcode_atts(array(
        'rss' => FALSE,
    ),$atts);

    if($atts['rss'] == FALSE)
    {
        return NULL;
    }

    try
    {
        $ch = curl_init();
        curl_setopt($ch,CURLOPT_URL,$atts['rss']);
        curl_setopt($ch,CURLOPT_TIMEOUT,30);
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);
        curl_setopt($ch, CURLOPT_FRESH_CONNECT,TRUE);
        curl_setopt($ch,CURLOPT_FOLLOWLOCATION,TRUE);
        curl_setopt($ch,CURLOPT_HEADER,FALSE);
        curl_setopt($ch,CURLOPT_NOBODY,FALSE);

        $xml_data = curl_exec($ch);
        $info_ar = curl_getinfo($ch);

        if($info_ar['http_code'] != 200)
        {
            return 'Ошибка подключения RSS ленты';
        }

        $XML = new SimpleXMLElement($xml_data);
        $ItemAr = $XML -> channel -> item;

        $c = '';
        if(sizeof($ItemAr) > 0)
        {
            $c .= '<div class="wp2fl-list">';
            if($content == TRUE)
            {
                $c .= '<h3>'.$content.'</h3>';
            }
            $c .= '<ul>';
            foreach($ItemAr as $Item)
            {
                $c .= '<li>';
                $c .= '<a href="'.$Item -> link.'" target="_blank">'.$Item -> title.'</a>';
                $c .= '</li>';
            }
            $c .= '</ul>';
            $c .= '</div>';
        }
    }
    catch(Exception $e)
    {
        return 'Во время обработки RSS ленты возникла ошибка';
    }
    return $c;
}

add_shortcode("showrss", "wp2fl_rss");

Для использования данного шорткода, в содержимом статьи, нужно ввести:

[showrss rss=»http://feeds.feedburner.com/wp2fl»]Уроки WordPress с примерами[/showrss]

Где «rss» — адрес фида который нужно отобразить, а текст заключенный между тегами — заголовок для блока со списком ссылок.

А теперь, давайте разберем принцип работы кода

$atts = shortcode_atts(array(
    'rss' => FALSE,
),$atts);

if($atts['rss'] == FALSE)
{
    return NULL;
}

Используя «shortcode_atts» устанавливаем значения по умолчанию для шорткода «showrss». А так же, если индекс массива «rss» неуказан — возвращаем NULL и ничего не отображаем.

$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$atts['rss']);
curl_setopt($ch,CURLOPT_TIMEOUT,30);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);
curl_setopt($ch, CURLOPT_FRESH_CONNECT,TRUE);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,TRUE);
curl_setopt($ch,CURLOPT_HEADER,FALSE);
curl_setopt($ch,CURLOPT_NOBODY,FALSE);

$xml_data = curl_exec($ch);
$info_ar = curl_getinfo($ch);

Это можно сказать «сердце» скрипта. Посредством CURL мы делаем запрос к другому сайту и получаем нужную информацию по указанной ссылке. Подробнее о CURL в PHP можно прочесть практически на любом сайте посвященному PHP.

if($info_ar['http_code'] != 200)
{
    return 'Ошибка подключения RSS ленты';
}

Здесь мы проверяем статус полученной информации. Если код равен 200, значит все в порядке и в процессе получения информации ошибок не возникало. Хочу обратить ваше внимание не то, что здесь нет проверки на тип документа — text, html, xml и т.п.. Ведь мы можем получить не XML документ, и в таком случае прочесть содержимое RSS ленты не получится.

$XML = new SimpleXMLElement($xml_data);
$ItemAr = $XML -> channel -> item;

Используя simplexml, «превращаем» полученный фид в объект

$c = '';
if(sizeof($ItemAr) > 0)
{
    $c .= '<div class="wp2fl-list">';
    if($content == TRUE)
    {
        $c .= '<h3>'.$content.'</h3>';
    }
    $c .= '<ul>';
    foreach($ItemAr as $Item)
    {
        $c .= '<li>';
        $c .= '<a href="'.$Item -> link.'" target="_blank">'.$Item -> title.'</a>';
        $c .= '</li>';
    }
    $c .= '</ul>';
    $c .= '</div>';
}

и формируем блок с ссылками и заданным заголовком.

Результат работы нашего кода можно увидеть ниже:

Список ссылок с другого сайта полученного через rss

На этом все. Удачных выходных 🙂

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

257376310 Top.Mail.Ru