One rule per class, not one entry per session
A studio with eight classes across the week has eight events, each with a repeat rule. Not eight times fifty-two. The distinction matters most when something changes: adjusting a time is one edit rather than a bulk operation across hundreds of rows, and your posts table stays a normal size.
Group the days that genuinely share everything. If the 6am spin class runs Monday, Wednesday and Friday at the same time with the same instructor, that is one event with BYDAY=MO,WE,FR. If Friday is a different instructor, make Friday its own event — the schedule should mirror how you actually talk about it.
Terms and breaks
Two ways to handle a term. Give the rule an end date with UNTIL and create a new one next term — clean, but somebody has to remember. Or let it run continuously and cancel the sessions that do not happen — less to remember, but the cancellations have to be done.
For most studios the second works better, because the exceptions are few and known in advance: bank holidays, the Christmas fortnight, the week the floor is being resurfaced. Put them in as cancellations at the start of the year and the timetable is correct for twelve months.
Try it in the expander: set the cancelled dates box to your closure dates and watch them drop out while everything else continues.
What the page should show
A grid by day of the week, not a list of dates. Somebody deciding whether to join wants to know what happens on Tuesdays in general; somebody who already attends wants to know whether tomorrow's class is on. A list of the next thirty sessions serves neither.
So: a weekly grid as the main view, plus a clearly visible notice for the next cancellation. That second one is what stops the phone calls.
Times, and the two weekends a year
A 6am class is 6am on the wall clock, including the morning the clocks change. That sounds obvious and it is the thing calendars most often get wrong — a class stored as a fixed instant rather than a wall-clock time moves to 5am or 7am on those two mornings, and people arrive to a locked door.
Whatever plugin you use, check your timetable across the clock change before the first one arrives. It is a five-minute check that saves an unpleasant Sunday.
If the timetable already lives somewhere else
Many studios run their schedule in a booking system or a shared calendar. If it publishes an .ics feed, point the website at it rather than maintaining a second copy — the copy that is not used daily is always the one that goes stale.