# Что такое TRANSIENT?

В WordPress **transient** — это механизм **временного кэширования данных с автоматическим сроком жизни (TTL)**.

Проще:

```text
transient = временное значение в базе (или кэше), которое само “протухает”

```

---

### 🧠 Зачем нужны transient

Чтобы **не выполнять тяжёлые операции каждый раз**:

- сложные `WP_Query`
- API-запросы
- генерация sitemap
- вычисления SEO-данных

---

### 📦 Как это выглядит

#### Установка

```php
set_transient('my_key', $data, 3600);

```

👉 сохранить данные на **1 час**

---

#### Получение

```php
$data = get_transient('my_key');

```

---

#### Удаление

```php
delete_transient('my_key');

```

---

### 🔁 Как это работает

```php
$data = get_transient('my_key');

if ($data === false) {
    // кэша нет или истёк
    $data = expensive_function();

    set_transient('my_key', $data, 3600);
}

return $data;

```

---

### 📍 Где хранятся transient

По умолчанию:

👉 в таблице:

```text
wp_options

```

ключи выглядят так:

```text
_transient_my_key
_transient_timeout_my_key

```

---

#### Если есть object cache (Redis/Memcached)

Тогда transient хранятся:

👉 в памяти (быстрее)

---

### ⏱ Время жизни

```php
set_transient('key', $data, 3600);

```

<table id="bkmrk-%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5-%D1%81%D0%BC%D1%8B%D1%81%D0%BB-60-1-"><thead><tr><th>значение</th><th>смысл</th></tr></thead><tbody><tr><td>60</td><td>1 минута</td></tr><tr><td>3600</td><td>1 час</td></tr><tr><td>86400</td><td>1 день</td></tr></tbody></table>

---

### ❗ Важно

TTL — это **максимальное время**, а не гарантия:

```text
transient может исчезнуть раньше

```

(например при очистке кэша)

---

### 🔥 Примеры использования

#### 1. Кэш WP\_Query

```php
$posts = get_transient('latest_posts');

if ($posts === false) {
    $posts = get_posts([...]);
    set_transient('latest_posts', $posts, 600);
}

```

---

#### 2. Кэш API

```php
$response = get_transient('api_data');

if ($response === false) {
    $response = wp_remote_get('https://api.site.com');
    set_transient('api_data', $response, 3600);
}

```

---

#### 3. Sitemap

```php
$xml = get_transient('sitemap');

if ($xml === false) {
    $xml = generate_sitemap();
    set_transient('sitemap', $xml, 3600);
}

```

---

### ⚠️ Важные особенности

#### 1. Не для постоянных данных

❌ нельзя хранить:

- настройки
- важные данные

👉 transient может исчезнуть

---

#### 2. Автоудаление

WordPress сам удаляет истёкшие transient **не сразу**, а при обращении к ним.

---

#### 3. Может быть очищен полностью

При:

- очистке кэша
- обновлении плагинов
- некоторых хостингах

---

### 🧠 Transient vs Options

<table id="bkmrk-%C2%A0-transient-option-%D0%B2"><thead><tr><th> </th><th>transient</th><th>option</th></tr></thead><tbody><tr><td>время жизни</td><td>есть</td><td>нет</td></tr><tr><td>может исчезнуть</td><td>да</td><td>нет</td></tr><tr><td>назначение</td><td>кэш</td><td>постоянные данные</td></tr></tbody></table>

---

### 🚀 Когда использовать

Используй transient, если:

✔ данные тяжело получать  
✔ можно пересчитать  
✔ не критично потерять

---

### ❌ Когда НЕ использовать

❌ SEO мета  
❌ важные даты  
❌ пользовательские настройки

---

### 🏁 Итог

**Transient — это встроенный кэш WordPress с TTL**

Он:

✔ ускоряет сайт  
✔ снижает нагрузку  
✔ автоматически “протухает”