Функция _PRIME_POST_CACHES() │ WP 3.4.0
Функция _prime_post_caches() добавляет в кэш посты, идентификаторы которых указаны в списке. Если посты уже находятся в кэше, они не будут добавляться повторно.
Важно
Эта функция является внутренней и предназначена для использования только в ядре WordPress. Рекомендуется не использовать её в своём коде.
Использует:
_get_non_cached_ids()update_post_caches()
Быстродействие:
- 1 раз — 0.012805 сек (очень медленно)
- 50000 раз — 0.78 сек (очень быстро)
Хуки
Не использует хуки.
Возврат
Эта функция ничего не возвращает (null).
Использование
Сигнатура функции
_prime_post_caches( $ids, $update_term_cache, $update_meta_cache );
- $ids (int[]) (обязательный) — список идентификаторов постов.
- $update_term_cache (true|false) — необходимость обновления терм-кучи.
- По умолчанию: true
- $update_meta_cache (true|false) — необходимость обновления кэша метаданных.
- По умолчанию: true
Примеры использования
Пример 1: Добавление постов в кэш при обработке комментариев
Этот пример показывает, как использовать функцию в контексте функции get_comments():
// Кэшируем посты, связанные с комментариями.
if ( $this->query_vars['update_comment_post_cache'] ) {
$comment_post_ids = array();
foreach ( $_comments as $_comment ) {
$comment_post_ids[] = $_comment->comment_post_ID;
}
_prime_post_caches( $comment_post_ids, false, false );
}
Пример 2: Добавление постов в кэш при получении постов
Этот пример показывает, как использовать функцию в контексте функции get_posts():
$ids = $wpdb->get_col( $this->request );
if ( $ids ) {
$this->posts = $ids;
$this->set_found_posts( $q, $limits );
_prime_post_caches( $ids, $q['update_post_term_cache'], $q['update_post_meta_cache'] );
} else {
$this->posts = array();
}
Заметки
- См. функции:
update_post_cache(),update_postmeta_cache(),update_object_term_cache() - Глобально: ${wpdb} — объект абстракции для работы с базой данных WordPress.
Изменения
- Введена в версии 3.4.0.
- С версии 6.1.0 эта функция больше не помечена как "частная".
Код функции
function _prime_post_caches( $ids, $update_term_cache = true, $update_meta_cache = true ) {
global $wpdb;
$non_cached_ids = _get_non_cached_ids( $ids, 'posts' );
if ( ! empty( $non_cached_ids ) ) {
$fresh_posts = $wpdb->get_results( sprintf( "SELECT $wpdb->posts.* FROM $wpdb->posts WHERE ID IN (%s)", implode( ',', $non_cached_ids ) ) );
if ( $fresh_posts ) {
// Несмотря на название, update_post_cache() ожидает массив, а не один пост.
update_post_cache( $fresh_posts );
}
}
if ( $update_meta_cache ) {
update_postmeta_cache( $ids );
}
if ( $update_term_cache ) {
$post_types = array_map( 'get_post_type', $ids );
$post_types = array_unique( $post_types );
update_object_term_cache( $ids, $post_types );
}
}
Этот код выполня��т следующее:
- Получает идентификаторы постов, которые ещё не кэшированы.
- Запрашивает данные этих постов из базы данных.
- Обновляет кэш постов и при необходимости метаданные и термы.
Связанные функции кэширования объектов
clean_comment_cache()clean_post_cache()clean_user_cache()wp_cache_add()wp_cache_delete()wp_cache_flush()wp_cache_get()wp_cache_set()
Эти функции помогут вам управлять кэшированием в WordPress, улучшая скорость и производительность вашего сайта.