09
mar
2009
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
- Comparer des fichiers (0.838)
- Créer un plugin (0.838)
- Créer un plugin: 2ième partie (0.838)
Partagez avec les autres
Ça vous a plu?
Ne partez pas sans laisser votre appréciation!


(8 votes)










Réactions