WPMU DEV’s Appointments + is a great scheduling plugin for WordPress. Though this plugin is not specifically intended for booking reservations (WPMU DEV is developing a plugin specific for booking), this does just fine with a few customizations.
One of the customizations that I thought would be really helpful was to customize the notification e-mail that service providers and administrators get whenever someone makes an appointment or books a reservation. By default, this is the e-mail message that providers get:
Not very detailed nor very descriptive, is it? Thanks to the wonders of PHP, we can customize the notification e-mail to have the customer’s name, the appointment time, the customer’s phone number, and more.
For my purposes, I only needed the name, phone number, appointment time, and the customer’s optional note. You can include the customer’s e-mail address as well.
When you have Appointments + installed, open up appointments.php. The function for the e-mail notification is around line 10251. The first part is pulling the appropriate row from the SQL table; the second part is for the Administrator’s e-mail and the last part is for the Provider’s e-mail.
Get and Declare the Appropriate Variables
Here is the original code that declares the function and lets us pull variables from the database:
/** * Send notification email * since 1.0.2 */ function send_notification( $app_id ) { if ( !isset( $this->options["send_notification"] ) || 'yes' != $this->options["send_notification"] ) return; global $wpdb; $r = $wpdb->get_row( "SELECT * FROM " . $this->app_table . " WHERE ID=".$app_id." " );
For us to be able to use customer’s information in the e-mail notifications, we need to add the following code after the above block:
$customer_name = $r->name; $customer_phone = $r->phone; $customer_email = $r->email; $customer_time = date( "F j, Y, g:i a", strtotime( $r->start )); $customer_note = $r->note;
Now comes the fun part!
Admin E-mail Notification
Original Code:
$admin_email = apply_filters( 'app_notification_email', $admin_email, $r ); $body = sprintf( __('The new appointment has an ID %s and you can edit it clicking this link: %s','appointments'), $app_id, admin_url("admin.php?page=appointments&type=pending") ); $mail_result = wp_mail( $admin_email, __('An appointment requires your confirmation', 'appointments'), $body, $this->message_headers( ) );
Customized code where we use our customer variables:
$admin_email = apply_filters( 'app_notification_email', $admin_email, $r ); $body = sprintf( __('Hello! %s wants to book a reservation at %s. Please contact them at %s. Further Notes: %s. Please edit or confirm the reservation here: %s ','appointments'), $customer_name, $customer_time, $customer_phone, $customer_note, admin_url("admin.php?page=appointments&type=pending") ); $mail_result = wp_mail( $admin_email, __('Your Custom Email Subject', 'appointments'), $body, $this->message_headers( ) );
As you can tell, we use %s as a placeholder for the variables that get declared further down in that line of code.
Provider E-mail Notifications
Now that we’ve done the admin e-mails, the provider’s e-mails are basically the same. Here is the original:
// Also notify service provider if he is allowed to confirm it if ( $r->worker && $admin_email != $this->get_worker_email( $r->worker ) && isset( $this->options['allow_worker_confirm'] ) && 'yes' == $this->options['allow_worker_confirm'] ) { $mail_result = wp_mail( $this->get_worker_email( $r->worker ), __('An appointment requires your confirmation', 'appointments'), sprintf( __('The new appointment has an ID %s and you can confirm it using your profile page.','appointments'), $app_id ), $this->message_headers( ) ); if ( $mail_result && isset( $this->options["log_emails"] ) && 'yes' == $this->options["log_emails"] ) $this->log( sprintf( __('Notification message sent to %s for appointment ID:%s','appointments'), $this->get_worker_email( $r->worker ), $app_id ) ); }
And here is the custom code:
// Also notify service provider if he is allowed to confirm it if ( $r->worker && $admin_email != $this->get_worker_email( $r->worker ) && isset( $this->options['allow_worker_confirm'] ) && 'yes' == $this->options['allow_worker_confirm'] ) { $mail_result = wp_mail( $this->get_worker_email( $r->worker ), __('Your Custom Email Subject', 'appointments'), sprintf( __('Hello! %s wants to book a reservation at %s. Please contact them at %s. Further Notes: %s. Please edit or confirm the reservation here: %s','appointments'), $customer_name, $customer_time, $customer_phone, $customer_note, admin_url("admin.php?page=appointments&type=pending") ), $this->message_headers( ) ); if ( $mail_result && isset( $this->options["log_emails"] ) && 'yes' == $this->options["log_emails"] ) $this->log( sprintf( __('Notification message sent to %s for appointment ID:%s','appointments'), $this->get_worker_email( $r->worker ), $app_id ) ); }
With these customizations, you can make the Appointments + Email Notifications much more useful and more friendly for your clients and your clients’ employees.