The link you want

In Nextcloud Calendar, open the sharing panel for the calendar and create a public share link. Nextcloud then offers you a few things: a link to the web interface, a subscription link, and an embed code. The one WordPress needs is the subscription link, and appending ?export to a public share URL returns the raw iCalendar document.

The test is simple. Open the URL in a browser: if you get a page with a calendar drawn on it, that is the web interface and it is the wrong link. If your browser downloads a file or shows a wall of text starting BEGIN:VCALENDAR, that is the one.

Why self-hosting helps here

Nextcloud is your server, which removes most of the constraints the hosted providers impose. There is no vendor-side regeneration delay — the feed is generated when it is requested, so a change made in Nextcloud is in the feed immediately. There is no tenant policy that can switch publishing off. And nothing about the arrangement depends on a company's continued goodwill.

The trade is that availability is now yours. If your Nextcloud is down for maintenance, the fetch fails. A sensible plugin treats a failed fetch as “no news” and leaves the last known events in place rather than emptying your website — which is worth confirming before you rely on it.

CalDAV, and why you probably do not want it

Nextcloud speaks CalDAV, which is a full read-write protocol. It is what your phone uses. It is much more capable than a published feed and correspondingly more work: it needs credentials, it requires the plugin to understand a considerably more complex protocol, and it stores a password to your Nextcloud account in your WordPress database.

For putting a schedule on a website, that capability buys nothing. Read-only .ics gives you the same events with a URL instead of a credential, and a URL you can revoke by deleting the share.

Recurring events in Nextcloud

Nextcloud's recurrence editor is good and writes standards-compliant rules, including ordinal weekday patterns. That is a point in its favour and a warning at the same time: your feed will contain the kinds of rule that poorly built importers get wrong. Check a few months of a repeating event against what the website shows after the first sync.

Access control

A public share link is public. Nextcloud can put a password on the share, but a password-protected share cannot be read by an automated fetch without additional handling, so in practice a website feed is an unauthenticated URL. Keep public events on a calendar of their own.