Вітаю всіх! У цій статті мені хотілося б розповісти, як за допомогою шорткоду підключитися до стороннього сайту, отримати список останніх публікацій через 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 = новий 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;
}Цей фрагмент встановлює значення за замовчуванням для параметра rss і перевіряє його наявність. Якщо відсутній — нічого не виводимо.
$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 ми звертаємось до стороннього сайту й отримуємо XML-дані. Про CURL можна почитати в будь-якому PHP-довіднику.
if($info_ar['http_code'] != 200)
{
return 'Помилка підключення RSS-стрічки';
}Перевіряємо HTTP-статус. Якщо не 200 — повідомляємо про помилку. Тут відсутня перевірка MIME-типу, тому якщо ми отримаємо не XML — це може призвести до помилок.
$XML = new SimpleXMLElement($xml_data); $ItemAr = $XML -> channel -> item;
Перетворюємо XML у об’єкт SimpleXMLElement.
$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>';
}І формуємо HTML-блок зі списком посилань та заголовком, якщо він вказаний.
Приклад результату:
Ось і все. Гарних вам вихідних 🙂

