Как в WordPress прочитать внешнюю RSS
Требуется на странице сайта на Wordpress прочитать содержимое внешней RSS. Как это сделать? Если плагинами, то какими?
В Wordpress есть своя встроенная функция чтения внешних RSS. Нашел в сети простой вариант ее подключения в записях или страницах с помощью шорткода. Для начала нужно написать саму функцию в файле functions.php вашей текущей темы:
include_once(ABSPATH.WPINC.'/rss.php');
function readsRss($atts) {
extract(shortcode_atts(array(
"feed" => '',
"num" => '1',
), $atts));
return wp_rss($feed, $num);
}
add_shortcode('rss', 'readsRss');
А затем, вы можете вызывать функцию в страницах или записях следующим шорткодом:
[rss feed="https://faqwp.com/feed" num="7"]
в нем указывается адрес RSS ленты и количество сообщений, которое будет считываться из RSS ленты
Может кому-то понадобится вариант на php (вариант чтения RSS). Я использую его на некоторых сайтах в виджетах WordPress. Преимущества данного метода:
- никаких плагинов
- кеширование данных
- обработка фотографий с удаленной rss ленты
<?php
function print_rss($url_rss,$file_rss,$hclock,$kol_print_news)
{
if (!file_exists($file_rss) || ( filemtime($file_rss) + $hclock*60*60 < time() ) )
{
if (@!copy ($url_rss,$file_rss))
return (false);
$text_rss=file($file_rss);
$text_rss=implode("",$text_rss);
if (preg_match('/<?xml[^>]+encoding[\s]*=[\s]*("|\')windows-1251("|\')[^>]+?>/i', $text_rss))
{
$text_rss = iconv("cp1251", "utf-8", $text_rss);
file_put_contents($file_rss, $text_rss);
}
}
$text_rss=file($file_rss);
$text_rss=implode("",$text_rss);
$url_image = "";
$image_is=preg_match("#<image>(.*?)</image>#is",$text_rss,$image_m);
if ( $image_is )
{
$image_url_is = preg_match("#<url>(.*?)</url>#is",$image_m[0],$image_t);
if ( $image_url_is )
$url_image = $image_t[1];
}
$mas_item=array();
preg_match_all("#<item>.*?</item>#is",$text_rss,$mas_item);
$one_item=array();
$t="";
$t.=( $url_image ? "<div><img src='".$url_image."' ></div>" :"");
$kol=0;
if (sizeof($mas_item)>0)
{
foreach ($mas_item[0] as $one_item)
{
$date = "";
$kol++;
$t_is=preg_match("#<title>(.*?)</title>#is",$one_item,$title);
$l_is=preg_match("#<link>(.*?)</link>#is",$one_item,$link);
$d_is=preg_match("#<description>(.*?)</description>#is",$one_item,$description);
$date_is=preg_match("#<pubDate>(.*?)</pubDate>#is",$one_item,$date_t);
if ($t_is && $l_is)
{
$title[1]=preg_replace("#<\!\[CDATA\[(.*?)\]\]>#eis","'\\1'",$title[1]);
$link[1]=preg_replace("#<\!\[CDATA\[(.*?)\]\]>#eis","'\\1'",$link[1]);
$sss=preg_replace("#<\!\[CDATA\[(.*?)\]\]>#eis","'\\1'",$description[1]);
// $description[1]=substr($sss, 0, 500);
$description[1] = implode(array_slice(explode('<br>',wordwrap($sss,600,'<br>',false)),0,1));
if ( $date_is )
$date = strtotime($date_t[1]);
$t.="<div class=\"populars2\">
<div style=\"background-color:lightgray; color:#0000ff;\">
[".date("d.n.Y",$date)."] <noindex><a rel=\"nofollow\" href='".$link[1]."' target='_blank'>".$title[1]."</a></div></noindex>
<br>".$description[1]."...<br><br></div>";
}
if ($kol >= $kol_print_news) break;
}
}
$t = str_replace('\"','"', $t);
$t = str_replace('width="150" height="150"','width="95" height="70" class="attachment- wp-post-image"', $t);
$t = str_replace('float: left','float: right', $t);
$t = str_replace('margin: 0px 10px 5px 0px','margin: 0px 10px 5px 10px', $t);
echo ($t);
return (true);
}
?>
<?php
$url_rss="https://faqwp.com/feed/"; //адрес rss ленты
$kol_print_news=3;
$file_rss="cache_rss.xml"; //файл в которых будет записываться кеш
$hclock=1;
print_rss($url_rss,$file_rss,$hclock,$kol_print_news);
?>
А можно немного поподробней узнать как это реализовать (куда что вставлять) ? а то я в этом сильно грамотный и слова “вариант на php” мне не о чем не говорят. И сразу бы узнать как в этом гаджете закрыть ссылки от индексации noindex и noffolow, и что бы они открывались в новом окне.