web-dev-qa-db-fra.com

Comment le widget de publications récentes par défaut fonctionne-t-il avec le cache?

J'essaye de construire un widget basé sur le widget de publications récentes wordpress par défaut. Dans wp-includes/default-widget.php, j'ai remarqué que dans class WP_Widget_Recent_Posts dans widget de fonction (), les publications récentes sont d'abord recherchées dans le cache et si elles ne sont pas trouvées, la mise en mémoire tampon de sortie est activée et le résultat est généré, puis stocké en retour. dans la cache. Puisque j'utilise NuSphere IDE, j'ai placé un DebugBreak(); dans la condition if ( isset( $cache[ $args['widget_id'] ] ) ) (DebugBreak() provoque une exception de point d'arrêt dans le processus en cours.) Mais le point d'arrêt n'a jamais été exécuté, indiquant que le cache n'était pas défini. avant. Cela ne devrait pas être le cas car le cache est défini par wp_cache_set('widget_recent_posts', $cache, 'widget');. Ceci est mon premier dilemme.

Deuxièmement, j'apprécierais vraiment que quelqu'un jette un éclairage sur le fonctionnement de la mise en tampon de sortie. Comme mentionné précédemment, les publications récentes sont d'abord recherchées dans le cache et, si elles ne sont pas présentes, la mise en mémoire tampon de sortie est activée (ob_start();), le résultat est récupéré, puis ob_get_flush(); est exécuté comme $cache[$args['widget_id']] = ob_get_flush(); et le cache est défini. Donc, si aucune sortie n'est renvoyée au navigateur, comment le widget affiche-t-il les publications récentes? VEUILLEZ AIDER!

2
Poulomi Nag

Sauf si un plugin de type memcached est installé, wp_cache_set ne stockera les données que pour la durée du script en cours. Appelez ou ajoutez le widget à nouveau dans la même instance et vous verrez qu'il utilise le cache.

En ce qui concerne ob_get_flush(), tiré du manuel :

Vider le tampon de sortie, le retourner sous forme de chaîne et désactiver le tampon de sortie

En d'autres termes, il imprime et renvoie le tampon en même temps.

2
TheDeadMedic