Events Made Easy


Events Made Easy is a full-featured event and membership management solution for WordPress. Events Made Easy supports public, private, draft and recurring events, membership and locations management, RSVP (+ optional approval), several payment gateways (Paypal, 2Checkout, FirstData, Mollie and others) and OpenStreetMap integration. With Events Made Easy you can plan and publish your event, or let people book spaces for your weekly meetings. You can add events list, calendars and description to your blog using multiple sidebar widgets or shortcodes; if you are a web designer you can simply employ the template tags provided by Events Made Easy.

Main features:
* public, private, draft and recurring events with custom and dynamic fields in the RSVP form
* membership management with custom and dynamic fields
* People and groups with custom fields per person
* PDF creation for membership, bookings and people info
* Membership card or booking ticket can be sent as PDF via mail automatically
* RSS and ICAL feeds
* Calendar management, with holidays integration
* Several widgets for event listings and calendar
* location management, with optional OpenStreetMap integration
* RSVP bookings with custom fields and dynamic fields, payment tracking, optional approval, discounts
* Templating for mails, event lists, single events, feeds, RSVP forms, … with specific placeholders for each
* Lots of shortcodes and options
* payment gateways: Paypal, FirstData, 2CheckOut, Mollie, Worldpay, Sagepay, Stripe, Braintree, Paymill
* Send mails to registered people, automatically send reminders for payments
* Mail queueing and newsletter functionality
* Mailings can be planned in the future, cancelled …
* Multi-site compatible
* Fully localisable and already fully localised in German, Swedish and Dutch. Also fully compatible with (m)qtranslate(-xt): most of the settings allow for language tags so you can show your events in different languages to different people. The booking mails also take the choosen language into account.

For more information, documentation and support forum visit the Official site .



Always take a backup of your db before doing the upgrade, just in case …
1. Upload the events-made-easy folder to the /wp-content/plugins/ directory
2. Activate the plugin through the ‘Plugins’ menu in WordPress
3. Add events list or calendars following the instructions in the Usage section.


After the installation, Events Made Easy add a top level “Events” menu to your WordPress Administration.

  • The Events page lets you edit or delete the events. The Add new page lets you insert a new event.
    In the event edit page you can specify the number of spaces available for your event. You just need to turn on RSVP for the event and specify the spaces available in the right sidebar box.
    When a visitor responds to your events, the box sill show you his booking. You can remove bookings by clicking on the x button or view the respondents data in a printable page.
    You can also specify the category the event is in, if you activated the Categories support in the Settings page.
    Also fine grained control of the RSVP mails and the event layout are possible here, if the defaults you configured in the Settings page are not ok for this specific event.
  • The Locations page lets you add, delete and edit locations directly. Locations are automatically added with events if not present, but this interface lets you customise your locations data and add a picture.
  • The Categories page lets you add, delete and edit categories (if Categories are activated in the Settings page).
  • The People page serves as a gathering point for the information about the people who booked a space for one of your events.
  • The Pending bookings page is used to manage bookings for events that require approval
  • The Change bookings page is used to change bookings for events
  • The CRON page is used to plan automated EME tasks (like sending reminders, cancel unpaid bookings, newsletter)
  • The Settings page allows a fine-grained control over the plugin. Here you can set the format of events in the Events page.
  • Access control is in place for managing events and such:
    – a user with role “Editor” can do anything
    – with role “Author” you can only add events or edit existing events for which you are the author or the contact person
    – with role “Contributor” you can only add events in draft or edit existing events for which you are the author or the contact person

Events list and calendars can be added to your blogs through widgets, shortcodes and template tags. See the full documentation at the Events Made Easy Support Page.


See the FAQ section at the documentation site.


Love this plugin

Been using it for years... highly customizable, tons of features that I don't even use, but still gives me a great platform for events. Very robust event planning plugin and calendar.

Wow! What a great plugin.

Full points for Frankie and Events Made Easy. This is an incredibly powerful plugin and it works right out of the box. You can –literally – install the plugin, put the "events" page into your menus, and start adding events. Everything just works from there. The plugin will generate event listings, event description pages, booking forms, confirmation email and everything else you need to manage your calendar of events. Of course, some things need configuration ( like a reply-to email address ) but all the web pages work from default settings. Payments are made easy too. It has simple, single click integration with a wide variety of payment platforms. Fully integrated with your WordPress membership database, so you don't need to run a second system. Everything is in one place. If you want like to play, you can configure the output of the default web pages. Settings for every aspect of those pages are in your control. You can set up defaults for everything (and there is a lot) and you can over-ride everything. In addition there are templates, a bit like Smarty, which can be almost everywhere. Templates can include conditional logic with IF statements and LOOPS, which are based on values from the event data. How cool is that! Shortcodes allow you to integrate your events into posts and pages. Your shortcodes can include search queries based on date, time and category and they can call templates. The logic is simple and flexible. The mix of search and templates ( and conditional logic in the template ) means that you can do a lot (!) with shortcodes. In fact, the "basic usage" page in the documentation ( did I mention that there is good documentation ) says "you need to use shortcodes on regular pages to get anything done from EME." That's so not true, but it is does give you total control. Plus, there are hooks and filters, so you can knock yourself out.

Terrible experience

I do not recommend this plugin at all! I didn't easily understand how it's organized and the support is quite unfriendly. I am uninstalling this and using another plugin. No one forces anybody to create a plugin and provide support, so if it's to be rude to users, might as well do something else.

high customisable and simple

I like this plugin - simple, clear and high customisable. i can do a lot of fancy automated things 🙂 not to mention is a great support and documentation! Thank You!

Great plug-in

Great plug-in. Did a little research on which one was best for event management before trying this one and have been really pleased. Once set up my templates it is easy to create and manage new events.
Read all 84 reviews

Contributors & Developers

“Events Made Easy” is open source software. The following people have contributed to this plugin.


“Events Made Easy” has been translated into 5 locales. Thank you to the translators for their contributions.

Translate “Events Made Easy” into your language.

Interested in development?

Browse the code, check out the SVN repository, or subscribe to the development log by RSS.


2.1.7 (2019/02/20)

  • Get a XML sitemap by visiting the url https://../?eme_sitemap=public
  • For CSV imports, the enclosure can be an empty string too
  • If the admin email is not matched to a user, take the first person with admin role as email sender
  • Allow html in attributes and properties again
  • Disable autofill on forms for events/locations/members, to aid people having autofill issues
  • Allow attachments to be sent for approved, pending and booking paid emails, also for mailgroup subscriber emails and new members
  • Added an option to allow RSVP cancel based on age of the booking
  • Deprecated shortcode eme_cancel_booking_form in favor of eme_cancel_all_bookings_form
  • Add options to set a template to cancel a payment (the form shown when browsing the url #_CANCEL_URL)
  • Added the old paypal method back (but it is called “Legacy Paypal” now)
  • Added 2 placeholders #_CURDATE and #_CURTIME, can be used to inform people/contacts of the date/time an action happened (like rsvp, cancel, member signup, payment, …)

2.1.6 (2019/02/10)

  • A discount can now be in more than one group
  • Fix html showing in extra html headers for events or locations
  • ical fixes for utf-8 encoded characters (and line folding like required by the rfc)

2.1.5 (2019/02/06)

  • Event status was always set as draft upon save, this has been corrected

2.1.4 (2019/02/05)

  • Add a new option in the RSVP settings for an event so you can decide in which mail the optional PDF attachment should be included: the approval or payment mail
  • Placeholders #_ADDBOOKINGFORM_IF_USER_IN_GROUP{xx}, #_ADDBOOKINGFORM_IF_USER_IS_MEMBER_OF{xx}, #_IS_USER_IN_GROUP{xx} and #_IS_USER_MEMBER_OF{xx} can now also take the id of the group or membership as parameter (and not just the name anymore)
  • Send membership reminder mails also in grace period
  • Some more sanitizing, we don’t even trust admins …
  • Unslash where needed
  • RSVP cancel cutoff time was ignored

2.1.3 (2019/02/01)

  • Fix a typo that prevented RSVP bookings from happening

2.1.2 (2019/01/30)

  • Security Fix: one could bypass the allowed file types to be uploaded
  • Update Paypal to use their new interface.
    If you have a Paypal account, you need to undertake actions if you wish to continue to accept payments via Paypal.
    You need to create a Paypal “app” and enter the newly obtained client ID and secret in the EME payment options.
    See this page for more info and guidelines.
  • Add custom fields for membership definitions too (like for events and locations)
  • Disabling certificates for sending mail is now only possible for private ip’s, not for public mailservers anymore

2.1.1 (2019/01/27)

  • Fix dynamic-table html generation (closing “>” was missing for “table”, most browsers fix this automatically, but is not nice)
  • Make pdf generation more resilient to html errors (like the one mentioned above)
  • eme_holidays was not working as expected

2.1.0 (2019/01/26)

  • Fix people import from csv
  • Improve sql when searching for custom field answers
  • Add an option to automatically archive old mailings after a certain period of days (can be set in GDPR options)
  • Add an option to automatically remove old events after a certain period of days (can be set in GDPR options)
  • Make the permalink for calendar days a little more strict, so events starting with yyyy-mm-dd-* don’t match and correctly go to the event
  • “Extra event html headers” and “Extra location html headers” now allow javascript too
  • Add an action in the People admin window to verify the integrity between WP users and EME people (a WP user should be linked to at most 1 EME person)
  • Add a mailing option to ignore the massmail setting if wanted (explanation added in-screen) for both event and generic mails
  • Early-bird discount is possible by just leaving the coupon code empty for the discount and if you define an expiration date
  • Fix mail logic for rsvp mails (some combinations of EME settings did not send out mails as would be expected)
  • Avoid loading the Mollie API if it is already loaded by another plugin
  • Update Mollie API to 2.5.0
  • RSVP full message can now also be changed in the backend
  • Disable (or try to) autocomplete for RSVP password protection
  • Add placeholder #_ATTENDANCE_QRCODE, generating a qrcode to send to people. This in facts just encodes the attendance url (generated by #_ATTENDANCE_URL also)
  • Document the use of #_ATTENDANCE_QRCODE ==> #_ATTENDANCE_QRCODE can only be used in the pdf template for tickets or membership cards
    If any other php lib is loaded providing the same qrcode class, the qrcode will refuse to load, so then you’ll need to use a shortcode provided by the other
    plugin to create the qrcode based on the value of #_ATTENDANCE_URL
  • Allow event/location/people properties (see functions eme_init_event_props, eme_init_location_props, eme_init_person_props) to be imported too
  • Fix a show_recurrent_events_once sql bug (in fact not a bug, but indeterministic result) due to newer mysql/mariadb versions
  • Add scope parameter to shortcode eme_holidays (default=all, other values: past or future; shows all/past/future holidays)

2.0.85 (2019/01/09)

  • Correct yet another bug at activation when using offset-based timezones

2.0.84 (2019/01/09)

  • Correct a bug at activation when using offset-based timezones

2.0.83 (2019/01/09)

  • Add an option to automatically remove pending members after a certain period of days (can be set per membership)
  • Add an option to automatically remove expired members or old bookings after a certain period of days (can be set in GDPR options)
  • Allow a separator to be specified for multi-value custom fields when printing the values via #_FIELD or #_FIELDVALUE by using a second set of braces specifying the separator
    This can be used as: #_FIELD{xx}{yy}
    The current known #_FIELD{xx} corresponds with #_FIELD{xx}{||}
  • Fix readonly/hidden formfields
  • Also update people fields from within a new booking
  • Stripe currency upon submit needs to be lowercase …
  • Membership payments via several payment gateways (stripe, paymill and braintree) was not calculating the correct price resulting in the payment not being successful.
  • No file upload allowed as custom field for events or locations
  • Number of bookedseats can be 0 if set to be
  • Update dompdf to 0.8.3
  • Update leaflet to 1.4.0
  • Update leaflet-markercluster to 1.4.1
  • Update Mollie API to 2.4.1

2.0.82 (2019/01/02)

  • GDPR is now a field per person, will be completed when asking for it via #_GDPR in a form (until now the #_GDPR was not stored in the DB)
  • Placeholder #_GDPR now also works for people info (like #_LASTNAME etc), so you can let people now in e.g. the RSVP or member mail that they approved.
  • New shortcode [eme_gdpr_approve], shows a form where people can give their GDPR approval (based on email). The mail being sent is configured in the EME options for GDPR.
    You can then use a WP page with this shortcode to send to all people that haven’t approved yet too.
  • Code deup
  • Fix an undefined array warning in eme_events.php
  • Fix location eventful paging
  • Fix notcategory containing a “+” for events

2.0.81 (2018/12/29)

  • Placeholder IS_USER_MEMBER_OF was failing due to a wrong sql statement
  • Make #_USER_HAS_CAP{xx}, #_IS_USER_IN_GROUP{xx} and #_IS_USER_MEMBER_OF{xx} return 0 for not logged users too
  • Create/edit for countries/states/discounts and discount groups are now aligned with the other edit screens, this allows more explanation added on the screen which makes certain fields more clear
  • Correct captcha detection in multibooking form

2.0.80 (2018/12/23)

  • Initialize some arrays to avoid php notices/warnings
  • More sql cleanups (makes everything more pretty code-wise and also makes events listing work again …)

Older changes can be found in changelog.txt