WP Discourse выполняет много запросов к site.json

Я работаю над интеграцией для клиента и отслеживал логи Discourse, пока работал с их форумом на WordPress.

И вот что я увидел (извините за неформат логов). IP-адрес — это адрес сервера WordPress. На нём запущен плагин WP Discourse версии 2.5.5.

Я просмотрел код, но не могу понять, почему это происходит.

2024-10-23T06:39:30+00:00|67.225.163.100|5857|0.023|200|GET /site.json HTTP/1.1
2024-10-23T06:39:30+00:00|67.225.163.100|5857|0.022|200|GET /site.json HTTP/1.1
2024-10-23T06:39:30+00:00|67.225.163.100|5857|0.020|200|GET /site.json HTTP/1.1
2024-10-23T06:39:31+00:00|67.225.163.100|5857|0.023|200|GET /site.json HTTP/1.1
2024-10-23T06:39:31+00:00|67.225.163.100|5857|0.024|200|GET /site.json HTTP/1.1
2024-10-23T06:39:31+00:00|67.225.163.100|5857|0.020|200|GET /site.json HTTP/1.1
2024-10-23T06:39:31+00:00|67.225.163.100|5857|0.019|200|GET /site.json HTTP/1.1
2024-10-23T06:39:31+00:00|67.225.163.100|5857|0.022|200|GET /site.json HTTP/1.1
2024-10-23T06:39:31+00:00|67.225.163.100|5857|0.021|200|GET /site.json HTTP/1.1
2024-10-23T06:39:32+00:00|67.225.163.100|5857|0.018|200|GET /site.json HTTP/1.1
2024-10-23T06:39:32+00:00|67.225.163.100|5857|0.018|200|GET /site.json HTTP/1.1
2024-10-23T06:39:32+00:00|67.225.163.100|5857|0.021|200|GET /site.json HTTP/1.1
2024-10-23T06:39:33+00:00|67.225.163.100|5857|0.021|200|GET /site.json HTTP/1.1
2024-10-23T06:39:33+00:00|67.225.163.100|5857|0.024|200|GET /site.json HTTP/1.1
2024-10-23T06:39:33+00:00|67.225.163.100|5857|0.020|200|GET /site.json HTTP/1.1
2024-10-23T06:39:33+00:00|67.225.163.100|5857|0.024|200|GET /site.json HTTP/1.1
2024-10-23T06:39:33+00:00|67.225.163.100|5857|0.021|200|GET /site.json HTTP/1.1
2024-10-23T06:39:33+00:00|67.225.163.100|5857|0.022|200|GET /site.json HTTP/1.1
2024-10-23T06:39:34+00:00|67.225.163.100|5857|0.022|200|GET /site.json HTTP/1.1
2024-10-23T06:39:34+00:00|67.225.163.100|5857|0.023|200|GET /site.json HTTP/1.1
2024-10-23T06:39:34+00:00|67.225.163.100|5857|0.021|200|GET /site.json HTTP/1.1
2024-10-23T06:39:34+00:00|67.225.163.100|662|0.012|429|GET /site.json HTTP/1.1
2024-10-23T06:39:34+00:00|67.225.163.100|662|0.014|429|GET /site.json HTTP/1.1
2024-10-23T06:39:34+00:00|67.225.163.100|662|0.011|429|GET /site.json HTTP/1.1

Я предполагаю, что это исходит из этого вызова: wp-discourse/lib/plugin-utilities.php at main · discourse/wp-discourse · GitHub

Который, по-видимому, используется в трёх случаях:

  • заполнение селектора категорий в какой-либо форме
  • мета-бокс
  • discourse-sidebar

Да.
Странно то, что данные должны быть закэшированы, и у меня нет причин полагать, что это не так.

$categories = get_transient( 'wpdc_discourse_categories' );
if ( ! empty( $options['publish-category-update'] ) || ! $categories ) {
  $body = $this->discourse_request( '/site.json' );
  if ( is_wp_error( $body ) ) {
    return $body;
  }

  if ( $body->categories ) {

    // удалено для краткости

    // Обратите внимание: установка кэша в 0 отключит истечение срока действия транзистента.
    $category_cache_period = apply_filters( 'wpdc_category_cache_minutes', 10 );
    set_transient( 'wpdc_discourse_categories', $discourse_categories, intval( $category_cache_period ) * MINUTE_IN_SECONDS );

    return $discourse_categories;
  } else {
    return new \WP_Error( 'key_not_found', 'Ключ categories не найден в ответе от Discourse.' );
  }
}

РЕДАКТИРОВАНИЕ: При перечислении транзистентов у меня есть ключ timeout_wpdc_discourse_categories со значением временной метки через 5 минут, но нет самого ключа wpdc_discourse_categories :thinking:

РЕДАКТИРОВАНИЕ 2: set_transient( 'wpdc_discourse_categories', $discourse_categories, intval( $category_cache_period ) * MINUTE_IN_SECONDS ); возвращает false. $discourse_categories заполнен корректно. Другие транзистенты работают.

Обновление: Транзиент просто не сохраняется. Он сохраняется, когда я вызываю json_encode().

Кроме того, я не могу воспроизвести эту проблему на другом экземпляре WordPress, поэтому перемещаю этот запрос в службу поддержки, так как считаю, что проблема связана с WordPress. Подозреваю, что какое-то плагин безопасности может мешать.