Dans son article Mastering WordPress Shortcodes, Smashing Magazine nous invite dans son 4ème exemple à intégrer le contenu d’un flux RSS dans vos billets WordPress à l’aide d’un shortcode.

Houston, on a un problème

Reprenons le code donné dans l’article :

1
2
3
4
5
6
7
8
9
10
11
12
13
//This file is needed to be able to use the wp_rss() function.
include_once(ABSPATH.WPINC.'/rss.php');
 
function readRss($atts) {
    extract(shortcode_atts(array(
    "feed" => 'http://',
      "num" => '1',
    ), $atts));
 
    return wp_rss($feed, $num);
}
 
add_shortcode('rss', 'readRss');

Si vous le testez, comme @Fran6 par exemple, vous constaterez que le résultat n’est pas celui escompté : le flux de syndication précède le contenu de votre article au lieu d’être inséré là où vous l’attendiez.

La raison ? À la ligne 10, le résultat de la fonction wp_rss() est retourné au moteur de WordPress pour remplacer le shortcode dans le contenu du billet. Or, la fonction wp_rss() ne retourne rien mais affiche directement le résultat. Ainsi, tout appel du shortcode entraîne l’envoi au client du flux RSS (sous la forme d’une liste non-ordonnée) suivi du contenu du billet.

Solution

On corrige le shortcode en capturant la sortie de la fonction wp_rss() à l’aide d’une tamporisation de sortie.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//This file is needed to be able to use the wp_rss() function.
include_once(ABSPATH.WPINC.'/rss.php');
 
function readRss($atts) {
    extract(shortcode_atts(array(
        "feed" => 'http://',
        "num" => '1',
    ), $atts));
 
    ob_start();
    wp_rss($feed, $num);
 
    return ob_get_clean();
}
 
add_shortcode('rss', 'readRss');
publicité (chargement)

2 réponses pour Shortcode WordPress : intégrer un flux RSS

  1. Gd6d dit :

    Merci de partager l’astuce. ça me fait gagner un temps précieux….

Ajouter un commentaire


Syndication

Réseaux sociaux