The secret iCal address
Open Google Calendar on a desktop. Hover the calendar in the left-hand list, choose Settings and sharing, and scroll to Integrate calendar. You want the Secret address in iCal format — a long URL ending in /basic.ics.
That address works for private calendars without anyone signing in, because the secret is the URL itself. Give it to your WordPress plugin and the sync is set up. There is no API key to generate, no OAuth consent screen, no Google Cloud project, no quota to run out of and no billing account to attach.
Treat the address like a password. Anyone who has it can read that calendar. If it leaks, Google lets you reset it, which invalidates the old one immediately.
Why not the API?
The Google Calendar API is the other route, and it is genuinely better for some things — it is faster on large calendars and it exposes fields the .ics export leaves out. But it costs you a Google Cloud project, an API key to create and store, a quota to monitor, and a setup process that most site owners abandon halfway through. And it only works for public calendars unless you add OAuth, at which point somebody has to run a server to hold the tokens.
Any plugin that offers to connect to your private Google calendar “with one click” is running that server. That means a third party is holding a token that can read your calendar, and your sync stops the day they stop paying for it. The .ics route has no middleman at all.
What to check before you trust the sync
Save your calendar's .ics file — open the secret address in a browser tab, and the file downloads — and drop it into the reader above. It will tell you three things worth knowing.
Whether your recurring events use ordinal weekdays, which is the pattern most plugins expand incorrectly. Whether any events have no timezone attached, which is how imports end up an hour out. And whether you have cancelled individual occurrences with EXDATE, which some importers read and then never apply — leaving cancelled dates showing on your public website.
How often it updates
Google regenerates the .ics file periodically rather than instantly, so a change you make in Google can take a little while to appear in the feed. That is Google's cadence, not your plugin's, and no WordPress plugin can make it faster. What a plugin can do is tell you when it last fetched successfully and what it got — so that a feed which has stopped updating looks different from a calendar with nothing coming up.