usedToday() ); } /** * Добавляет к счётчику сегодняшнего дня. * * @param int $chars Сколько символов ушло в API. */ public function record( int $chars ): void { if ( $chars <= 0 ) { return; } $key = self::optionKey( self::today() ); update_option( $key, $this->usedToday() + $chars, false ); // Опции за позавчера и раньше больше не нужны. self::cleanupYesterday(); } /** * Ключ опции для даты. Чистая функция. * * @param string $date Дата в формате `Y-m-d`. */ public static function optionKey( string $date ): string { return self::optionPrefix() . $date; } /** * Сегодняшняя дата по настройкам сайта, а не сервера: разные хостинги * стоят в разных часовых поясах, а лимит должен сбрасываться в полночь * по времени владельца сайта. */ private static function today(): string { return current_time( 'Y-m-d' ); } /** * Удаляет счётчик вчерашнего дня, чтобы опции не копились бесконечно. */ private static function cleanupYesterday(): void { $yesterday = wp_date( 'Y-m-d', strtotime( self::today() . ' -1 day' ) ); if ( is_string( $yesterday ) ) { delete_option( self::optionKey( $yesterday ) ); } } }