2018 Year-End Features

Over the past few years, I have written a lot of changes some big and some small to the free and pro version of the RSVP plugin. However, unless you comb through the changelog or if you were involved in the change yourself, it was doubtful you knew about the changes. Going forward when significant features are planned or are getting close to release I am going to start to write about them. Speaking of which…there are two significant changes that I want to write about now. I plan to have these changes released by the end of 2018.
Improvements in the Import Process
Currently, when importing attendees into an event, a person has to create a specific information layout in the Excel file. This can be time-consuming and error-prone. That will be changing soon as there will now be a two-step process where you can specify which column in the Excel file goes to which field the value should go to. The hope is to make it less time consuming and more accessible for people to use.
Front-end Attendee Management
With the business version of the plugin, you get an additional plugin that allows you to add attendees on the front-end. That is a pretty limited feature, but it is the start of something bigger. Soon there will be the ability to manage attendees via the front-end. This will make it so your clients can maintain the attendee list without having access to the admin area of their WordPress site.
Are there any other features you would like to see get added or improved in the plugins? If so let me know.

Sending Inline Images via WordPress’ WP_Mail

Recently I was implementing the ability to send QR codes in the RSVP confirmation emails. While doing that I ran into a stumbling block on how to send attachments inline. Since there didn’t seem to be any good documentation on how to do this minus some StackOverflow posts, I thought I would share how I did it and the lessons I learned in regards to sending images as emails in WordPress.

The First Attempt

Initially, when implementing this feature, I tried to do a base64-encoded image inline with the email. However, that wouldn’t show up when the email was viewed in Gmail’s web interface. So, I kept that there and also attached the QR code at the bottom of the email as well. That worked but was pretty ugly as that meant every email with QR shortcodes had at least two QR codes in it. That would be pretty confusing for both attendees and people working events.

Inline Attachments to the Rescue

To fix this I went with inline attachments. The only problem with this and the reason I didn’t do it this way in the first place is that there was no good documentation on how to do this. Especially when you were sending out many different emails. Below is, in general, the solution I came up with which worked for my use-case. Hopefully, it can be useful to some other person as well.
In my case, the code, that sends the email is separated from the part of the code that prepares the email body for sending. To get around this, I used a global array in my plugin to temporarily store the images I wanted to inline attach. If there was one object that was just being passed around, I would have stored the information in there, but that is currently not the case for my code base. I secondly created a wrapper around the wp_mail function which we will use later to implement the inline attachments. Below is the starting of the wrapper:
I then went through my code and replaced all of the calls to wp_mail with this new wrapper function. One thing I made sure to do with the wrapper is to use the exact same parameter ordering and defaults as wp_mail, so it was simple to swap.
Once I had that in place, it was now time for me to get inline attachments working. This was broken up into two separate pieces of work:
  • Email body generation
  • Attaching the files to the email right before it sends

Generating Content

While generating content for the email I would check to see if an inline image was needed. If needed I would create the image and then add it to the global array with the following attributes:
  • uid: A unique identifier that is used for inline attachments this needs to be referenced to inline attach the image
  • name: The name of the attachment that the user will see
  • file: The path to the file that needs to be attached
The code looked something like.
We then use the $uid variable for the inline image in the body of the email.

Basically, the email clients see the “cid” and try to find an attachment with that ID and then shows it inline.

Attaching the Images to the Email

Now that the content has been generated we need to go back to the wrapper function we wrote earlier and attach the images to the email.
To do this, we will want to add an action with a function to embed the image. It looks like.
What this function does is adds an embedded image with the attributes we specified when we were creating the email content. We want to do this before the wp_mail function is called. After the wp_mail function is called, we want to clean-up the images that we generated as well. Here is roughly what I wrote.
This is what the finished wrapper function looks like.
That is it. I hope this is helpful to others and provides an example of how you can embed an inline attachment with WordPress.

RSVP Pro’s 1st Birthday

One year ago today (10/13/2014) I released RSVP Pro to the world. Since it has been a year I wanted to reflect on the good and bad. First some statistics:

  • 82 releases since this year
  • ~130 customers

I am pretty happy with both of these since there have been zero marketing efforts except for a link or two from the free version of the plugin. Thanks to many of my customers in giving me feedback and reporting issues. It always amazes me at the different ways people can use a product.

The Good

So many more new features have been released this year than I thought would happen. As more and more people used the plugin and gave me feedback it was important for me to deliver the functionality to let people have a successful event. Some of the larger features that were added after the initial release are:

  • An optional wizard like front-end user experience
  • Ability to easily email all or selected attendees
  • Sub-events including open and private events

The Bad

There wasn’t anything specifically bad that happened. The only thing that was “bad” was I hoped for more sales and sales to pick-up “magically” that is my own fault. It still sucks though :).

What is ahead?

Many things! To summarize though I want to finish up my ideas on how to make the RSVP Pro plugin easier to use and I am going to focus a little bit on marketing to help build an audience. My goals is to make this the easiest to use and full-featured event management or RSVP plugin for WordPress.


Multi-site license vs. Single license

One fairly common use case for the RSVP Pro plugin is for event management and wedding companies to offer the plugin in a white label fashion. An easy way to do this is by enabling a WordPress Network (aka a multi-site instance), however, until recently the user experience was not the best in this case. Depending on how you wanted to look at it you were installing it on a single instance, however, you would get an error that the license was invalid. The multi-site license is a way to fix this so the error goes away and it continues to work better in a network.

Now when you install the pro version of the plugin and network activate it you can specify the license in the network admin section. As long as you have a multi-site license everything will validate correctly and no more invalid license messages will appear.

What happens if you install the pro plugin on just one blog in a network with a single-site license? It will operate just like you would have if you had installed it on a standalone WordPress instance as it should.

The other use case for a multi-site license is if you are a consulting shop that is going to end up using it on more than nine sites and so instead of doing multiple purchases you can just purchase it once and use the same license key for all of the sites.

Max Attendees and Waitlist Functionality

The RSVP Pro plugin was just released with a few more features that have been asked for recently. These features are the ability to set a max attendee limit and also to have a wait list. These two options can be found under each event’s general setting tab. A screen capture of the two options is shown below.


The option, “Max guest limit for event,” is used to specify a guest limit it can be left blank and it is assumed there is no limit. Any positive non-zero number can be used for the guest limit. When a guest tries to be added and the limit is hit either a message will appear or they will show as having RSVP’d as “No.”

The option, “Allow for a wait list,” is used to enable the wait list. If a user tries to RSVP and the event is already at maximum capacity they can choose to say no or to be added to the wait list.

Besides these two main options there are also related text formatting options under the “text customizations” tab.


How did these features help you in your event? We would love to hear about it.

Does the RSVP Pro plugin not exactly fit what you need? Please get in touch and we will see what we can do for you.

Wizards, Variables and Custom Questions Oh My!

The last few months has been filled with many releases and new features. I wanted to talk about a few that have been released to the RSVP Pro plugin.

Multi-Step Registration

Probably the biggest feature was the addition of an option to change the front-end form from one long form to a wizard-like interface. Where the first step is filling out a person’s information (name, email, etc..) and the next step(s) is answering information about events. This makes the UI cleaner and user-friendly as people are not given a huge wall of options that they have to deal with. To turn on the option go to the main event’s settings then click “form customizations” then finally select the option “Change the frontend to have multiple steps” wizard_option

Once that option is turned on the front-end will now be in wizard mode which look different once a user finds their name and/or creates a new user.

Mail Message Variables

The ability to send messages to attendees is useful but there are still many ways we want to see it improved. One of the items on our list was the creation of placeholders in the subject and message. Now that is possible, you can put in placeholders for an attendees: first and last name, email address, passcode and the URL for the event.

If you are looking for additional features in the message sending functionality drop us a line we would love to hear from you.

Additional Custom Question Types

The last feature I want to mention is two new custom question types: read only and admin only. These new custom question types come from user feedback. Often people wanted to be able to display a notice mixed in with the custom questions or let attendees see a value that they couldn’t change but should be able to see, such as table assignment. The read only type allows for those scenarios.

The admin-only scenario is a different but along the same vein as read only. In some cases there might be a value that needs to be associated with the attendee but that they should never see. This is where the admin only custom question is used.


Hopefully these new features will be helpful in managing your event and attendees. If there is anything missing in the RSVP Pro plugin that you would like to see added we welcome any and all constructive feedback.

Styling the RSVP Plugin

The RSVP and RSVP Pro plugin purposely don’t do much in the way of styling. We inherit almost all styling from whatever theme is being used. The reason for this is we want to try and make everything look as similar as possible. In this post I am going to go through some of the style classes that exist in the RSVP plugins and go through one quick example that only pertains to the pro version.

The post assumes some familiarity with stylesheets and how you can use your theme’s stylesheet to modify the look and feel of the site as a whole.

Available styles

  • rsvpPlugin – ID of the main RSVP Container. Each RSVP step will be wrapped in this container
  • rsvpParagraph – Class name that is used for all paragraph tags on the front end portion of the RSVP
  • rsvpFormField – Class for divs that surround a given form input, which is a combination of a label and at least one form input (could be multiple form inputs)
  • rsvpAdditionalAttendee – Class for the div container that holds each additional RSVP attendee you are associated with
  • additionalRsvpContainer – The container that holds the plus sign that allows for people to add additional attendees
  • rsvpCustomGreeting – ID for the custom greeting div that shows up if that option is enabled
  • rsvpBorderTop – Class for setting a top border on certain divs in the main input form
  • rsvpCheckboxCustomQ – Class for the div that surrounds each custom question checkbox
  • rsvpClear – A class for div elements that we want to use to set clear both. Currently used only next to rsvpCheckboxCustomQs as they are floated
  • rsvpRsvpQuestionArea (Pro Only) – A class for the RSVP attending question

An example…

Now what would we do if we want to change the radio buttons to be more like buttons side by side in the pro plugin? Well… we would leverage the rsvpRsvpQuestionArea class to modify the styles and use the fact that the labels act as buttons for the radio buttons.  Before styling them this is what the “yes”/”no” question looks like in the plugin.


Now let’s open up the theme’s style.css and add in the following styles

.rsvpRsvpQuestionArea input[type="radio"] {
display: none!important;
.rsvpRsvpQuestionArea label {
background-color: green;
color: white;
padding: 10px;
.rsvpRsvpQuestionArea {
display: inline-block;
height: 30px;

What we did here was hide the radio button, we had to use the !important keyword because the RSVP stylesheet gets loaded first and we try and prevent the radio buttons being hidden.

We then make the labels green with white text and display them side by side. The end results looks like

radios_as_buttonsThis works well but we can’t tell which item is selected. So, let’s change that!

.rsvpRsvpQuestionArea input[type="radio"]:checked + label {
background-color: blue;

With this added style we set the label that is next to the radio that is checked to have a background-color of blue. Which now makes the buttons look like radio_selected_buttonNow our “radio” buttons look like styled buttons.

This is just an example of how the RSVP plugin can be styled. If you are ever stuck and need some help feel free to reach out to us we are here to help.

Happy styling!

Sub-Events and Public Attendee lists

I have been building software for awhile and it always amazes me how many different ways people want to use software. For example one feature that has been requested off and on again for a few years has been the ability to show an attendee list on a public page. This was never something I would want and not something I really would have thought of without other users’ feedback. With a recent release of the RSVP Pro plugin this feature now exists!

Now when using the paid version of the plugin you now have an additional short code that looks like [rsvppro-attendeelist id=”X”] where the  value for the id is the id for the main RSVP event. The new event list page which shows the short code looks something like.

new_event_listYou can then embed that short code on any page or post and have a list of the attendees and their RSVP status.

One thing you might notice from the above screenshot is that there are now sub-events as well. This was another feature that seemed very “duh” once user feedback was received. Some people have multiple events but share a guest list and only want one page for all events. This is what the sub-event feature allows for. Using this you can still have custom questions per-event but the guest list is shared and each user can RSVP for each specific event .

I hope you like the new features and keep the feedback coming!

New Feature! Sending Messages to Attendees

Recently we released a new feature to the RSVP Pro plugin that we think is going to be very useful. It is now possible for people managing events to send emails to all or selected attendees. To do this make sure you have upgraded your RSVP Pro plugin to at least version 1.1.9 from there you will then be able to send out messages. There are two different ways to do this.

The first way is from the event list area under each event there is a “send message” link.

Send message event list

When you use this link and you compose a message you will send the message to all attendees who have entered in an email address.

The other way to send a message is from the attendees list screen. From here you can select the attendees you want to send a message to and then select the bulk action of sending a message.

Bulk actions send

This can be useful if you only want to send a message to a handful of people.

That is it for this new feature I hope it makes your event planning all that much easier. If you feel it is missing anything drop us a line and we will see what we can do!

Translating the RSVP Plugin

Translating the RSVP plugin is something that is requested once in awhile. In this post I am going to detail how people can do that without modifying the HTML or the files in the actual RSVP plugin.

Step 1 – Get a translation editor like Poedit. What this does is it allows you to quickly create a translation file based off of a POT file that is contained in the RSVP plugin.

Step 2 – Download the latest version of the RSVP plugin and unzip the file. Under the languages folder you should see a file called “rsvp-plugin.pot”. Like in the below screen shot.

Step 3 – Now that you know where that file is, go to Poedit and create a new translation and open the file rsvp-plugin.pot.

Step 4 – Once it is opened it will ask you to specify the language you can use the language code or name.

Step 5 – Now that the file has been created we should save it. Go to file -> save and then save it in the format of “rsvp-plugin-xx_YY.po” Where xx is the lower case version of your language code and YY is the upper case. For a list of language codes a good resource can be found at http://www.loc.gov/standards/iso639-2/php/code_list.php, you will want to use the ISO 639-1 Code.

Step 6 – Once that is saved the hard part starts, translating. Click on each row and enter in your translation text, like so:

Step 7 – Once you have entered in all of the text you can now include your two files one should end in .po and one should end in .mo. Into the languages folder of the rsvp-plugin install on your WordPress instance.

Happy translating!