In WordPress è semplice mettere in cache un feed RSS remoto.
Possiamo usare le Transient API di WordPress con la versione serializzata del nostro feed.
function my_get_feed( $url ) {
$feed = wp_remote_get( $url, array( 'timeout' => 3 ) );
if( !is_wp_error( $feed ) ) {
$data = $feed['body'];
$xml = new DOMDocument;
$xml->loadXML( $data );
$items = $xml->getElementsByTagName( 'item' );
$contents = array();
foreach( $items as $item ) {
$contents[] = array(
'title' => $item->getElementsByTagName( 'title' )[0]->firstChild->nodeValue,
'url' => $item->getElementsByTagName( 'link' )[0]->firstChild->nodeValue,
'excerpt' => $item->getElementsByTagName( 'description' )[0]->firstChild->nodeValue
);
}
return serialize( $contents );
} else {
return '';
}
}
function my_display_feed( $url ) {
$feed = '';
if( !get_transient( 'my-feed' ) ) {
$f = gr_get_feed( $url );
set_transient( 'my-feed', $f, DAY_IN_SECONDS );
$feed = $f;
} else {
$feed = get_transient( 'my-feed' );
}
if( !empty( $feed ) ) {
$data = unserialize( $feed );
$html = '';
foreach( $data as $item ) {
$html .= ''; // Costruisce la stringa HTML
}
return $html;
} else {
return '';
}
}