In our club, you have to attend an event before you can join the club. We've been using CiviCRM for several years, but have yet to find the ideal solution for managing this use case automatically.
At the moment, we use a "guest membership" which gives the prospective member sufficient permissions to access the club membership form. A person becomes a "guest member" after attending a club event and paying their guest fee, which is later discounted from their membership fee if they become a club member.
Have the person register as a "guest" first, then allow them to register for an event. This would require the use of the Member Only Event Plugin to restrict registration to members, but this would allow them to register for any event, not just those open to guests. The extension restricts by membership status, not membership type.
We could use the Event Additional Signup plugin, which would allow them to select the guest membership during event registration, but would not require it nor would it prevent existing members registering for the same event to accidentally include and pay for a guest membership.
Get rid of the guest membership completely and use some other means of restricting access to the club membership form based on the person having attended an guest event or based on the "guest contribution" that was recorded when they paid for that guest event.
Create a custom event registration form in WordPress and use the CiviCRM API v4 to:
- Register the guest (or member) for the event
- Invoke a CiviCRM payment processor to collect the required payment (for guests only)
- Upon successful payment, add the guest membership, which will give them the access required to access the club membership form. Ideally, that membership wouldn't be added until the event has taken place, but that would probably require a scheduled job.
Realistically if I could schedule a job to add memberships after a non-member had attended a n "Open" event (it's an event type), I could continue with what I'm doing now, event fees with a discount for members.