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

Вивод 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 = новий 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-блок зі списком посилань та заголовком, якщо він вказаний.

Приклад результату:

Список з іншого сайту через RSS

Ось і все. Гарних вам вихідних 🙂

Пости на схожі теми

З вашим WordPress сайтом проблеми? потрібний додатковий функціонал? нестандартний плагін чи згорнути нову сторінку?
Тоді напишіть мені через форму зворотного зв'язку, і я намагатимусь вам допомогти.

Напишіть коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *