WordPress: mettere in cache un feed RSS remoto

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 '';
    }
}

Torna su