Accueil English Classique A propos Contact rss
WordPress from the beginning
Partage de découvertes autour de WordPress
 
accueil mots-clés plan du blog

La globale $post change avec les widgets

    En voulant afficher les articles sur le même sujet dans un widget en colonne latérale (avec yarrp), je me suis aperçu que les résultats étaient différents de ceux affichés directement en dessous de l'article. En investiguant un peu, j'ai compris que le widget utilisait une variable global $post qui ne représentait plus le post principal, mais qu'elle avait été changée durant l'affichage des widgets...

    Sans doute que c’est un fonctionnement normal de wordpress et que c’est à chaque widget de renormaliser sa variable $post…

    Je n’ai pas trouvé de solution « propre » à cette question et je me suis dit que j’allais créer une copie de $post dans la boucle principale de single.php :

    if (have_posts()) : the_post(); update_post_caches($posts); 
    // copie
    $global_saved_post = $post;
    ...

    puis que j’allais littéralement réinitialiser $post lors de l’affichage des widgets (fonction dynamic_sidebar de widgets.php) :

    function dynamic_sidebar($index = 1) {
    // je rajoute $post comme variable globale à cette fonction
    global $wp_registered_sidebars, $wp_registered_widgets, $post;
    ...
    foreach ( (array) $sidebars_widgets[$index] as $id ) {
      // réinitialisation avant l'affichage de chaque widget
      if ( is_single() && isset($GLOBALS['global_saved_post']) ) {
        $post = $GLOBALS['global_saved_post'];
      }
    ...

    Si vous avez une meilleure solution qui ne modifie pas le noyau de WP je suis preneur !

    Suggestions de lecture

    Partagez avec les autres

    Share/Bookmark

    Ça vous a plu?

    Ne partez pas sans laisser votre appréciation!
    0 vote 1 Etoile2 Etoiles3 Etoiles4 Etoiles5 Etoiles Loading ... Loading ...

    Réactions

    comments Une première réaction?
    Haut de page
    Choisissez vos widgets

    A propos de cet article

    Débuter avec WordPress est produit par Woodymood
    Performance Optimization WordPress Plugins by W3 EDGE