delete_expired_transients() WP 4.9.0

Видаляє всі прострочені часові налаштування (транзитні налаштування).

Видалення тимчасових опцій дозволить очистити таблицю опцій у БД. Іноді плагіни зберігають дані в часових опціях, але не видаляють їх і може статися так, що таких даних буде дуже багато.

Запуск цієї функції не приносить сайту жодної шкоди.

Нічого не робить, якщо на сайті використовується плагін об’єктного кешування і параметр $force_db вимкнено (за замовчуванням вимкнено).

З WP 3.7 прострочені транзитні опції автоматично видаляються при оновленні WordPress (апгрейді бази даних WordPress).

З версії 4.9 ця стандартна функція повішена на крон і виконується щодня.

Про часові опції читайте в описі функції set_transient() .

Хуків немає.

Повертає

null. Нічого (null)

Використання

delete_expired_transients( $force_db = false );
$force_db
(логічний)
Якщо встановити true, то тимчасові опції будуть примусово видалятися з БД, навіть якщо використовується плагін об’єктного кешування.


Типово: false

Приклади

0

#1 Видалимо всі тимчасові опції, час життя яких минув

delete_expired_transients(true);

список змін

З версії 4.9.0Введено.

Код delete_expired_transients() WP 6.0.2

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() ) {
		// Single site 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()
			)
		);
	}
}

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

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