Lightweight module for ProcessWire that let you subscribe a user to a mailchimp list.
I have only tested it with PHP7.x and Processwire 3.x.
// Easily subscribe a user with SubscribeToMailchimp
$mc = $modules->get("SubscribeToMailchimp");
$mc->subscribe('john.doe@example.com');
- Download the zip file at Github or clone directly the repo into your
site/modules
- If you downloaded the
zip file
, extract it in yoursites/modules
directory. - You might have to change the folders name to 'SubscribeToMailchimp'.
- Goto the modules admin page, click on refresh and install it.
- Log into your Mailchimp account and go to
Profile > Extras > API Keys
. - If you don't have an API Key, create a new one.
- Copy your API Key and paste it in the module settings (
Processwire > Modules > Site > SubscribeToMailchimp
). - Back in Mailchimp, go to the Audience, where you want your new subscribers.
- Go to
Settings > audience name and defaults
. Copy the Audience ID and paste it into the module settings. - Test your settings with the provided checkbox.
// load module into template
$mc = $modules->get("SubscribeToMailchimp");
// subscribe / update a user in your default audience
$mc->subscribe('john.doe@example.com');
// add merge_fields to fill out user data, based on your audience MERGE_FIELD options
// You need to setup the fields at "Settings > List fields and *|MERGE|* tags" first!
$mc->subscribe('john.doe@example.com', ['FNAME' => 'John', 'LNAME' => 'Doe']);
// Subscribe a user to a custom audience (other than default)
$mc->subscribe('john.doe@example.com', ['FNAME' => 'John', 'LNAME' => 'Doe'], 'adcdef12345');
// Work with additional parameters (not merge_field values!)
$mc->subscribe('john.doe@example.com', NULL, NULL, [
'language' => 'en', // find language audience here: https://kb.mailchimp.com/lists/manage-contacts/view-and-edit-contact-languages#Language-Codes
'vip' => true, // boolean vip status
'location' => [ // geo location based on lat/log coordinates
'latitude' => '48.8722344',
'longitude', => '2.7736192'
],
'interests' => [ // subscribe user to interest categories / groups based on group id
'32fec3561e' => true,
'63mel4395m' => false
]
]);
Additional methods
// Unsubscribe a user
$mc->unsubscribe('john.doe@example.com');
// Unsubscribe a user from a custom audience
$mc->unsubscribe('john.doe@example.com', 'abcdef1356');
// Archives a user. Archived users can be found in your audience at "manage contacts -> view archived contacts"
$mc->delete('john.doe@example.com');
// Get the subscription status of a user.
$mc->getStatus('john.doe@example.com');
// Static function to test your settings.
// If no audience id is provided, it will test your default audience and returns a formated html result
$mc->testSettings('audience id');
- This module does not do any data validation. Use a sever-sided validation like Valitron
- Make sure that you have set up your fields in your Mailchimp audience. You can do it at
Settings > Audience fields and *|MERGE|* tags
Example usage after a form is submitted on your page:
// ... validation of form data
$mc = $modules->get("SubscribeToMailchimp");
$email = $input->post->email;
$subscriber = [
'FNAME' => $input->post->firstname,
'LNAME' => $input->post->lastname,
];
$mc->subscribe($email, $subscriber);
In case of trouble check your ProcessWire warning logs.
If you have enabled double opt-in (it is enabled by default) you will not see the subscriber, until he confirmed the subscription in the email sent by Mailchimp
- Check if you have the right audience ID and API Key.
- Check if you pass fields, that exist in your audience.
- Check if you pass a valid email address.
Go to Mailchimps Error Glossary for more Information
Until now, you can update from every version without changing your code
- #10: Fixed an error regarding raw data option with CURL – thanks to @ml-eds for the fix!
- #9: Fixed a bug where users couldn't be subscribed when not found via getStatus – thanks @ml-eds for the fix!
- Updated description for delete() method, removed some typos
- #8: Fixed a bug, that prevents re-subscribing, if double-opt in was disabled – thanks to @jliebermann for pointing this out
- #7: Removed the 'warning', that was logged appeared when trying to add a new subscriber – thanks to @horst-n for mentioning
- Updated wording from 'list' to 'audience' (Introducing Audience)
- #6: Fixed a bug, where you couldn't use the 'ADDRESS' merge field and removed more unused lines - Big thanks to @ml-eds for the quick fix!
- #4: Deleted unused line
-
#3: Updated subscribe method. You can now add additional parameters like language or interests. Find more about this in the Mailchimp API Documentation
-
#2: Added getStatus method
$mc->getStatus($email, $list = "")
-
#2: Added ability to resubscribe a user, if he has unsubscribed. The user will have to confirm his subscription again via double-opt-in (if not disabled)
-
#1: Added testSetting method and a beautiful way to test your settings right in the module settings pages - Big thanks to @horst-n
-
Centralized the validation warning via a constant
-
Updated the getApiBase to be more flexible with different API calls
- Added 'Unsubscribe' method
$mc->unsubscribe($email, $list = "")
- Added 'Delete' method
$mc->delete($email, $list = "")
- Removed type declarations to be compatible with PHP 5.1* (thanks to wbmnfktr)
- Changed the way, the base url for the api gets called
*I have only tested it with PHP 7.x so far, so use on owners risk :)
Any suggestions? Join the Discussion in the ProcessWire Forums or contribute directly on Github.