Как в WordPress подключить внешнюю RSS ленту

Требуется на странице сайта на Wordpress прочитать содержимое внешней RSS. Как это сделать? Если плагинами, то какими?

Сторонник Asked on 27.12.2014 in Хаки.
Add Comment
2 Answer(s)

В 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://wp.100zona.com/feed" num="7"]


в нем указывается адрес RSS ленты и количество сообщений, которое будет считываться из RSS ленты

Начальный Answered on 27.12.2014.
Add Comment

Может кому-то понадобится вариант на 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://wp.100zona.com/feed/"; //адрес rss ленты

$kol_print_news=3;

$file_rss="cache_rss.xml"; //файл в которых будет записываться кеш

$hclock=1;

print_rss($url_rss,$file_rss,$hclock,$kol_print_news);

?>

ГУРУ Answered on 28.12.2014.

А можно немного поподробней узнать как это реализовать (куда что вставлять) ? а то я в этом сильно грамотный и слова "вариант на php"  мне не о чем не говорят. И сразу бы узнать как в этом гаджете закрыть ссылки от индексации noindex и noffolow, и что бы они открывались в новом окне.

on 11.01.2015.
Add Comment

Your Answer

By posting your answer, you agree to the privacy policy and terms of service.