Уменьшить или запретить вызов update_meta_cache

Моя тема вызывает функцию update_meta_cache () 58 раз на странице! Эта функция запускает следующий запрос на основе указанной статьи:

SELECT post_id, meta_key, meta_value -> FROM wp_postmeta -> WHERE post_id IN (81649) -> ORDER BY meta_id ASC -> ; 

Подавляющее большинство возвращенных meta_keys (и соответствующих значений) не обязательно для рассматриваемой страницы (например, yoast_wpseo_title, _edit_last, _edit_lock не нужны для петли домашней страницы).

Есть ли способ уменьшить или предотвратить вызов update_meta_cache? Возможно, способ включить функцию на крюке pre_get_posts?

Solutions Collecting From Web of "Уменьшить или запретить вызов update_meta_cache"

Всякий раз, когда вы используете функцию get_post_meta() , вышеуказанный запрос будет выполняться для получения всех метаданных и сохранения в кеше. Чем больше сообщений вы запрашиваете, тем больше запросов.

Чтобы уменьшить количество запросов, перед вызовом get_post_meta мы должны предварительно кэшировать все метаданные всех сообщений в запросе.

Это пример кода, взятого из учебника :

 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; }