WordPress как на ладони
rgbcode is looking for WordPress developers.

wp_cache_add()WP 2.0.0

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

Отличается от wp_cache_set(), только тем что в "add" проверяется наличие кэша. Если кэша еще нет, то управление передается методу 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 = new 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.4.3

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

	return $wp_object_cache->add( $key, $data, $group, (int) $expire );
}
3 комментария
    Войти