Функция _prime_post_caches() в WordPress 3.4.0: описание, использование, примеры

Функция _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 );
    }
}

Этот код выполня��т следующее:

  1. Получает идентификаторы постов, которые ещё не кэшированы.
  2. Запрашивает данные этих постов из базы данных.
  3. Обновляет кэш постов и при необходимости метаданные и термы.

Связанные функции кэширования объектов

  • 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, улучшая скорость и производительность вашего сайта.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *