Hinzufügen von Widgets mit dem Featured Image über den Customizer führt Hunderte von Abfragen aus

Ich füge ein Widget über Customizer hinzu. Es ist ein einfaches Widget mit einer grundlegenden Schleife, die 5 neueste Beiträge anzeigt, in denen jeder Beitrag ein ausgewähltes Bild hat. Aufgrund des Featured Image können mit diesem Widget Hunderte von Abfragen ausgeführt werden. Ohne Featured Image wird die Anzahl der Abfragen auf den Normalwert zurückgesetzt.

Es passiert nur, wenn Widgets hinzugefügt werden und die Site über den Customizer angezeigt wird. Es gibt kein solches Problem am Frontend.

Auch getestet mit dem Standard WP “Recent Posts” -Widget mit nur einer Zeile hinzugefügt für jeden Post nach der “$ show_date” if-statement.

 

Ist es ein bekanntes Problem?

Solutions Collecting From Web of "Hinzufügen von Widgets mit dem Featured Image über den Customizer führt Hunderte von Abfragen aus"

Das Problem WP_Widget::display_callback() auf diesen Code in 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 ); } 

Dies wird direkt vor WP_Widget_Recent_Posts::widget() aufgerufen und hat den Zweck, so gut wie möglich für Back-Compat zu versuchen, um zu verhindern, dass im Customizer angezeigte Widgets den Objekt-Cache vor der Veröffentlichung der Änderungen verschmutzen. Im Falle des Widgets “Letzte Posts”, das das vorgestellte Bild mit jedem Post anzeigt, bedeutet das Aussetzen des Caches, dass der Post-Metam für jeden Post bei jedem Zugriff im Customizer möglicherweise abgefragt und erneut abgefragt werden muss.

Die Problemumgehung, die Cacheaussetzung beim Rendern des Widgets explizit zu deaktivieren, besteht darin, Folgendes zum Anfang der Widgetmethode der widget hinzuzufügen:

 if ( $this->is_preview() && wp_suspend_cache_addition() ) { wp_suspend_cache_addition( false ); } 

Dadurch wird die Aufhängung des Cache-Zusatzes, die sich gerade in der aufrufenden WP_Widget::display_callback() -Methode befand, sofort rückgängig gemacht, und die Anzahl der Abfragen sollte zu dem zurückkehren, was Sie im Frontend sehen.