WordPress как на ладони
Наставник Трепачёв Д.П., phphtml.net wordpress jino

wp_cache_add() WP 2.0.0

Добавляет данные в кэш, если кэша с указанным ключом еще нет.

Отличается от wp_cache_set(), только тем что в "add" проверяется наличие кэша. Если кэша еще нет, то управление передается методу set (функции wp_cache_set), если есть, то функция ничего не делает и возвращает false.

Иногда вместо этой функции лучше использовать аналогичную wp_cache_set() - обновляет кэш, если он уже есть или добавляет новый, если его нет.

Параметр $expire не используется по умолчанию, потому что по умолчанию, кэш сохраняется при генерации страницы и исчезает по окончании работы PHP скрипта. Этот параметр предназначен для плагинов объектного кэширования, которые сохраняют кэш в файлы и кэш используется с самого начала генерации страницы.

Используется в: wp_load_alloptions().

Хуков нет.

Возвращает

false/true. 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 ) {
	// пробуем получить кэш
	if ( ! $terms = wp_cache_get( $post->ID, "{$taxonomy}_relationships") ) {
		// кэша нет, получает термины
		$terms = wp_get_object_terms( $post->ID, $taxonomy );
		// добавляем данные в кэш
		wp_cache_add( $post->ID, $terms, "{$taxonomy}_relationships");
	}

	return $terms;
}

#2 Использование объектного кэша

Этот пример бесполезен, если вы не используете плагины объектного кэширования. Но если используйте, смотрите сколько кода можно не выполнять, благодаря кэшу:

<?php
function wp_widget_recent_entries($args) {
	if ( '%BEG_OF_TITLE%' != $args['before_title'] ) {
		if ( $output = wp_cache_get('widget_recent_entries', 'widget') )
			return print($output);
		ob_start();
	}

	extract($args);
	$options = get_option('widget_recent_entries');
	$title = empty($options['title']) ? __('Recent Posts') : 
		apply_filters('widget_title', $options['title']);
	if ( !$number = (int) $options['number'] )
		$number = 10;
	else if ( $number < 1 )
		$number = 1;
	else if ( $number > 15 )
		$number = 15;

	$r = new WP_Query(array('showposts' => $number, 'what_to_show' => 'posts',
		'nopaging' => 0, 'post_status' => 'publish', 'caller_get_posts' => 1));
	if ($r->have_posts()) :
?>
		<?php echo $before_widget; ?>
			<?php if ( !empty( $title ) ) { echo $before_title . $title . $after_title; } ?>
			<ul>
			<?php  while ($r->have_posts()) : $r->the_post(); ?>
			<li><a href="<?php the_permalink() ?>">
				<?php if ( get_the_title() ) the_title(); else the_ID(); ?>
			</a></li>
			<?php endwhile; ?>
			</ul>
		<?php echo $after_widget; ?>
<?php
		wp_reset_query();  // Restore global post data stomped by the_post().
	endif;

	if ( '%BEG_OF_TITLE%' != $args['before_title'] )
		wp_cache_add('widget_recent_entries', ob_get_flush(), 'widget');
}
?>

#3 Получим статистику по имеющемуся кэшу

Такую статистику логично получать в конце работы PHP скрипта (в конце страницы)

global $wp_object_cache;
$wp_object_cache->stats();

// Выведет на экран информацию о кэше

Код wp cache add: wp-includes/cache.php WP 4.8.1

<?php
function wp_cache_add( $key, $data, $group = '', $expire = 0 ) {
	global $wp_object_cache;

	return $wp_object_cache->add( $key, $data, $group, (int) $expire );
}

Cвязанные функции

Из метки: cache (кэш кеш)

Еще из раздела: Кэш (object cache)

wp_cache_add Комментариев нет

Здравствуйте, !

Ваш комментарий