Удаление истекших временных данных в WordPress с DELETE_EXPIRED_TRANSIENTS()

Удаление Истекших Временных Данных с помощью DELETE_EXPIRED_TRANSIENTS()

Функция DELETE_EXPIRED_TRANSIENTS() позволяет удалить все истекшие временные данные (транзиенты) в WordPress. Эти временные данные могут занимать место в базе данных, если не будут очищены.

Важно понимать

Обратите внимание, что эта функция не будет работать, если используется сторонний объектный кэш. Если у вас настроен внешний кэш, вам нужно будет управлять кэшированием отдельно.

Возвращаемое значение

Функция ничего не возвращает (значение null).

Использование функции

Функция вызывается следующим образом:

delete_expired_transients( $force_db );

Параметры:

  • $force_db (boolean): Указывает, нужно ли принудительно выполнять очистку в базе данных даже при использовании внешнего объекта кеша. По умолчанию значение false.

Пример

Чтобы удалить все временные данные, которые истекли, вы можете использовать следующий код:

delete_expired_transients( true );

Важные заметки

  • Глобальная переменная: Эта функция использует глобальный объект $wpdb, который представляет собой абстракцию базы данных в WordPress. Он позволяет взаимодействовать с базой данных удобным способом.

Изменения в версии

  • С версии 4.9.0: Функция была введена в WordPress.

Код функции

Вот как выгляд��т код функции delete_expired_transients():


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() ) {
    // В одиночном сайте временные данные хранятся в таблице опций.
    $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() ) {
    // В многосайтовом режиме временные данные хранятся в таблице sitemeta.
    $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()
        )
    );
}

}

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

  • delete_transient(): Удаляет временные данные по заданному ключу.
  • get_transient(): Получает временные данные по заданному ключу.
  • set_transient(): Устанавливает временные данные с указанным сроком жизни.
  • get_site_transient(): Получает временные данные для сайта в многосайтовом режиме.
  • set_site_transient(): Устанавливает временные данные для сайта в многосайтовом режиме.

Эта статья должна помочь вам понять, как использовать функцию DELETE_EXPIRED_TRANSIENTS() и повысить производительность вашего сайта WordPress, очищая устаревшие временные данные.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *