Nell’articolo di oggi vediamo come filtrare il feed generato dal plugin facebook instant di wordpress facendo apparire una sola categoria.
Vi è mai capitato di dover filtrare il feed generato dal plugin “facebook instant” di wordpress prelevando solo una categoria del vostro blog? Bhe se la risposta è sì siete nel posto giusto per trovare la soluzione al vostro problema.
Che cos’è Facebook Instant?
Instant Articles è la risposta offerta da Facebook a Google AMP. Si tratta di pagine super-veloci e altamente performanti, generate da facebook in base al submission dell’utente. Il Submission a Facebook può avvenire essenzialmente in due modi: tramite feed o API. Il metodo piu semplice è usare il feed. Dal punto di vista prettamente tecnico il feed richiama molto la struttura standard rss ma all’interno del content viene passato il markup ad hoc generato per Instant – seguendo rigide linee guida.
Se siete alle prime armi non abbiate timori: nel caso usiate wordpress l’implementazione è davvero semplice:
- Attiva il plugin
- Collega il sito alla proprietà Facebook tramite apposito meta tag sul sito
- richiedi l’analisi del tuo feed all’interno di Facebook
- Una volta approvato il feed Facebook inizierà a “trasformare” i link condivisi sulla tua pagina in instant per i tuoi utenti.
- Nel caso lo volessi è possibile implementare un placement code di pubblicità che si auto-posizionerà automaticamente nell’articolo in base alla lunghezza dello stesso.
Come posso visualizzare solo una categoria del blog sul feed di instant article?
Veniamo ora al motivo di questo articolo: Il feed di instant di default permette di recuperare TUTTI gli articoli del blog senza poter filtrare per categoria. Di recente per un mio cliente mi è capitato di dover filtrare una determinata sezione del sito in modo tale da far apparire solo la categoria/tag “Calcio” nel feed. Ecco come ho risolto.
File functions.php
//Hook per filtrare per tag plugin instant articles by Riccardo Mel function riccardomel_alter_query_instant_articles($query) { global $wp_query; $url = 'https://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']; if (strpos($url,'feed/instant-articles/') !== false ): if ( !$query->is_main_query() ) return; $query-> set('tag' ,'calcio'); endif; }//riccardomel_alter_query_instant_articles add_action('pre_get_posts','riccardomel_alter_query_instant_articles');
Siccome il plugin non ha il suo interno un apposito hook per filtrare la categoria, per risolvere ho agito come segue: concettualmente non essendoci un hook nativo dovevo intercettare la query e modificarla PRIMA che venga eseguita. Il tutto deve però essere eseguito solo nella pagina del feed, onde evitare di intaccare tutti i feed del sito.
Problema 1: Riconoscere la pagina del feed.
Per fortuna il plugin genera automaticamente una sola pagina feed chiamata feed/instant-articles pertanto recupero se si è in quella specifica pagina in questo modo:
$url = 'https://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']; if (strpos($url,'feed/instant-articles/') !== false) { //Siamo sulla pagina in esame
A questo punto faccio un ulteriore controllo per verificare che sia la query principale della pagina onde evitare di intaccare altri loop:
if ( !$query->is_main_query() ) return;
A questo punto uso la funzione pre_get_posts per filtrare la query:
$query-> set('tag' ,'calcio');
Nel feed a questo punto dovreste vedere solo gli articoli della categoria/tag filtrato.
Hai bisogno di un aiuto o di modifiche custom per il tuo sito? Contattami