Всех приветствую! В этой статье, мне бы хотелось рассказать — как используя шорткоды подключиться к стороннему сайту, получить список последних статей по 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");
Для использования данного шорткода, в содержимом статьи, нужно ввести:
Где «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>'; }
и формируем блок с ссылками и заданным заголовком.
Результат работы нашего кода можно увидеть ниже:
На этом все. Удачных выходных 🙂
Здравствуй, интересный у тебя блог. Он у меня уже давно в закладках. Этот шорткод можно использовать много где. Взять новостные сайты, например спортивные. Ну или если у тебя два сайта, можно таким образом делать что-то вроде перелинковки .
Да, если есть фантазиям - много чего можно сделать 🙂
Вот я сейчас делаю сайт для интернет бизнеса, для себя, он схож по тематике с моим блогом, можно будет использовать данный плагин в сайдбаре и выводить свежие записи.
Хорошо что статья оказалась полезной 🙂
А количество выводимых заголовков как ограничить. Спасибо
Как-то так:
В конец?
Вместо:
спасибо
Что-то я все же не так делаю т.к. падает весь сайт...
Вероятная ошибка:
Условие пишется слитно "<="
Нет я уже ее поправил. Не помогает 🙁
Отправил рабочий код Вам на почту
А можно попросить выложить код с количеством выводимых записей, а то тоже такая нужда есть.
Я правильно понял. Общее количество полученных записей?
Код который вы выслали Владимиру, где можно указать сколько выводить полученных стате.
У меня нет этого кода, уже года четыре прошло. См. комментарии, код простой.
Подскажите пожалуйста, как сделать так, чтобы выводились новости по ключу - фильтру, тобишь, чтобы в заголовке было wordpress например
Я правильно вас понял. Вам нужно, что бы в списке отображаемых записей, отображались лишь те, в названиях которых встречается слово "WordPress" ?
А как такой код странсляцией RSS заставить работать в Опекарте2.3 ?
Нет