it-swarm.com.de

Reduzieren oder verhindern Sie den Aufruf von update_meta_cache

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?

5
Josh

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;
}
1
Anh Tran