MailChimp for WordPress - Version 2.2.3

Version Description

  • January 24, 2014 =

Minor improvements and additions for compatibility with the MailChimp Sync plugin.

Download this release

Release Info

Developer DvanKooten
Plugin Icon 128x128 MailChimp for WordPress
Version 2.2.3
Comparing to
See all releases

Code changes from version 2.2.2 to 2.2.3

assets/css/admin.css CHANGED
@@ -62,25 +62,29 @@
62
  }
63
 
64
  .pro-feature,
65
- .mc4wp-settings tr.pro-feature th,
66
- .mc4wp-settings tr.pro-feature td{
67
  color:#aaa;
68
  }
69
 
70
- #mc4wp-admin span.status{
71
- display:inline-block;
72
- padding:3px 6px;
73
- color:white;
74
- font-size:12px;
 
75
  font-weight:bold;
76
  }
 
 
 
77
 
78
- #mc4wp-admin span.positive{
79
- background-color:green;
80
  }
81
 
82
- #mc4wp-admin span.negative{
83
- background-color:lightGrey;
84
  }
85
 
86
  #mc4wp-admin table th{
62
  }
63
 
64
  .pro-feature,
65
+ .mc4wp-settings tr.pro-feature th,
66
+ .mc4wp-settings tr.pro-feature td{
67
  color:#aaa;
68
  }
69
 
70
+ #mc4wp-admin .status{
71
+ display:inline-block;
72
+ margin-left:1em;
73
+ padding:3px 6px;
74
+ color:white;
75
+ font-size:12px;
76
  font-weight:bold;
77
  }
78
+ #mc4wp-admin .positive{
79
+ background-color:limeGreen;
80
+ }
81
 
82
+ #mc4wp-admin .negative{
83
+ background-color: red;
84
  }
85
 
86
+ #mc4wp-admin .neutral{
87
+ background: gray;
88
  }
89
 
90
  #mc4wp-admin table th{
assets/css/admin.min.css CHANGED
@@ -1 +1 @@
1
- #mc4wp-content{float:left;width:65%}#mc4wp-sidebar{float:left;width:33%;margin-left:2%;border-left:1px solid #ccc;padding:0 0 0 2%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.valigntop{vertical-align:top!important}#mc4wp-admin .mc4wp-box{margin-bottom:20px}#mc4wp-upgrade-box{background:#222;color:#ddd;padding:20px}#mc4wp-upgrade-box h3{margin:0;color:#fff}#mc4wp-fw h4{margin-top:0}#mc4wp-fw p{margin-bottom:1em}#mc4wp-fw-fields{display:none}#mc4wp-fw-preview{font-family:"Courier New",Courier,monospace;min-height:200px;font-size:11px;background:#fff;z-index:99}#mc4wp-lists{margin:0}#mc4wp-lists input{margin-right:5px}.mc4wp-settings tr.pro-feature td,.mc4wp-settings tr.pro-feature th,.pro-feature{color:#aaa}#mc4wp-admin span.status{display:inline-block;padding:3px 6px;color:#fff;font-size:12px;font-weight:700}#mc4wp-admin span.positive{background-color:green}#mc4wp-admin span.negative{background-color:lightGrey}#mc4wp-admin table th{text-align:left}#mc4wp-admin table.form-table tr td:first-child,#mc4wp-admin table.form-table tr th:first-child{padding-left:0}#mc4wp-admin td.nowrap{white-space:nowrap}#mc4wp-admin td.desc{font-style:italic;font-size:11px}.mc4wp-notice{padding:6px 8px;color:#31708f;background:#d9edf7;border:1px solid #bce8f1;margin:1em 0!important}#mc4wp-admin .mc4wp-col{float:left;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:50%;padding:0 5px}#mc4wp-admin .mc4wp-first{padding-left:0}#mc4wp-admin .mc4wp-last{padding-right:0}.mc4wp-well{background:#fff;padding:10px;border:1px solid #ccc}.mc4wp-title{font-size:1.4em;margin:1.6em 0 1em;padding:0 0 6px;border-bottom:1px solid #ddd}table.mc4wp-help,table.mc4wp-help td,table.mc4wp-help th{border:1px solid #ddd;border-collapse:collapse;font-size:12px}table.mc4wp-help td,table.mc4wp-help th{vertical-align:text-top;text-align:left;padding:5px 10px}table.mc4wp-help tr:hover{background-color:#ddd}#mc4wp-admin .wp-list-table code{float:right}@media(max-width:1279px){#mc4wp-content,#mc4wp-sidebar{float:none;width:100%;padding:0;margin:0}#mc4wp-sidebar{border-left:0;border-top:1px solid #ccc;margin-top:25px;padding-top:25px}#mc4wp-admin .wp-list-table code{float:none}}@media(max-width:719px){.mc4wp-hide-smallscreens{display:none}}
1
+ #mc4wp-content{float:left;width:65%}#mc4wp-sidebar{float:left;width:33%;margin-left:2%;border-left:1px solid #ccc;padding:0 0 0 2%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.valigntop{vertical-align:top!important}#mc4wp-admin .mc4wp-box{margin-bottom:20px}#mc4wp-upgrade-box{background:#222;color:#ddd;padding:20px}#mc4wp-upgrade-box h3{margin:0;color:#fff}#mc4wp-fw h4{margin-top:0}#mc4wp-fw p{margin-bottom:1em}#mc4wp-fw-fields{display:none}#mc4wp-fw-preview{font-family:"Courier New",Courier,monospace;min-height:200px;font-size:11px;background:#fff;z-index:99}#mc4wp-lists{margin:0}#mc4wp-lists input{margin-right:5px}.mc4wp-settings tr.pro-feature td,.mc4wp-settings tr.pro-feature th,.pro-feature{color:#aaa}#mc4wp-admin .status{display:inline-block;margin-left:1em;padding:3px 6px;color:#fff;font-size:12px;font-weight:700}#mc4wp-admin .positive{background-color:#32cd32}#mc4wp-admin .negative{background-color:red}#mc4wp-admin .neutral{background:gray}#mc4wp-admin table th{text-align:left}#mc4wp-admin table.form-table tr td:first-child,#mc4wp-admin table.form-table tr th:first-child{padding-left:0}#mc4wp-admin td.nowrap{white-space:nowrap}#mc4wp-admin td.desc{font-style:italic;font-size:11px}.mc4wp-notice{padding:6px 8px;color:#31708f;background:#d9edf7;border:1px solid #bce8f1;margin:1em 0!important}#mc4wp-admin .mc4wp-col{float:left;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:50%;padding:0 5px}#mc4wp-admin .mc4wp-first{padding-left:0}#mc4wp-admin .mc4wp-last{padding-right:0}.mc4wp-well{background:#fff;padding:10px;border:1px solid #ccc}.mc4wp-title{font-size:1.4em;margin:1.6em 0 1em;padding:0 0 6px;border-bottom:1px solid #ddd}table.mc4wp-help,table.mc4wp-help td,table.mc4wp-help th{border:1px solid #ddd;border-collapse:collapse;font-size:12px}table.mc4wp-help td,table.mc4wp-help th{vertical-align:text-top;text-align:left;padding:5px 10px}table.mc4wp-help tr:hover{background-color:#ddd}#mc4wp-admin .wp-list-table code{float:right}@media(max-width:1279px){#mc4wp-content,#mc4wp-sidebar{float:none;width:100%;padding:0;margin:0}#mc4wp-sidebar{border-left:0;border-top:1px solid #ccc;margin-top:25px;padding-top:25px}#mc4wp-admin .wp-list-table code{float:none}}@media(max-width:719px){.mc4wp-hide-smallscreens{display:none}}
includes/class-admin.php CHANGED
@@ -27,7 +27,7 @@ class MC4WP_Lite_Admin
27
  $this->setup_hooks();
28
 
29
  // did the user click on upgrade to pro link?
30
- if( isset( $_GET['page'] ) && $_GET['page'] === 'mc4wp-lite-upgrade' && false === headers_sent() ) {
31
  wp_redirect( 'https://mc4wp.com/#utm_source=lite-plugin&utm_medium=link&utm_campaign=menu-upgrade-link' );
32
  exit;
33
  }
@@ -72,7 +72,7 @@ class MC4WP_Lite_Admin
72
  }
73
 
74
  // Hooks for Form settings page
75
- if( isset( $_GET['page'] ) && $_GET['page'] === 'mc4wp-lite-form-settings' ) {
76
  add_filter( 'quicktags_settings', array( $this, 'set_quicktags_buttons' ), 10, 2 );
77
  }
78
 
@@ -130,7 +130,7 @@ class MC4WP_Lite_Admin
130
  return $links;
131
  }
132
 
133
- $settings_link = '<a href="admin.php?page=mc4wp-lite">'. __( 'Settings', 'mailchimp-for-wp' ) . '</a>';
134
  array_unshift( $links, $settings_link );
135
  return $links;
136
  }
@@ -166,11 +166,11 @@ class MC4WP_Lite_Admin
166
  */
167
  $required_cap = apply_filters( 'mc4wp_settings_cap', 'manage_options' );
168
 
169
- add_menu_page( 'MailChimp for WP Lite', 'MailChimp for WP', $required_cap, 'mc4wp-lite', array($this, 'show_api_settings'), MC4WP_LITE_PLUGIN_URL . 'assets/img/menu-icon.png' );
170
- add_submenu_page( 'mc4wp-lite', 'API Settings - MailChimp for WP Lite', __( 'MailChimp Settings', 'mailchimp-for-wp' ), $required_cap, 'mc4wp-lite', array( $this, 'show_api_settings' ) );
171
- add_submenu_page( 'mc4wp-lite', 'Checkbox Settings - MailChimp for WP Lite', __( 'Checkboxes', 'mailchimp-for-wp' ), $required_cap, 'mc4wp-lite-checkbox-settings', array($this, 'show_checkbox_settings' ) );
172
- add_submenu_page( 'mc4wp-lite', 'Form Settings - MailChimp for WP Lite', __( 'Forms', 'mailchimp-for-wp' ), $required_cap, 'mc4wp-lite-form-settings', array( $this, 'show_form_settings' ) );
173
- add_submenu_page( 'mc4wp-lite', 'Upgrade to Pro - MailChimp for WP Lite', __( 'Upgrade to Pro', 'mailchimp-for-wp' ), $required_cap, 'mc4wp-lite-upgrade', array( $this, 'redirect_to_pro' ) );
174
  }
175
 
176
 
@@ -289,7 +289,7 @@ class MC4WP_Lite_Admin
289
  public function load_css_and_js( $hook )
290
  {
291
  // only load asset files on the MailChimp for WordPress settings pages
292
- if( false === isset( $_GET['page'] ) || false === stristr( $_GET['page'], 'mc4wp-lite' ) ) {
293
  return;
294
  }
295
 
27
  $this->setup_hooks();
28
 
29
  // did the user click on upgrade to pro link?
30
+ if( isset( $_GET['page'] ) && $_GET['page'] === 'mailchimp-for-wp-upgrade' && false === headers_sent() ) {
31
  wp_redirect( 'https://mc4wp.com/#utm_source=lite-plugin&utm_medium=link&utm_campaign=menu-upgrade-link' );
32
  exit;
33
  }
72
  }
73
 
74
  // Hooks for Form settings page
75
+ if( isset( $_GET['page'] ) && $_GET['page'] === 'mailchimp-for-wp-form-settings' ) {
76
  add_filter( 'quicktags_settings', array( $this, 'set_quicktags_buttons' ), 10, 2 );
77
  }
78
 
130
  return $links;
131
  }
132
 
133
+ $settings_link = '<a href="admin.php?page=mailchimp-for-wp">'. __( 'Settings', 'mailchimp-for-wp' ) . '</a>';
134
  array_unshift( $links, $settings_link );
135
  return $links;
136
  }
166
  */
167
  $required_cap = apply_filters( 'mc4wp_settings_cap', 'manage_options' );
168
 
169
+ add_menu_page( 'MailChimp for WP Lite', 'MailChimp for WP', $required_cap, 'mailchimp-for-wp', array($this, 'show_api_settings'), MC4WP_LITE_PLUGIN_URL . 'assets/img/menu-icon.png' );
170
+ add_submenu_page( 'mailchimp-for-wp', 'API Settings - MailChimp for WP Lite', __( 'MailChimp Settings', 'mailchimp-for-wp' ), $required_cap, 'mailchimp-for-wp', array( $this, 'show_api_settings' ) );
171
+ add_submenu_page( 'mailchimp-for-wp', 'Checkbox Settings - MailChimp for WP Lite', __( 'Checkboxes', 'mailchimp-for-wp' ), $required_cap, 'mailchimp-for-wp-checkbox-settings', array($this, 'show_checkbox_settings' ) );
172
+ add_submenu_page( 'mailchimp-for-wp', 'Form Settings - MailChimp for WP Lite', __( 'Forms', 'mailchimp-for-wp' ), $required_cap, 'mailchimp-for-wp-form-settings', array( $this, 'show_form_settings' ) );
173
+ add_submenu_page( 'mailchimp-for-wp', 'Upgrade to Pro - MailChimp for WP Lite', __( 'Upgrade to Pro', 'mailchimp-for-wp' ), $required_cap, 'mailchimp-for-wp-upgrade', array( $this, 'redirect_to_pro' ) );
174
  }
175
 
176
 
289
  public function load_css_and_js( $hook )
290
  {
291
  // only load asset files on the MailChimp for WordPress settings pages
292
+ if( false === isset( $_GET['page'] ) || false === stristr( $_GET['page'], 'mailchimp-for-wp' ) ) {
293
  return;
294
  }
295
 
includes/class-api.php CHANGED
@@ -1,6 +1,6 @@
1
  <?php
2
 
3
- if( ! defined("MC4WP_LITE_VERSION") ) {
4
  header( 'Status: 403 Forbidden' );
5
  header( 'HTTP/1.1 403 Forbidden' );
6
  exit;
@@ -33,26 +33,31 @@ class MC4WP_Lite_API {
33
  */
34
  private $connected = null;
35
 
 
 
 
 
 
36
  /**
37
  * Constructor
38
  *
39
  * @param string $api_key MailChimp API key
40
  */
41
- public function __construct( $api_key )
42
- {
43
  $this->api_key = $api_key;
44
- $dash_position = strpos( $api_key, '-' );
45
 
 
46
  if( $dash_position !== false ) {
47
  $this->api_url = 'https://' . substr( $api_key, $dash_position + 1 ) . '.api.mailchimp.com/2.0/';
48
  }
49
  }
50
 
51
- /**
52
- * Show an error message to administrators
53
- *
54
- * @param string $message
55
- */
 
56
  private function show_error( $message ) {
57
 
58
  if( ! is_admin() || ! current_user_can( 'manage_options' ) ) {
@@ -60,6 +65,7 @@ class MC4WP_Lite_API {
60
  }
61
 
62
  add_settings_error( 'mc4wp-api', 'mc4wp-api-error', $message, 'error' );
 
63
  }
64
 
65
  /**
@@ -68,8 +74,7 @@ class MC4WP_Lite_API {
68
  *
69
  * @return boolean
70
  */
71
- public function is_connected()
72
- {
73
  if( $this->connected === null ) {
74
 
75
  $this->connected = false;
@@ -102,8 +107,7 @@ class MC4WP_Lite_API {
102
  *
103
  * @return boolean|string True if success, 'error' if error
104
  */
105
- public function subscribe( $list_id, $email, array $merge_vars = array(), $email_type = 'html', $double_optin = true, $update_existing = false, $replace_interests = true, $send_welcome = false )
106
- {
107
  $data = array(
108
  'id' => $list_id,
109
  'email' => array( 'email' => $email),
@@ -115,22 +119,22 @@ class MC4WP_Lite_API {
115
  'send_welcome' => $send_welcome
116
  );
117
 
118
- $result = $this->call( 'lists/subscribe', $data );
119
 
120
- if( is_object( $result ) ) {
121
 
122
- if( ! isset( $result->error ) ) {
123
- return true;
124
- } else {
125
 
126
  // check error
127
- if( (int) $result->code === 214 ) {
128
- return 'already_subscribed';
129
- }
130
-
131
  // store error message
132
- $this->error_message = $result->error;
133
  return 'error';
 
 
134
  }
135
 
136
  }
@@ -143,8 +147,7 @@ class MC4WP_Lite_API {
143
  * @param string $list_id
144
  * @return array|boolean
145
  */
146
- public function get_list_groupings( $list_id )
147
- {
148
  $result = $this->call( 'lists/interest-groupings', array( 'id' => $list_id ) );
149
 
150
  if( is_array( $result ) ) {
@@ -157,10 +160,9 @@ class MC4WP_Lite_API {
157
  /**
158
  * @param array $list_ids Array of ID's of the lists to fetch. (optional)
159
  *
160
- * @return bool
161
  */
162
- public function get_lists( $list_ids = array() )
163
- {
164
  $args = array(
165
  'limit' => 100
166
  );
@@ -183,11 +185,11 @@ class MC4WP_Lite_API {
183
 
184
  /**
185
  * Get lists with their merge_vars for a given array of list id's
 
186
  * @param array $list_ids
187
  * @return array|boolean
188
  */
189
- public function get_lists_with_merge_vars( $list_ids )
190
- {
191
  $result = $this->call( 'lists/merge-vars', array('id' => $list_ids ) );
192
 
193
  if( is_object( $result ) && isset( $result->data ) ) {
@@ -202,10 +204,14 @@ class MC4WP_Lite_API {
202
  *
203
  * @param string $list_id
204
  * @param array $emails
205
- * @return array
206
  */
207
- public function get_member_info( $list_id, $emails ) {
208
- $result = $this->call( 'lists/member-info', array( 'id' => $list_id, 'emails' => $emails ) );
 
 
 
 
209
 
210
  if( is_object( $result ) && isset( $result->data ) ) {
211
  return $result->data;
@@ -214,6 +220,47 @@ class MC4WP_Lite_API {
214
  return false;
215
  }
216
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
217
  /**
218
  * Checks if an email address is on a given list
219
  *
@@ -222,41 +269,52 @@ class MC4WP_Lite_API {
222
  * @return boolean
223
  */
224
  public function list_has_subscriber( $list_id, $email ) {
225
- $member_info = $this->get_member_info( $list_id, array( array( 'email' => $email ) ) );
226
 
227
  if( is_array( $member_info ) && isset( $member_info[0] ) ) {
228
- return ( $member_info[0]->status == "subscribed" );
229
  }
230
 
231
  return false;
232
  }
233
 
234
  /**
235
- * Unsubscribes the given email from the given MailChimp list
236
  *
237
- * @param string $list_id
238
- * @param string $email
 
 
 
239
  *
240
  * @return bool
241
  */
242
- public function unsubscribe( $list_id, $email ) {
243
 
244
- $result = $this->call( 'lists/unsubscribe', array(
 
 
 
 
 
 
 
245
  'id' => $list_id,
246
- 'email' => array(
247
- 'email' => $email
248
- )
 
249
  )
250
  );
251
 
252
- if( is_object( $result ) ) {
253
 
254
- if ( isset( $result->complete ) && $result->complete ) {
255
  return true;
256
  }
257
 
258
- if( isset( $result->error ) ) {
259
- $this->error_message = $result->error;
260
  }
261
  }
262
 
@@ -273,8 +331,7 @@ class MC4WP_Lite_API {
273
  *
274
  * @return object
275
  */
276
- public function call( $method, array $data = array() )
277
- {
278
  // do not make request when no api key was provided.
279
  if( empty( $this->api_key ) ) {
280
  return false;
@@ -304,27 +361,43 @@ class MC4WP_Lite_API {
304
  'msg' => "Everything's Chimpy!"
305
  );
306
  }
307
-
308
  $body = wp_remote_retrieve_body( $response );
309
- return json_decode( $body );
 
 
 
 
 
 
 
310
  }
311
 
312
  /**
313
- * Checks if an error occured in the most recent request
314
- * @return boolean
315
- */
316
- public function has_error()
317
- {
318
  return ( ! empty( $this->error_message ) );
319
  }
320
 
321
  /**
322
- * Gets the most recent error message
 
323
  * @return string
324
  */
325
- public function get_error_message()
326
- {
327
  return $this->error_message;
328
  }
329
 
 
 
 
 
 
 
 
 
 
330
  }
1
  <?php
2
 
3
+ if( ! defined( 'MC4WP_LITE_VERSION' ) ) {
4
  header( 'Status: 403 Forbidden' );
5
  header( 'HTTP/1.1 403 Forbidden' );
6
  exit;
33
  */
34
  private $connected = null;
35
 
36
+ /**
37
+ * @var object The full response object of the latest API call
38
+ */
39
+ private $last_response;
40
+
41
  /**
42
  * Constructor
43
  *
44
  * @param string $api_key MailChimp API key
45
  */
46
+ public function __construct( $api_key ) {
 
47
  $this->api_key = $api_key;
 
48
 
49
+ $dash_position = strpos( $api_key, '-' );
50
  if( $dash_position !== false ) {
51
  $this->api_url = 'https://' . substr( $api_key, $dash_position + 1 ) . '.api.mailchimp.com/2.0/';
52
  }
53
  }
54
 
55
+ /**
56
+ * Show an error message to administrators
57
+ *
58
+ * @param string $message
59
+ * @return bool
60
+ */
61
  private function show_error( $message ) {
62
 
63
  if( ! is_admin() || ! current_user_can( 'manage_options' ) ) {
65
  }
66
 
67
  add_settings_error( 'mc4wp-api', 'mc4wp-api-error', $message, 'error' );
68
+ return true;
69
  }
70
 
71
  /**
74
  *
75
  * @return boolean
76
  */
77
+ public function is_connected() {
 
78
  if( $this->connected === null ) {
79
 
80
  $this->connected = false;
107
  *
108
  * @return boolean|string True if success, 'error' if error
109
  */
110
+ public function subscribe( $list_id, $email, array $merge_vars = array(), $email_type = 'html', $double_optin = true, $update_existing = false, $replace_interests = true, $send_welcome = false ) {
 
111
  $data = array(
112
  'id' => $list_id,
113
  'email' => array( 'email' => $email),
119
  'send_welcome' => $send_welcome
120
  );
121
 
122
+ $response = $this->call( 'lists/subscribe', $data );
123
 
124
+ if( is_object( $response ) ) {
125
 
126
+ if( isset( $response->error ) ) {
 
 
127
 
128
  // check error
129
+ if( (int) $response->code === 214 ) {
130
+ return 'already_subscribed';
131
+ }
132
+
133
  // store error message
134
+ $this->error_message = $response->error;
135
  return 'error';
136
+ } else {
137
+ return true;
138
  }
139
 
140
  }
147
  * @param string $list_id
148
  * @return array|boolean
149
  */
150
+ public function get_list_groupings( $list_id ) {
 
151
  $result = $this->call( 'lists/interest-groupings', array( 'id' => $list_id ) );
152
 
153
  if( is_array( $result ) ) {
160
  /**
161
  * @param array $list_ids Array of ID's of the lists to fetch. (optional)
162
  *
163
+ * @return array|bool
164
  */
165
+ public function get_lists( $list_ids = array() ) {
 
166
  $args = array(
167
  'limit' => 100
168
  );
185
 
186
  /**
187
  * Get lists with their merge_vars for a given array of list id's
188
+ *
189
  * @param array $list_ids
190
  * @return array|boolean
191
  */
192
+ public function get_lists_with_merge_vars( $list_ids ) {
 
193
  $result = $this->call( 'lists/merge-vars', array('id' => $list_ids ) );
194
 
195
  if( is_object( $result ) && isset( $result->data ) ) {
204
  *
205
  * @param string $list_id
206
  * @param array $emails
207
+ * @return array|bool
208
  */
209
+ public function get_subscriber_info( $list_id, $emails ) {
210
+ $result = $this->call( 'lists/member-info', array(
211
+ 'id' => $list_id,
212
+ 'emails' => $emails
213
+ )
214
+ );
215
 
216
  if( is_object( $result ) && isset( $result->data ) ) {
217
  return $result->data;
220
  return false;
221
  }
222
 
223
+ /**
224
+ * @param $list_id
225
+ * @param array|string $email
226
+ * @param array $merge_vars
227
+ * @param string $email_type
228
+ * @param bool $replace_interests
229
+ *
230
+ * @return bool
231
+ */
232
+ public function update_subscriber( $list_id, $email, $merge_vars = array(), $email_type = 'html', $replace_interests = false ) {
233
+
234
+ // default to using email for updating
235
+ if( ! is_array( $email ) ) {
236
+ $email = array(
237
+ 'email' => $email
238
+ );
239
+ }
240
+
241
+ $result = $this->call( 'lists/update-member', array(
242
+ 'id' => $list_id,
243
+ 'email' => $email,
244
+ 'merge_vars' => $merge_vars,
245
+ 'email_type' => $email_type,
246
+ 'replace_interests' => $replace_interests
247
+ )
248
+ );
249
+
250
+ if( is_object( $result ) ) {
251
+
252
+ if( isset( $result->error ) ) {
253
+ $this->error_message = $result->error;
254
+ return false;
255
+ } else {
256
+ return true;
257
+ }
258
+
259
+ }
260
+
261
+ return false;
262
+ }
263
+
264
  /**
265
  * Checks if an email address is on a given list
266
  *
269
  * @return boolean
270
  */
271
  public function list_has_subscriber( $list_id, $email ) {
272
+ $member_info = $this->get_subscriber_info( $list_id, array( array( 'email' => $email ) ) );
273
 
274
  if( is_array( $member_info ) && isset( $member_info[0] ) ) {
275
+ return ( $member_info[0]->status === "subscribed" );
276
  }
277
 
278
  return false;
279
  }
280
 
281
  /**
282
+ * Unsubscribes the given email or luid from the given MailChimp list
283
  *
284
+ * @param string $list_id
285
+ * @param array|string $struct
286
+ * @param bool $delete_member
287
+ * @param bool $send_goodbye
288
+ * @param bool $send_notification
289
  *
290
  * @return bool
291
  */
292
+ public function unsubscribe( $list_id, $struct, $send_goodbye = true, $send_notification = false, $delete_member = false ) {
293
 
294
+ if( ! is_array( $struct ) ) {
295
+ // assume $struct is an email
296
+ $struct = array(
297
+ 'email' => $struct
298
+ );
299
+ }
300
+
301
+ $response = $this->call( 'lists/unsubscribe', array(
302
  'id' => $list_id,
303
+ 'email' => $struct,
304
+ 'delete_member' => $delete_member,
305
+ 'send_goodbye' => $send_goodbye,
306
+ 'send_notify' => $send_notification
307
  )
308
  );
309
 
310
+ if( is_object( $response ) ) {
311
 
312
+ if ( isset( $response->complete ) && $response->complete ) {
313
  return true;
314
  }
315
 
316
+ if( isset( $response->error ) ) {
317
+ $this->error_message = $response->error;
318
  }
319
  }
320
 
331
  *
332
  * @return object
333
  */
334
+ public function call( $method, array $data = array() ) {
 
335
  // do not make request when no api key was provided.
336
  if( empty( $this->api_key ) ) {
337
  return false;
361
  'msg' => "Everything's Chimpy!"
362
  );
363
  }
364
+
365
  $body = wp_remote_retrieve_body( $response );
366
+ $response = json_decode( $body );
367
+
368
+ // store response
369
+ if( is_object( $response ) ) {
370
+ $this->last_response = $response;
371
+ }
372
+
373
+ return $response;
374
  }
375
 
376
  /**
377
+ * Checks if an error occurred in the most recent API request
378
+ *
379
+ * @return bool
380
+ */
381
+ public function has_error() {
382
  return ( ! empty( $this->error_message ) );
383
  }
384
 
385
  /**
386
+ * Get the most recent error message
387
+ *
388
  * @return string
389
  */
390
+ public function get_error_message() {
 
391
  return $this->error_message;
392
  }
393
 
394
+ /**
395
+ * Get the most recent response object
396
+ *
397
+ * @return object
398
+ */
399
+ public function get_last_response() {
400
+ return $this->last_response;
401
+ }
402
+
403
  }
includes/class-form-manager.php CHANGED
@@ -149,24 +149,35 @@ class MC4WP_Lite_Form_Manager {
149
  // was this form submitted?
150
  $was_submitted = ( is_object( $this->form_request ) && $this->form_request->get_form_instance_number() === $this->form_instance_number );
151
 
152
- /**
153
- * @filter mc4wp_form_action
154
- * @expects string
155
- *
156
- * Sets the `action` attribute of the form element. Defaults to the current URL.
157
- */
158
- $form_action = apply_filters( 'mc4wp_form_action', mc4wp_get_current_url() );
159
-
160
  // Generate opening HTML
161
  $opening_html = "<!-- Form by MailChimp for WordPress plugin v". MC4WP_LITE_VERSION ." - https://mc4wp.com/ -->";
162
- $opening_html .= '<form method="post" action="'. $form_action .'" id="mc4wp-form-'.$this->form_instance_number.'" class="'. $this->get_css_classes() .'">';
163
 
164
  // Generate before & after fields HTML
 
 
 
 
 
 
 
 
 
165
  $before_fields = apply_filters( 'mc4wp_form_before_fields', '' );
166
  $after_fields = apply_filters( 'mc4wp_form_after_fields', '' );
167
 
168
  // Process fields, if not submitted or not successfull or hide_after_success disabled
169
  if( ! $was_submitted || ! $opts['hide_after_success'] || ! $this->form_request->is_successful() ) {
 
 
 
 
 
 
 
 
 
 
170
  // add form fields from settings
171
  $visible_fields = __( $opts['markup'], 'mailchimp-for-wp' );
172
 
@@ -194,9 +205,8 @@ class MC4WP_Lite_Form_Manager {
194
  $hidden_fields .= '<input type="hidden" name="_mc4wp_form_submit" value="1" />';
195
  $hidden_fields .= '<input type="hidden" name="_mc4wp_form_instance" value="'. $this->form_instance_number .'" />';
196
  $hidden_fields .= '<input type="hidden" name="_mc4wp_form_nonce" value="'. wp_create_nonce( '_mc4wp_form_nonce' ) .'" />';
197
- } else {
198
- $visible_fields = '';
199
- $hidden_fields = '';
200
  }
201
 
202
  // empty string for response
@@ -230,11 +240,11 @@ class MC4WP_Lite_Form_Manager {
230
 
231
  switch( $message_position ) {
232
  case 'before':
233
- $before_fields = $before_fields . $response_html;
234
  break;
235
 
236
  case 'after':
237
- $after_fields = $response_html . $after_fields;
238
  break;
239
  }
240
  }
@@ -245,8 +255,7 @@ class MC4WP_Lite_Form_Manager {
245
  $visible_fields = str_ireplace( '{response}', $response_html, $visible_fields );
246
 
247
  // Generate closing HTML
248
- $closing_html = "</form>";
249
- $closing_html .= "<!-- / MailChimp for WP Plugin -->";
250
 
251
  // increase form instance number in case there is more than one form on a page
252
  $this->form_instance_number++;
@@ -261,7 +270,7 @@ class MC4WP_Lite_Form_Manager {
261
  add_action( 'wp_footer', array( $this, 'print_js' ) );
262
 
263
  // concatenate and return the HTML parts
264
- return $opening_html . $before_fields . $visible_fields . $hidden_fields . $after_fields . $closing_html;
265
  }
266
 
267
  /**
149
  // was this form submitted?
150
  $was_submitted = ( is_object( $this->form_request ) && $this->form_request->get_form_instance_number() === $this->form_instance_number );
151
 
 
 
 
 
 
 
 
 
152
  // Generate opening HTML
153
  $opening_html = "<!-- Form by MailChimp for WordPress plugin v". MC4WP_LITE_VERSION ." - https://mc4wp.com/ -->";
154
+ $opening_html .= '<div id="mc4wp-form-' . $this->form_instance_number . '" class="' . $this->get_css_classes() . '">';
155
 
156
  // Generate before & after fields HTML
157
+ $before_form = apply_filters( 'mc4wp_form_before_form', '' );
158
+ $after_form = apply_filters( 'mc4wp_form_after_form', '' );
159
+
160
+ $form_opening_html = '';
161
+ $form_closing_html = '';
162
+
163
+ $visible_fields = '';
164
+ $hidden_fields = '';
165
+
166
  $before_fields = apply_filters( 'mc4wp_form_before_fields', '' );
167
  $after_fields = apply_filters( 'mc4wp_form_after_fields', '' );
168
 
169
  // Process fields, if not submitted or not successfull or hide_after_success disabled
170
  if( ! $was_submitted || ! $opts['hide_after_success'] || ! $this->form_request->is_successful() ) {
171
+
172
+ /**
173
+ * @filter mc4wp_form_action
174
+ * @expects string
175
+ *
176
+ * Sets the `action` attribute of the form element. Defaults to the current URL.
177
+ */
178
+ $form_action = apply_filters( 'mc4wp_form_action', mc4wp_get_current_url() );
179
+ $form_opening_html = '<form method="post" action="'. $form_action .'">';
180
+
181
  // add form fields from settings
182
  $visible_fields = __( $opts['markup'], 'mailchimp-for-wp' );
183
 
205
  $hidden_fields .= '<input type="hidden" name="_mc4wp_form_submit" value="1" />';
206
  $hidden_fields .= '<input type="hidden" name="_mc4wp_form_instance" value="'. $this->form_instance_number .'" />';
207
  $hidden_fields .= '<input type="hidden" name="_mc4wp_form_nonce" value="'. wp_create_nonce( '_mc4wp_form_nonce' ) .'" />';
208
+
209
+ $form_closing_html = '</form>';
 
210
  }
211
 
212
  // empty string for response
240
 
241
  switch( $message_position ) {
242
  case 'before':
243
+ $before_form = $before_form . $response_html;
244
  break;
245
 
246
  case 'after':
247
+ $after_form = $response_html . $after_form;
248
  break;
249
  }
250
  }
255
  $visible_fields = str_ireplace( '{response}', $response_html, $visible_fields );
256
 
257
  // Generate closing HTML
258
+ $closing_html = "</div><!-- / MailChimp for WP Plugin -->";
 
259
 
260
  // increase form instance number in case there is more than one form on a page
261
  $this->form_instance_number++;
270
  add_action( 'wp_footer', array( $this, 'print_js' ) );
271
 
272
  // concatenate and return the HTML parts
273
+ return $opening_html . $before_form . $form_opening_html . $before_fields . $visible_fields . $hidden_fields . $after_fields . $form_closing_html . $after_form . $closing_html;
274
  }
275
 
276
  /**
includes/class-widget.php CHANGED
@@ -70,7 +70,7 @@ class MC4WP_Lite_Widget extends WP_Widget {
70
  <input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>" />
71
  </p>
72
  <p class="help">
73
- <?php printf( __( 'You can edit your sign-up form in the %sMailChimp for WordPress form settings%s.', 'mailchimp-for-wp' ), '<a href="' . admin_url('admin.php?page=mc4wp-lite-form-settings') . '">', '</a>' ); ?>
74
  </p>
75
  <?php
76
  }
70
  <input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>" />
71
  </p>
72
  <p class="help">
73
+ <?php printf( __( 'You can edit your sign-up form in the %sMailChimp for WordPress form settings%s.', 'mailchimp-for-wp' ), '<a href="' . admin_url('admin.php?page=mailchimp-for-wp-form-settings') . '">', '</a>' ); ?>
74
  </p>
75
  <?php
76
  }
includes/integrations/class-integration.php CHANGED
@@ -231,7 +231,7 @@ abstract class MC4WP_Integration {
231
  if( $this->show_error_messages() ) {
232
  wp_die(
233
  '<h3>' . __( 'MailChimp for WordPress - Error', 'mailchimp-for-wp' ) . '</h3>' .
234
- '<p>' . sprintf( __( 'Please select a list to subscribe to in the <a href="%s">checkbox settings</a>.', 'mailchimp-for-wp' ), admin_url( 'admin.php?page=mc4wp-lite-checkbox-settings' ) ) . '</p>' .
235
  '<p style="font-style:italic; font-size:12px;">' . __( 'This message is only visible to administrators for debugging purposes.', 'mailchimp-for-wp' ) . '</p>',
236
  __( 'MailChimp for WordPress - Error', 'mailchimp-for-wp' ),
237
  array( 'back_link' => true )
231
  if( $this->show_error_messages() ) {
232
  wp_die(
233
  '<h3>' . __( 'MailChimp for WordPress - Error', 'mailchimp-for-wp' ) . '</h3>' .
234
+ '<p>' . sprintf( __( 'Please select a list to subscribe to in the <a href="%s">checkbox settings</a>.', 'mailchimp-for-wp' ), admin_url( 'admin.php?page=mailchimp-for-wp-checkbox-settings' ) ) . '</p>' .
235
  '<p style="font-style:italic; font-size:12px;">' . __( 'This message is only visible to administrators for debugging purposes.', 'mailchimp-for-wp' ) . '</p>',
236
  __( 'MailChimp for WordPress - Error', 'mailchimp-for-wp' ),
237
  array( 'back_link' => true )
includes/views/api-settings.php CHANGED
@@ -23,7 +23,7 @@ if( ! defined("MC4WP_LITE_VERSION") ) {
23
  <?php if($connected) { ?>
24
  <span class="status positive"><?php _e( 'CONNECTED' ,'mailchimp-for-wp' ); ?></span>
25
  <?php } else { ?>
26
- <span class="status negative"><?php _e( 'NOT CONNECTED', 'mailchimp-for-wp' ); ?></span>
27
  <?php } ?>
28
  </h3>
29
  <table class="form-table">
23
  <?php if($connected) { ?>
24
  <span class="status positive"><?php _e( 'CONNECTED' ,'mailchimp-for-wp' ); ?></span>
25
  <?php } else { ?>
26
+ <span class="status neutral"><?php _e( 'NOT CONNECTED', 'mailchimp-for-wp' ); ?></span>
27
  <?php } ?>
28
  </h3>
29
  <table class="form-table">
includes/views/checkbox-settings.php CHANGED
@@ -32,7 +32,7 @@ if( ! defined("MC4WP_LITE_VERSION") ) {
32
 
33
  <?php // loop through lists
34
  if( ! $lists || empty( $lists ) ) {
35
- ?><td colspan="2"><?php printf( __( 'No lists found, %sare you connected to MailChimp?%s', 'mailchimp-for-wp' ), '<a href="'. admin_url( 'admin.php?page=mc4wp-lite' ) .'">', '</a>' ); ?></td><?php
36
  } else { ?>
37
  <td class="nowrap">
38
  <?php foreach( $lists as $list ) {
32
 
33
  <?php // loop through lists
34
  if( ! $lists || empty( $lists ) ) {
35
+ ?><td colspan="2"><?php printf( __( 'No lists found, %sare you connected to MailChimp?%s', 'mailchimp-for-wp' ), '<a href="'. admin_url( 'admin.php?page=mailchimp-for-wp' ) .'">', '</a>' ); ?></td><?php
36
  } else { ?>
37
  <td class="nowrap">
38
  <?php foreach( $lists as $list ) {
includes/views/form-settings.php CHANGED
@@ -45,7 +45,7 @@ if( ! defined("MC4WP_LITE_VERSION") ) {
45
  <th scope="row"><?php _e( 'Lists this form subscribes to', 'mailchimp-for-wp' ); ?></th>
46
  <?php // loop through lists
47
  if( empty( $lists ) ) {
48
- ?><td colspan="2"><?php printf( __( 'No lists found, %sare you connected to MailChimp?%s', 'mailchimp-for-wp' ), '<a href="'. admin_url( 'admin.php?page=mc4wp-lite' ) .'">', '</a>' ); ?></td><?php
49
  } else { ?>
50
  <td>
51
 
45
  <th scope="row"><?php _e( 'Lists this form subscribes to', 'mailchimp-for-wp' ); ?></th>
46
  <?php // loop through lists
47
  if( empty( $lists ) ) {
48
+ ?><td colspan="2"><?php printf( __( 'No lists found, %sare you connected to MailChimp?%s', 'mailchimp-for-wp' ), '<a href="'. admin_url( 'admin.php?page=mailchimp-for-wp' ) .'">', '</a>' ); ?></td><?php
49
  } else { ?>
50
  <td>
51
 
includes/views/parts/admin-upgrade-to-pro.php CHANGED
@@ -10,5 +10,5 @@ if( ! defined("MC4WP_LITE_VERSION") ) {
10
 
11
  <p><em><?php _e( 'This plugin has an even better premium version, I am sure you will love it.', 'mailchimp-for-wp' ); ?></em></p>
12
  <p><?php _e( 'Pro features include better and multiple forms, advanced and easy form styling, more default themes, detailed statistics and priority support.', 'mailchimp-for-wp' ); ?></p>
13
- <p><a class="button-primary" href="https://mc4wp.com/#utm_source=lite-plugin&utm_medium=link&utm_campaign=upgrade-box"><?php _e( 'Upgrade Now', 'mailchimp-for-wp' ); ?> &raquo;</a></p>
14
  </div>
10
 
11
  <p><em><?php _e( 'This plugin has an even better premium version, I am sure you will love it.', 'mailchimp-for-wp' ); ?></em></p>
12
  <p><?php _e( 'Pro features include better and multiple forms, advanced and easy form styling, more default themes, detailed statistics and priority support.', 'mailchimp-for-wp' ); ?></p>
13
+ <p><a class="button button-primary button-large" href="https://mc4wp.com/#utm_source=lite-plugin&utm_medium=link&utm_campaign=upgrade-box"><?php _e( 'Upgrade Now', 'mailchimp-for-wp' ); ?> &raquo;</a></p>
14
  </div>
mailchimp-for-wp.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: MailChimp for WordPress Lite
4
  Plugin URI: https://mc4wp.com/
5
  Description: Lite version of MailChimp for WordPress. Adds various sign-up methods to your website.
6
- Version: 2.2.2
7
  Author: Danny van Kooten
8
  Author URI: https://dannyvankooten.com
9
  Text Domain: mailchimp-for-wp
@@ -47,7 +47,7 @@ function mc4wp_load_plugin() {
47
  }
48
 
49
  // bootstrap the lite plugin
50
- define( 'MC4WP_LITE_VERSION', '2.2.2' );
51
  define( 'MC4WP_LITE_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
52
  define( 'MC4WP_LITE_PLUGIN_URL', plugins_url( '/' , __FILE__ ) );
53
  define( 'MC4WP_LITE_PLUGIN_FILE', __FILE__ );
3
  Plugin Name: MailChimp for WordPress Lite
4
  Plugin URI: https://mc4wp.com/
5
  Description: Lite version of MailChimp for WordPress. Adds various sign-up methods to your website.
6
+ Version: 2.2.3
7
  Author: Danny van Kooten
8
  Author URI: https://dannyvankooten.com
9
  Text Domain: mailchimp-for-wp
47
  }
48
 
49
  // bootstrap the lite plugin
50
+ define( 'MC4WP_LITE_VERSION', '2.2.3' );
51
  define( 'MC4WP_LITE_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
52
  define( 'MC4WP_LITE_PLUGIN_URL', plugins_url( '/' , __FILE__ ) );
53
  define( 'MC4WP_LITE_PLUGIN_FILE', __FILE__ );
readme.txt CHANGED
@@ -1,14 +1,14 @@
1
  === MailChimp for WordPress ===
2
  Contributors: DvanKooten
3
  Donate link: https://mc4wp.com/
4
- Tags: mailchimp,newsletter,optin,mailinglist,sign-up form,subscribe,form,shortcode,widget,checkbox,comment,buddypress,multisite,bbpress,woocommerce,easy digital downloads,contact form,contact form 7,events manager,comment form,registration form,captcha
5
  Requires at least: 3.6
6
- Tested up to: 4.1
7
- Stable tag: 2.2.2
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
11
- The best MailChimp plugin to get more email subscribers. Easily add sign-up forms and sign-up checkboxes to your WordPress website.
12
 
13
  == Description ==
14
 
@@ -16,13 +16,13 @@ The best MailChimp plugin to get more email subscribers. Easily add sign-up form
16
 
17
  *Adding sign-up methods for your MailChimp lists to your WordPress site should be easy. With this plugin, it finally is.*
18
 
19
- MailChimp for WordPress lets you create a highly customizable sign-up form which you can display wherever you want it to display using a simple shortcode, widget or template function. You can also add sign-up checkboxes to various forms on your site, like your comment or contact forms.
20
 
21
- = Sign-Up Forms =
22
  Easily create sign-up forms for your MailChimp list and display it using a simple shortcode, a widget or PHP function.
23
 
24
  = Sign-Up Checkboxes =
25
- Add sign-up checkboxes to *any* form on your website. The plugin offers built-in integration with comment forms, registration forms, Contact Form 7, BuddyPress, bbPress and WordPress MultiSite.
26
 
27
  **MailChimp for WordPress, at a glance..**
28
 
@@ -45,6 +45,13 @@ Add sign-up checkboxes to *any* form on your website. The plugin offers built-in
45
  >
46
  > [Upgrade to MailChimp for WordPress Pro](https://mc4wp.com/features/#utm_source=wp-plugin-repo&utm_medium=link&utm_campaign=after-features-link)
47
 
 
 
 
 
 
 
 
48
  **Translations**
49
 
50
  New or improved [translations of the MailChimp for WordPress plugin are welcomed on Transifex](https://www.transifex.com/projects/p/mailchimp-for-wordpress/).
@@ -253,17 +260,21 @@ It's easy to translate the plugin into your own language. Head over to the [tran
253
 
254
  == Screenshots ==
255
 
256
- 1. Simple or advanced sign-up forms that blend in with your theme.
257
  2. A sign-up checkbox in your comment form is an amazing conversion booster.
258
  3. A simple form in the footer of the Twenty Thirteen theme.
259
  4. Add sign-up checkboxes to various places on your site.
260
- 5. Creating sign-up forms is easy. The Pro version allows you to create as many form as you like.
261
  6. Write your own HTML or have it generated for you. Many (optional) customization settings are availabl.
262
  7. **Pro only:** Gain valuable insights which method your visitors used to subscribe for any given time period using beautiful line charts.
263
  8. **Pro only:** Create your own CSS styles with the form designer in the Pro version.
264
 
265
  == Changelog ==
266
 
 
 
 
 
267
  = 2.2.2 - January 13, 2014 =
268
 
269
  **Fixes**
@@ -677,5 +688,6 @@ It's easy to translate the plugin into your own language. Head over to the [tran
677
 
678
  == Upgrade Notice ==
679
 
680
- = 2.2.2 =
681
- Fix for users on MailChimp server us10. Anti-spam improvements for checkbox integrations. Updated translations.
 
1
  === MailChimp for WordPress ===
2
  Contributors: DvanKooten
3
  Donate link: https://mc4wp.com/
4
+ Tags: MailChimp,newsletter,optin,mailinglist,sign-up form,subscribe,form,shortcode,widget,checkbox,comment,buddypress,multisite,bbpress,woocommerce,easy digital downloads,contact form,contact form 7,events manager,comment form,registration form,captcha
5
  Requires at least: 3.6
6
+ Tested up to: 4.1.1
7
+ Stable tag: 2.2.3
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
11
+ The best MailChimp plugin to get more email subscribers. Easily add MailChimp sign-up forms and sign-up checkboxes to your WordPress site.
12
 
13
  == Description ==
14
 
16
 
17
  *Adding sign-up methods for your MailChimp lists to your WordPress site should be easy. With this plugin, it finally is.*
18
 
19
+ MailChimp for WordPress lets you create a highly customizable sign-up form which you can display wherever you want it to display using a simple shortcode, widget or template function. You can also add MailChimp sign-up checkboxes to various forms on your site, like your comment or contact forms.
20
 
21
+ = MailChimp Sign-Up Forms =
22
  Easily create sign-up forms for your MailChimp list and display it using a simple shortcode, a widget or PHP function.
23
 
24
  = Sign-Up Checkboxes =
25
+ Add MailChimp sign-up checkboxes to *any* form on your website. The plugin offers built-in integration with comment forms, registration forms, Contact Form 7, BuddyPress, bbPress and WordPress MultiSite.
26
 
27
  **MailChimp for WordPress, at a glance..**
28
 
45
  >
46
  > [Upgrade to MailChimp for WordPress Pro](https://mc4wp.com/features/#utm_source=wp-plugin-repo&utm_medium=link&utm_campaign=after-features-link)
47
 
48
+ **Add-on plugins**
49
+
50
+ There are several add-on plugins available for MailChimp for WordPress, which help you get even more out of your site.
51
+
52
+ - [MailChimp Top Bar](https://wordpress.org/plugins/mailchimp-top-bar/) - Adds a top bar to your site, asking visitors to subscribe.
53
+ - [MailChimp Sync](https://wordpress.org/plugins/mailchimp-sync/) - Synchronizes your WordPress users with a MailChimp list.
54
+
55
  **Translations**
56
 
57
  New or improved [translations of the MailChimp for WordPress plugin are welcomed on Transifex](https://www.transifex.com/projects/p/mailchimp-for-wordpress/).
260
 
261
  == Screenshots ==
262
 
263
+ 1. Simple or advanced MailChimp sign-up forms that blend in with your theme.
264
  2. A sign-up checkbox in your comment form is an amazing conversion booster.
265
  3. A simple form in the footer of the Twenty Thirteen theme.
266
  4. Add sign-up checkboxes to various places on your site.
267
+ 5. Creating sign-up forms for your MailChimp lists is easy. The Pro version allows you to create as many form as you like.
268
  6. Write your own HTML or have it generated for you. Many (optional) customization settings are availabl.
269
  7. **Pro only:** Gain valuable insights which method your visitors used to subscribe for any given time period using beautiful line charts.
270
  8. **Pro only:** Create your own CSS styles with the form designer in the Pro version.
271
 
272
  == Changelog ==
273
 
274
+ = 2.2.3 - January 24, 2014 =
275
+
276
+ Minor improvements and additions for compatibility with the [MailChimp Sync plugin](https://wordpress.org/plugins/mailchimp-sync/).
277
+
278
  = 2.2.2 - January 13, 2014 =
279
 
280
  **Fixes**
688
 
689
  == Upgrade Notice ==
690
 
691
+ = 2.2.3 =
692
+
693
+ Minor improvements and additions for compatibility with the [MailChimp Sync plugin](https://wordpress.org/plugins/mailchimp-sync/).