WordPress : L’ajout de widgets avec l’image en vedette via le personnalisateur exécute des centaines de requêtes

Publié par Jean-Michel le

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.

Lire également:  Wordpress : Formation thématique avancée ?

É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.

Lire également:  Suppression des liens du menu d'administration dans wordpress à l'aide de l'ID utilisateur

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 widgetmé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.

Catégories : Wordpress

Jean-Michel

Jean-Michel est en charge de la partie blog du site. Il met en place la stratégie de contenu et répond aux questions fréquentes sur Wordpress.

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *