Customization for Notification Emails

Added by popular request: a new way of modifying the notification and confirmation messages RSVPMaker sends when someone submits the form for an event.

The default is still that a notification goes to the event organizer (or whatever email address or addresses you supplied) saying something like “RSVP YES for The Big Event on May 1” and the attendee gets a version that says “Confirming RSVP YES for The Big Event on May 1.” By default, the confirmation message also includes a button people can click to update their RSVP.

Now, if you want to use “Registration” rather than RSVP in the subject line, or you want to leave off the “Update RSVP” button (some people have told me they don’t want to make it too easy for people to back out), you can make those changes. (See also: How to Change the RSVP Now! Button.)

The notifications editor opens up possibilities for adding personality to these transactional messages. It also simplifies the process of localization, since “RSVP” is not universally understood across languages and cultures.

Sample form, showing customized subject line
Confirmation message with a customized headline

The information you record here should be generic enough to apply to all your events. You still get the option to add a per-event confirmation message, which will be included as long as your template includes the [rsvpmessage] placeholder (one of several documented on the page for the template editor). By default, the confirmation message is just “Thank you!” but I’ve also used RSVPMaker to register people for webinars where that message includes detailed instructions for accessing the online event. For a terrestrial event, it might be driving directions.

The Notification Templates screen is distinct from the Email Template screen, which you use to define one or more templates for the layout of your HTML email, for example to specify a background color. Notification messages use the default template defined on that screen.

While RSVPMaker is intended to be useful out of the box, I continue to look for ways to let you make it your own.

P.S. for Developers

If you create extensions to RSVPMaker, there are filters and actions you can tap to extend this feature as well.

The default array of variables used for these templates is defined like this:

$template_forms['notification'] = array('subject' => 'RSVP [rsvpyesno] for Customization for Notification Emails on ','body' => "Just signed up:\n\n[rsvpdetails]");
$template_forms['confirmation'] = array('subject' => 'Confirming RSVP [rsvpyesno] for Customization for Notification Emails on ','body' => "[rsvpmessage]\n\n[rsvpdetails]\n\nIf you wish to change your registration, you can do so using the button below. [rsvpupdate]");

You can add to it with a filter like


Your filter would be passed an array and return your modified version with additional entries in the same format.

The sample forms use data pulled from a simple key / value array, where entries look like

$sample_data = array('rsvpyesno' => 'YES','rsvp_title' => $post->post_title);

The filter for that is ‘rsvpmaker_notification_sample_data’.

Finally, there is a ‘rsvpmaker_notification_templates_doc’ action you can use to add to the documentation at the bottom of the page.

As part of my WordPress for Toastmasters project, I plan to use this same template utility for confirmation and reminder messages for specific meeting roles.

Using RSVPMaker on Membership Websites

Version 3.9.7 adds better functionality for membership websites, where the people entering RSVPs have user accounts and log in prior to responding.

  • The system will now automatically look up any previous RSVPs associated with the same account (which for unauthenticated users only happens if they click the update link in a confirmation email).
  • Form fields will be filled in based on user metadata, provided that the form field names match the usermeta fields. Example: a membership site records the user’s work number as work_phone, and the form field is also labeled work_phone, so the work phone number on the user’s profile is filled in by default on the RSVP form.

Here is an illustration of that last point:

Adding the Work Phone field in the form generator.
Adding the Work Phone field in the form generator.
The generated code for the form, with Work Code as the label displayed to the user but work_code as the field ID.
The generated code for the form, with Work Phone as the label displayed to the user but work_phone as the ID for a text field.
The work phone number is filled in by default on the form.
The work phone number is filled in by default on the form.

The RSVPMaker form generator is a simple utility that does not address all possible variations. One that would require manual coding is to make a field containing profile data a hidden field rather than a user editable one. For example, a hockey league that contacted me with the request for this feature has a custom profile label for “Team,” which is a value they might not want users to be able to alter on an event-by-event basis. Or you simply might not want to display information including name and email address that is already in the user profile table.

To make the form fields hidden instead of editable, we would manually change the form code “textfield” to “hidden” as in this example:

<p class=”work_phone”><label>Work Phone</label> [rsvpfield textfield=”work_phone” ]</p>


[rsvpfield hidden=”work_phone” ]

Whether this will work with your membership plugin of choice depends on how it handles custom profile data. So far, I’ve tested it with my own RSVPMaker for Toastmasters plugin as well as the Ultimate Member plugin (which is used by the hockey league I mentioned). You can also program your own user profile fields by creating your own plugin or custom theme (with the code added to functions.php). For RSVPMaker to retrieve custom profile data, it must be recorded as standard WordPress user metadata, which is recorded in the database table typically named wp_usermeta (some sites may change the prefix to something other to wp_). The user metadata field names must also follow the convention of being all in lowercase with an underscore in the place of any letters or punctuation, which is the same way the RSVPMaker form generator formats field names based on the label text.

Timed Display of Content: the rsvpmaker_timed Shortcode

Part of the point of using a calendar plugin on your blog is to have content displayed for upcoming events, but not past ones, or at least give the upcoming events people can sign up for or attend greater emphasis and display them in chronological order (rather than the reverse chronological order of a blog listing).

I always think it looks stupid for a website to be promoting an event that is already past. Computers can tell time, and we should let them do so on our behalf rather than waiting for the webmaster to get around to removing the outdated content.

Events aren’t the only example of time-sensitive content, however. We may have limited time offers or other content that has a start date, an end date, or both. WordPress lets you schedule posts to go live at a given time in the future, but what if you want to embed a bit of limited time content on your home page or somewhere else on your site?

That’s the purpose of the rsvpmaker_timed shortcode, which can be wrapped around any bit of content in a page or a post that should only be displayed after a given time, until a given time, or between a start time and an end time. For those not familiar, a shortcode is a code you enter into the WordPress editor that achieves a special effect. Here is an example:

rsvpmaker_timed coding wrapped around a paragraph for conditional display.
rsvpmaker_timed coding wrapped around a paragraph for conditional display.

This shows the shortcode open and close tags wrapped around a paragraph, but it could just as easily be a longer block of content including images or video.

The shortcode attributes are start, end, too_early, and too_late. Put a plain language date like ‘January 1, 2016 7 pm’ in the start and/or end fields, or use a database style date like ‘2016-01-20 19:00′ and RSVPMaker will test the current time against those rules.

If a visitor is coming too the site too early or too late, according to those rules, the shortcode will return either an empty string or the contents of the too_early / too_late parameters, if set. Otherwise, the content will be returned as it normally would be.

Note that if a time is not specified, in addition to the date, the time is considered to be “00:00:00″ — first thing in the very early morning of that date. So if what you really want is to specify a cutoff at midnight, you should either put in ’11:59 pm’ or ’23:59:59′ as the end time. Alternatively, if you want content to stop being shown after January 29 is over, you could set end=”January 30, 2016”

In the context of my recent projects using Google Hangouts on Air as a webinar platform, one of the ways I am using this is to put a promotion on a website home page until the event occurs. I can provide another block of content to be displayed after the event, directing people to the replay.

Support for this shortcode was added in release 3.6.2.

RSVPMaker 2.7.5 released

Version 2.7.5 is available now

This is the first time in several months that I’ve released an update. I’ve been wrapped up with a book project ( Social Collaboration For Dummies, due out in October) but should have time to do another update within the next month, catching up on feature requests and bug fixes.

In addition to being tested with WordPress 3.6, today’s release addresses two issues:

  • Fixes a glitch in the display of the CAPTCHA image (for those who turn on that feature)
  • Makes the display of the Yes/No radio buttons optional. There are circumstances where you want to track No responses as well as Yes responses, but a number of people said they would rather not show it when they only care about the yes answers.

RSVPMaker 2.7.4 – More reliable delivery of notification / confirmation emails

If you rely on email notifications when people RSVP and/or want people to get a confirmation and reminder messages, version 2.7.4 should be able to do that more reliably if you provide an email server and account to be used for notifications. You enter these on the Settings screen. After you save the parameters, click the link to send a test email to make sure it works.

You can create an email account for this purpose on your web server, or use a GMail account (limit: 500 recipients per day), or SendGrid account (specialist in high volume notification emails, free for up to 200 emails per day, reasonable prices for higher volumes), or use any other SMTP server you have access to.

All notifications will then come from that account, and having them come from an authenticated account should help you get past spam filters and precautions your web host takes to avoid hosting spammers. The replyto address will be set to the email address supplied by the attendee for notifications. Confirmation messages sent to attendees will have the email address you specified for notifications as the replyto address.

The parameters you need to enter are:

SMTP server type – select GMail, SendGrid, or Other from the drop-down list.

Email account for notifications – example

Email username – (on some servers, it could be “notify” or something different from the address)

Email password – Enter the password. Think through the security implications (maybe you don’t want to have the password for your primary email account stored here)

Server, Prefix (ssl or tls), Port # – Not necessary to enter these for a Gmail or SendGrid account.

I’d have done this sooner if I had realized that the PHPMailer utility was bundled with WordPress, a fact I just stumbled across while looking at the WP Mail SMTP plugin (which allows you to modify your site to use SMTP for routine WordPress notifications such as account signups). Previously, I suggested a customization based on the PHP Pear module, which works well but is not enabled on every web server.

RSVPMaker 2.7 released, adds login option for events on membership-oriented sites

Version 2.7 addresses a scenario I’ve heard from some other people, and also encountered myself, where you’re running a membership-oriented site where the people who will be RSVP’ing for events have profiles associated with a WordPress login to the website. So maybe you want to restrict RSVPs to people who can log into the website and also prevent members from having to manually fill out basic info on the RSVP form.

There’s now a checkbox that allows you to specify that a login is required before entering an RSVP. You can also make logging in optional, and RSVPMaker still will retrieve profile details if it detects that the user is logged in.

Once the member logs in, first name, last name, and email can can automatically be filled in on the form so the person responding only has to supply any additional details that might be required.

It’s possible to read in other profile data by customizing the rsvpmaker_profile_lookup function. For example, if your member profiles include a phone number, you can retrieve that data and have it automatically filled in on the form.

Read the article on Advanced Customization for details on how to make code-level tweaks without having them overwritten when you upgrade.

If you want to add additional profile fields associated with your member accounts, here’s a good tutorial.

Setting Required Fields for the RSVPMaker Form

The latest release of RSVPMaker addresses a longstanding request for an easy way to specify that certain fields on the form should be required. See this demo event with required fields.

Using the shortcode-based template system for the forms, I added my custom field in this format:

[rsvpfield textfield=”extrarequired” required=”1″]

If you try to submit a form with a required field left empty, you’ll get a reminder that it’s required and the form will not be submitted. The client-side validation depends on JavaScript, but there’s also a server-side check for required fields.

Form validation error

Formatting of the error message is controlled by this addition to the plugin CSS (which you can override by specifying your own CSS in RSVPMaker Settings).

CSS formatting for validation error
Default CSS formatting

If someone wants to volunteer to make this prettier, let me know, but at least the basic function is there now.

BTW, one of the recent releases of RSVPMaker had some coding errors in the default version of the form. These are corrected now, but it’s possible you have the botched version saved on your system. If you look at the Documentation screen on the RSVPMaker menu, there’s a link at the bottom you can use to reset the form to the new, improved default. If you’ve fixed this yourself already, never mind, and I’m sorry for any trouble I caused.

RSVPMaker 2.5 and new method for customizing the RSVP Form

RSVPMaker 2.5 is out and introduces a new method for customizing the RSVP form. It also fixes some glitches with the recurring event setting function and the JavaScript on the RSVP form. (See also setting required fields, updated list of shortcodes).

Form Customization

I’ve received many requests from people who wanted to make more customizations than I allowed for with the built-in administrative tools. For example, some people did not want to include the section that asks for the names of guests. Previously, the only alternative I offered was code-level customization (I tried to add flexibility with a technique for adding a rsvpmaker-custom.php file). NOTE: If you previously customized the form, this release may break your customizations.

I ran into my own requirement for customization recently when I used the form for a luncheon where people were supposed to choose from among 3 meal choices. So the form needed to be different for that one event. It’s now possible to create a custom form for a single event, in addition to the default RSVP Form for the site.

There is now an RSVP Form field that appears on the main RSVPMaker settings screen, as well as the RSVP options panel on the event editing screen.

The default code for the body of the form looks like this:

<table border="0" cellspacing="0" cellpadding="0" width="100%"> 
<td>First Name:</td><td>[rsvpfield textfield="first" required="1"]</td> 
<td>Last Name:</td><td>[rsvpfield textfield="last" required="1"]</td> 
<td width="100">Email:</td><td>[rsvpfield textfield="email" required="1"]</td> 
[rsvpprofiletable show_if_empty="phone"]
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<td width="100">Phone:</td> 
<td>[rsvpfield textfield="phone" size="20"]</td> 
<td>Phone Type:</td>
<td>[rsvpfield selectfield="phonetype" options="Work Phone,Mobile Phone,Home Phone"]</td> 
<p>Table Size: [rsvpfield radio="tablesize" options="regular,large,double" sep=" "]</p>
<p>[rsvpfield checkbox="booksigning" value="yes"] Attend Book Signing</p>
<p>Note:<br /> 
<textarea name="note" cols="60" rows="2" id="note"></textarea> 

You can now modify the HTML structure around the form fields as much as you would like. It is important that you include the fields first, last, and email for your form to function properly. But you can add any other fields you might like.

With the exception of the notes textarea, fields are represented by the shortcodes [rsvpfield textfield=”fieldname”] or [rsvpfield selectfield=”fieldname” options=”option1,option2″]. For my luncheon scenario, I could have done something like [rsvpfield selectfield=”meal” options=”Chicken,Salmon,Vegetarian Plate”]

There is also a [rsvpprofiletable show_if_empty=”phone”] shortcode which is an optional block that will not be displayed if the specified data (such as a phone number) is already “on file” from a prior RSVP. For this to work, there must also be a [/rsvpprofiletable] closing tag.

The guest section of the form is represented by [rsvpguests] (no parameters). If you don’t want the guest blanks to show up, you can remove this.

The form code you supply will be wrapped in a form tag with the CSS ID of “rsvpform”.  The yes/no radio buttons and certain other fields that are generated from code for PayPal payments or timeslot reservations are still outside the bounds of what you can customize with this method.

I hope most users will find this to be an improvement.

Update Nov. 2013: The rsvpfield shortcode now also supports checkbox=”fieldname” and radio=”fieldname” parameters as an alternative to textfield and select. Checkbox must be used in combination with value=”somevaluehere” to specify what value should be submitted if the checkbox is checked. See the updated list of shortcodes.

The radio parameter works similarly to select, where you specify options=”option1,option2,option3″ – one additional option you can use here is sep=”<br />” to include a line break between radio button options. Line break is actually the default, but in the example above I used sep=” ” to put a space between the radio buttons. I could also do two spaces as sep=”&nbps;&nbps;” or wrap a <div> tag around the whole thing and use sep=”</div><div>” to make each choice appear in a separate div.

RSVPMaker 2.3.5 – Automated Reminders and Better UTF-8 Encoding for International Characters

I’ve recently posted a flurry of releases aimed at addressing a couple of user requests / complaints:

  • Several people have asked for an automated way of sending a reminder to people who have RSVP’ed for an event, so they don’t forget to show up.
  • Several sections of my code had trouble dealing with international characters, either recording them in the database or including them in email notification / confirmation messages. I’ve been getting an education in proper UTF-8 encoding, and I think I’ve rooted out the worst of these errors now.

The functional new feature is an option on the event editor screen where you can specify a reminder date, which you might typically make a day or two before the date of your event. This is in the same block of parameters as the RSVP deadline and RSVP start date.

The reminder message looks something like this:

RSVPMaker now creates a pseudo cron job, which by default runs at noon local time and checks to see if any events have set reminders to run that day. If so, it generates an email to be sent to the people on the RSVP list including the details of their RSVP response and a recap of the event. The idea is that you’re reminding them of the details, while also giving them an opportunity to update their RSVP if their plans have changed.

Regarding the scheduling of these reminder messages, note that the plugin can only calculate local time if you’ve set your timezone on the General Settings screen. Also, because the built-in WP cron routine only runs when WordPress is active, it typically runs a little later than the specified time — whenever the next visitor or search engine spider or spambot probe accesses your domain.

If you prefer to set a different time for the  WP cron routine to run and send reminders, you can change it on the RSVPMaker Settings screen.

RSVPMaker 2.0 Released

RSVPMaker version 2.0 is available for download at

The most significant change is that I’ve fixed the function for downloading reports to Excel. Again. Yes, I previously announced this improvement, but it turned out to be premature because bundling in the required PEAR library turned out to be more complicated than I anticipated. This update instead uses the PHPExcel library.

My apologies to everyone who tried this on the last go-round and got an ugly error message. But you should now see a link on the RSVP Report that allows you to download a summary of the latest replies as an Excel file.

There’s still plenty of room for improvement in the reporting functions, if any PHP code slingers out there would like to jump in and help.

Update: Version 2.1

Just to make this a little more interesting, I added a couple of things that have been on my todo list. Continue reading “RSVPMaker 2.0 Released”