wp_cache_add()
Додає дані в кеш, якщо кеша із вказаним ключем ще немає.
Відрізняється від wp_cache_set() , якщо є, то функція нічого не робить та повертає false.
Параметр $expire не використовується за замовчуванням, тому що за замовчуванням кеш зберігається при генерації сторінки і зникає після завершення роботи PHP скрипта. Цей параметр призначений для плагінів об’єктного кешування, які зберігають кеш у файли та кеш використовується від початку генерації сторінки.
Дивіться також:
Докладніше про Об’єктний кеш у WordPress .
wp_cache_set() – оновлює кеш, якщо він вже є або додає новий, якщо його немає.
- wp_cache_get() – отримує кеш.
WP_Object_Cache::add()
wp_load_alloptions()
(швидко) | 50000 разів – 1.83 сек
(швидко) |
PHP 7.1.11, WP 4.9.8
Хуків немає.
Повертає
true|false
. false, якщо вказаний ключ та група кешу вже існують; true, якщо кеш було додано.
Використання
wp_cache_add($key, $data, $group, $expire);
-
$key
(число/рядок) (обов’язковий) - Ключ кеша, який використовується для звернення до кешу надалі.
-
$data
(змішаний) (обов’язковий) - Дані, які потрібно додати до кешу.
-
$group
(рядок) -
Назва групи, до якої належить кеш. Група вказується для зручності, щоб кеші однаковими ключами можна було розрізняти, по групі в якій він знаходиться.
За замовчуванням: ‘default’ -
$expire
(число) - Час життя кешу (у секундах). Не використовується за замовчуванням. Призначений для плагінів об’єктного кешування.
Приклади
#1 Додамо кеш якщо його немає
Для демонстрації роботи wp_cache_add() візьмемо код функції get_the_terms() . Функція під час дзвінка зберігає дані в кеш і повторних викликах бере дані з кешу і робить повторний запит в БД.
// деякі рядки для наочності я видалив function _get_the_terms( $post, $taxonomy ) { // пробуємо отримати кеш $terms = get_object_term_cache( $post->ID, $taxonomy ); if( false === $terms ){ // кешу немає, отримує терміни $terms = wp_get_object_terms( $post->ID, $taxonomy ); if ( ! is_wp_error( $terms ) ) { // Додаємо дані в кеш $term_ids = wp_list_pluck( $terms, 'term_id'); wp_cache_add( $post->ID, $term_ids, $taxonomy . '_relationships' ); } } return $terms; }
#2 Використання об’єктного кешу
Цей приклад марний, якщо ви не використовуєте плагіни об’єктного кешування. Але якщо використовуйте, дивіться скільки коду можна не виконувати завдяки кешу:
<?php function wp_widget_recent_entries( $args ) { $cache_key = 'widget_recent_entries'; $cahe_on = true; if( $cahe_on ){ $ output = wp_cache_get ($ cache_key, 'widget'); if($output) { echo $output; return; } ob_start(); } extract ($ args); $options = get_option( 'widget_recent_entries'); $title = empty($options['title'])? __( 'Recent Posts' ) : apply_filters( 'widget_title', $options['title'] ); $number = (int) $options['number']; if( ! $number ){ $number = 10; } elseif( $number < 1 ){ $number = 1; } elseif( $number > 15 ){ $number = 15; } $ r = новий WP_Query ([ 'posts_per_page' => $number, 'nopaging' => 0, 'post_status' => 'publish', 'caller_get_posts' => 1, ]); if( $r->have_posts() ) : echo $before_widget; if( ! empty( $title ) ){ echo $before_title . $title . $after_title; } ?> <ul> <?php while( $r->have_posts() ) : $r->the_post(); ?> <li><a href="<?php the_permalink() ?>"><?= esc_html( get_the_title() ?: get_the_ID() ) ?></a></li> <?php endwhile; ?> </ul> <?php echo $after_widget; wp_reset_query(); // Restore global post data endif; if( $cahe_on ){ wp_cache_add( $cache_key, ob_get_flush(), 'widget' ); } } ?>
#3 Отримаємо статистику за наявним кешем
Таку статистику логічно отримувати наприкінці роботи PHP скрипта (наприкінці сторінки)
Global $wp_object_cache; $wp_object_cache->stats(); // Виведе на екран інформацію про кеш
нотатки
- Дивіться: WP_Object_Cache::add()
- Global. WP_Object_Cache. $wp_object_cache Object cache Global instance.
список змін
З версії 2.0.0 | Введено. |
Код wp_cache_add() wp cache add WP 6.0.2
function wp_cache_add( $key, $data, $group = '', $expire = 0 ) { Global $wp_object_cache; return $wp_object_cache->add( $key, $data, $group, (int) $expire ); }