Intereting Posts
Показывать ошибку при выборе изображения в загрузчике медиафайлов WordPress, если несоответствие параметров Способ подсчета количества зарегистрированных пользователей и количества просмотров? Пользовательский цикл wordpress Сохранение изменений метаданных для пользовательских типов сообщений Удалить атрибуты rel из вывода the_category () Как добавить новые настраиваемые страницы или столбцы? WordPress для переключения из режима «Визуальный в текст» и наоборот Как отредактировать существующую тему WordPress? Как изменить имя отправителя электронной почты с wordpress на (myblogname) в электронной почте «потерянный пароль»? Я хочу установить глобальные местоположения в каталогах для моих сайтов CSS и JS. Как? Петля внутри цикла? API-интерфейс WP JSON meta_query не работает Искать только в заголовке Где поставить случайные функции? Как получить идентификатор категории (уродские постоянные ссылки) в моем меню суб-навигации?

Уменьшить или запретить вызов 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; }