WordPress как на ладони
Шаблоны, плагины и темы для настоящих поклонников Elementor. От TemplateMonster.com wordpress jino

delete_expired_transients() WP 4.9.0

Удаляет все просроченные временные опции (транзитные опции).

Удаление временных опций позволит очистить таблицу опций в БД. Иногда плагины хранят данные во временных опциях, но не удаляют их и может случится так, что таких данных станет очень много.

Запуск этой функции не приносит сайту никакого вреда.

С версии WP 3.7 просроченные транзитные опции автоматически удаляются при обновлении WordPress (апгрейде базы данных WordPress).

Ничего не делает, если на сайте используется плагин объектного кэширования и параметр $force_db отключен.

О временных опциях читайте в описании функции set_transient().

Хуков нет.

Возвращает

Ничего (null)

Использование

delete_expired_transients( $force_db = false );
$force_db(логический)
Если установить в true, то временные опции будут принудительно удаляться из БД, даже если используется плагин объектного кэширования.
По умолчанию: false

Примеры

#1 Удалим все временные опции, время жизни которых истекло

delete_expired_transients( true );

Код delete_expired_transients: wp-includes/option.php VER 4.9.8

<?php
function delete_expired_transients( $force_db = false ) {
	global $wpdb;

	if ( ! $force_db && wp_using_ext_object_cache() ) {
		return;
	}

	$wpdb->query( $wpdb->prepare(
		"DELETE a, b FROM {$wpdb->options} a, {$wpdb->options} b
			WHERE a.option_name LIKE %s
			AND a.option_name NOT LIKE %s
			AND b.option_name = CONCAT( '_transient_timeout_', SUBSTRING( a.option_name, 12 ) )
			AND b.option_value < %d",
		$wpdb->esc_like( '_transient_' ) . '%',
		$wpdb->esc_like( '_transient_timeout_' ) . '%',
		time()
	) );

	if ( ! is_multisite() ) {
		// non-Multisite stores site transients in the options table.
		$wpdb->query( $wpdb->prepare(
			"DELETE a, b FROM {$wpdb->options} a, {$wpdb->options} b
				WHERE a.option_name LIKE %s
				AND a.option_name NOT LIKE %s
				AND b.option_name = CONCAT( '_site_transient_timeout_', SUBSTRING( a.option_name, 17 ) )
				AND b.option_value < %d",
			$wpdb->esc_like( '_site_transient_' ) . '%',
			$wpdb->esc_like( '_site_transient_timeout_' ) . '%',
			time()
		) );
	} elseif ( is_multisite() && is_main_site() && is_main_network() ) {
		// Multisite stores site transients in the sitemeta table.
		$wpdb->query( $wpdb->prepare(
			"DELETE a, b FROM {$wpdb->sitemeta} a, {$wpdb->sitemeta} b
				WHERE a.meta_key LIKE %s
				AND a.meta_key NOT LIKE %s
				AND b.meta_key = CONCAT( '_site_transient_timeout_', SUBSTRING( a.meta_key, 17 ) )
				AND b.meta_value < %d",
			$wpdb->esc_like( '_site_transient_' ) . '%',
			$wpdb->esc_like( '_site_transient_timeout_' ) . '%',
			time()
		) );
	}
}

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

Из раздела: Временные опции (transients)

2 коммента
  • tronix18 cайт: nebster.net

    С версии WP 3.7 просроченные транзитные опции автоматически удаляются при обновлении WordPress (апгрейде базы данных WordPress).

    А разве просроченная опция не удаляется также при попытке запросить ее значение?

    function get_transient( $transient ) {
    ...
    	$transient_timeout = '_transient_timeout_' . $transient;
    	$timeout = get_option( $transient_timeout );
    	if ( false !== $timeout && $timeout < time() ) {
    		delete_option( $transient_option  );
    		delete_option( $transient_timeout );
    		$value = false;
    	}
    ...
    }
    1
    Ответить2 месяца назад #
    • @ campusboy2987 cайт: www.youtube.com/c/wpplus

      Удаляется, конечно! А эта функция больше предназначена для случаев, когда плагин или тема не подчищают за собой временные опции, ну или когда надо принудительно и преждевременно их удалить.

      1
      Ответить2 месяца назад #
Здравствуйте, !     Войти . Зарегистрироваться