WordPress : L’ajout de widgets avec l’image en vedette via le personnalisateur exécute des centaines de requêtes
J’ajoute un widget via Customizer. C’est un widget simple, avec une boucle de base, qui affiche les 5 derniers messages où chaque message a une image en vedette. En raison de l’image en vedette, ce widget exécute des centaines de requêtes, sans l’image en vedette, le nombre de requêtes revient à la normale.
Cela ne se produit que lors de l’ajout de widgets et de l’affichage du site via le Customizer, il n’y a pas de problème de ce type sur le front-end.
Également testé avec le widget WP « Messages récents » par défaut avec une seule ligne ajoutée pour chaque message après l’instruction if « $ show_date ».
<?php the_post_thumbnail( 'thumbnail' ); ?>
Est-ce un problème connu ?
Solution n°1 trouvée
Le problème se résume à ce bout de code dans WP_Widget::display_callback()
:
$was_cache_addition_suspended = wp_suspend_cache_addition();
if ( $this->is_preview() && ! $was_cache_addition_suspended ) {
wp_suspend_cache_addition( true );
}
Ceci est appelé juste avant WP_Widget_Recent_Posts::widget()
et son but est d’essayer du mieux possible la rétrocompatibilité pour empêcher les widgets prévisualisés dans le Customizer de polluer le cache d’objets avant de publier les modifications. Dans le cas du widget Publications récentes affichant l’image en vedette avec chaque publication, la suspension du cache signifie que la postmeta de chaque publication devra potentiellement être interrogée et interrogée à chaque fois qu’elle est consultée dans le personnalisateur.
La solution ici pour désactiver explicitement la suspension du cache lors du rendu de votre widget consiste à ajouter ce qui suit au début de la widget
méthode de votre sous-classe de widget :
if ( $this->is_preview() && wp_suspend_cache_addition() ) {
wp_suspend_cache_addition( false );
}
Cela annulera immédiatement la suspension de l’ajout de cache qui était juste dans la WP_Widget::display_callback()
méthode d’appel, et le nombre de requêtes devrait revenir à ce que vous voyez sur le frontend.
0 commentaire