Mein Theme ruft die update_meta_cache () Funktion 58 mal pro Seite auf! Diese Funktion scheint die folgende Abfrage basierend auf dem fraglichen Beitrag auszuführen:
SELECT post_id, meta_key, meta_value
-> FROM wp_postmeta
-> WHERE post_id IN (81649)
-> ORDER BY meta_id ASC
-> ;
Die überwiegende Mehrheit der zurückgegebenen Metaschlüssel (und der entsprechenden Werte) ist für die betreffende Seite nicht erforderlich (z. B. yoast_wpseo_title, _edit_last, _edit_lock werden für die Homepage-Schleife nicht benötigt).
Gibt es eine Möglichkeit, den Aufruf von update_meta_cache zu reduzieren oder zu verhindern? Vielleicht eine Möglichkeit, eine Funktion in den Hook pre_get_posts aufzunehmen?
Wann immer Sie die Funktion get_post_meta()
verwenden, wird die obige Abfrage ausgeführt, um all Post-Meta abzurufen und im Cache zu speichern. Je mehr Posts Sie abfragen, desto mehr Anfragen werden gestellt.
Um die Anzahl der Abfragen zu reduzieren, sollten wir alle Meta-Werte aller Posts vorab zwischenspeichern in der Abfrage, bevor wir get_post_meta
aufrufen.
Dies ist der Beispielcode aus einem Tutorial :
add_filter( 'posts_results', 'cache_meta_data', 9999, 2 );
function cache_meta_data( $posts, $object ) {
$posts_to_cache = array();
// this usually makes only sense when we have a bunch of posts
if ( empty( $posts ) || is_wp_error( $posts ) || is_single() || is_page() || count( $posts ) < 3 )
return $posts;
foreach( $posts as $post ) {
if ( isset( $post->ID ) && isset( $post->post_type ) ) {
$posts_to_cache[$post->ID] = 1;
}
}
if ( empty( $posts_to_cache ) )
return $posts;
update_meta_cache( 'post', array_keys( $posts_to_cache ) );
unset( $posts_to_cache );
return $posts;
}