wp_cache_add() WP 2.0.0

Додає дані в кеш, якщо кеша із вказаним ключем ще немає.

Відрізняється від wp_cache_set() , якщо є, то функція нічого не робить та повертає false.

Параметр $expire не використовується за замовчуванням, тому що за замовчуванням кеш зберігається при генерації сторінки і зникає після завершення роботи PHP скрипта. Цей параметр призначений для плагінів об’єктного кешування, які зберігають кеш у файли та кеш використовується від початку генерації сторінки.

Дивіться також:

Працює на основі:
WP_Object_Cache::add()
Основа для:
wp_load_alloptions()
1 раз – 0.000168 сек
(швидко) | 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
(число)
Час життя кешу (у секундах). Не використовується за замовчуванням. Призначений для плагінів об’єктного кешування.

Приклади

0

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

#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' );
	}

}
?>
0

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

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *