Le plugin RSS Post Importer est utile pour agréger des flux RSS. Toutefois, ce plugin a perdu de son intérêt avec WordPress 4.4, les images à la une n’apparaissent plus. Nous vous expliquons pourquoi ?

D’après le support de RSS Post Importer, le problème n’existe que pour la version gratuite. Si vous avez la version payante, le problème n’existe pas car le codage des 2 versions est différents.

Diagnostic de l’erreur

Sur les derniers imports, l’image à la Une (featured image) est absente. Elle n’est ni dans l’article, ni dans la base de données. Cette absence est due à une nouvelle fonctionnalité apparu dans WordPress.

Depuis la version 4.4 du logiciel, une notion de srcset est apparue. Cet attribut permet à WordPress de spécifier de nombreuses tailles d’images pour une seule image. Selon si vous êtes sur un iMAC ou un smartphone, la meilleure image se chargera parmi toutes celles possibles.

En rajoutant cette possibilité, WordPress perturbe le fonctionnement de RSS Post Importer.

Que faire ?

Tant que RSS Post Importer ne sera pas mis à jour, la solution se situe dans le site que vous cherchez à importer. La solution ne sera pas applicable pour certains.

Cela consiste en 2 notions avec :

  1. Ajouter la featured image dans le flux RSS
  2. Invalider l’utilisation du srcset si l’on est dans le flux RSS

/*Le flux RSS intègre les images à la une*/ 
function featuredtoRSS($content) { 
   global $post;
   if ( has_post_thumbnail( $post->ID ) ){ 
      $content = get_the_post_thumbnail( $post->ID, 'large', array( 'style' => 'float:left; margin:0 15px 15px 0;' ) ) . $content; } 
   return $content; } 
add_filter('the_excerpt_rss', 'featuredtoRSS'); 
add_filter('the_content_feed', 'featuredtoRSS');

add_filter( 'post_thumbnail_size', function( $size ) { 
   if( is_feed() ) 
      add_filter( 'wp_calculate_image_srcset_meta', '__return_null_and_remove_current_filter' ); 
   return $size; } );
// Would be handy, in this example, to have this as a core function ;-) 
function __return_null_and_remove_current_filter ( $var ) { 
   remove_filter( current_filter(), __FUNCTION__ ); 
   return null; }

Vous êtes aussi confronté à cette impasse ? Partagez votre expérience pour améliorer la solution.