Version Description
- Fixed an issue that prevented campaigns from showing on some custom taxononmy terms.
- Performance improvements when retrieving, and determining when to display, campaigns.
- All URLs updated to use HTTPS.
- Updated notifications.
Download this release
Release Info
Developer | griffinjt |
Plugin | Popups by OptinMonster – Best WordPress Lead Generation Plugin |
Version | 1.3.3 |
Comparing to | |
See all releases |
Code changes from version 1.3.2 to 1.3.3
- OMAPI/Content.php +1 -1
- OMAPI/Menu.php +4 -4
- OMAPI/Migration.php +0 -415
- OMAPI/Output.php +15 -20
- OMAPI/Welcome.php +1 -1
- assets/js/clipboard.min.js +0 -0
- assets/js/jspdf.min.js +0 -0
- includes/class-am-notification.php +1 -99
- optin-monster-wp-api.php +13 -12
- readme.txt +22 -16
OMAPI/Content.php
CHANGED
@@ -394,7 +394,7 @@ class OMAPI_Content {
|
|
394 |
public function migrate() {
|
395 |
?>
|
396 |
<p><?php _e( 'Your campaigns created within WordPress using the original OptinMonster plugin can be recreated manually in your OptinMonster account.', 'optin-monster-api' ); ?></p>
|
397 |
-
<p><a href="
|
398 |
<?php
|
399 |
}
|
400 |
|
394 |
public function migrate() {
|
395 |
?>
|
396 |
<p><?php _e( 'Your campaigns created within WordPress using the original OptinMonster plugin can be recreated manually in your OptinMonster account.', 'optin-monster-api' ); ?></p>
|
397 |
+
<p><a href="https://optinmonster.com/docs/old-wordpress-customers-migrating-to-the-new-optinmonster-app/"><?php _e( 'Read the full post about the changes.')?></a></p>
|
398 |
<?php
|
399 |
}
|
400 |
|
OMAPI/Menu.php
CHANGED
@@ -303,7 +303,7 @@ class OMAPI_Menu {
|
|
303 |
$plugins = get_plugins();
|
304 |
$active_plugins = get_option( 'active_plugins', array() );
|
305 |
$used_plugins = "\n";
|
306 |
-
$api_ping = wp_remote_request( '
|
307 |
foreach ( $plugins as $plugin_path => $plugin ) {
|
308 |
if ( ! in_array( $plugin_path, $active_plugins ) ) {
|
309 |
continue;
|
@@ -1159,7 +1159,7 @@ class OMAPI_Menu {
|
|
1159 |
$field ='';
|
1160 |
|
1161 |
$field .= '<div class="omapi-support-links ' . $setting . '"><h3>' . $title . '</h3><ul>';
|
1162 |
-
$field .= '<li><a target="_blank" href="' . esc_url( '
|
1163 |
$field .= '<li><a target="_blank" href="' . esc_url( 'https://wordpress.org/plugins/optinmonster/changelog/' ) . '">'. __('Changelog','optin-monster-api') . '</a></li>';
|
1164 |
$field .= '<li><a target="_blank" href="' . esc_url( 'https://app.optinmonster.com/account/support/' ) . '">'. __('Create a Support Ticket','optin-monster-api') . '</a></li>';
|
1165 |
$field .= '</ul></div>';
|
@@ -1431,7 +1431,7 @@ class OMAPI_Menu {
|
|
1431 |
|
1432 |
// Return the sas link if we have a sas ID
|
1433 |
if ( ! empty( $omSasId ) ) {
|
1434 |
-
return '
|
1435 |
. urlencode( trim( $omSasId ) )
|
1436 |
. '&b=601672&m=49337&afftrack=&urllink=optinmonster.com';
|
1437 |
}
|
@@ -1475,7 +1475,7 @@ class OMAPI_Menu {
|
|
1475 |
|
1476 |
// Return the trial link if we have a trial ID
|
1477 |
if ( ! empty( $omTrialId ) ) {
|
1478 |
-
return '
|
1479 |
. urlencode( trim( $omTrialId ) )
|
1480 |
. '&b=601672&m=49337&afftrack=&urllink=optinmonster.com%2Ffree-trial%2F%3Fid%3D' . urlencode( trim( $omTrialId ) );
|
1481 |
}
|
303 |
$plugins = get_plugins();
|
304 |
$active_plugins = get_option( 'active_plugins', array() );
|
305 |
$used_plugins = "\n";
|
306 |
+
$api_ping = wp_remote_request( 'https://api.optinmonster.com/v1/ping' );
|
307 |
foreach ( $plugins as $plugin_path => $plugin ) {
|
308 |
if ( ! in_array( $plugin_path, $active_plugins ) ) {
|
309 |
continue;
|
1159 |
$field ='';
|
1160 |
|
1161 |
$field .= '<div class="omapi-support-links ' . $setting . '"><h3>' . $title . '</h3><ul>';
|
1162 |
+
$field .= '<li><a target="_blank" href="' . esc_url( 'https://optinmonster.com/docs/' ) . '">'. __('Documentation','optin-monster-api') . '</a></li>';
|
1163 |
$field .= '<li><a target="_blank" href="' . esc_url( 'https://wordpress.org/plugins/optinmonster/changelog/' ) . '">'. __('Changelog','optin-monster-api') . '</a></li>';
|
1164 |
$field .= '<li><a target="_blank" href="' . esc_url( 'https://app.optinmonster.com/account/support/' ) . '">'. __('Create a Support Ticket','optin-monster-api') . '</a></li>';
|
1165 |
$field .= '</ul></div>';
|
1431 |
|
1432 |
// Return the sas link if we have a sas ID
|
1433 |
if ( ! empty( $omSasId ) ) {
|
1434 |
+
return 'https://www.shareasale.com/r.cfm?u='
|
1435 |
. urlencode( trim( $omSasId ) )
|
1436 |
. '&b=601672&m=49337&afftrack=&urllink=optinmonster.com';
|
1437 |
}
|
1475 |
|
1476 |
// Return the trial link if we have a trial ID
|
1477 |
if ( ! empty( $omTrialId ) ) {
|
1478 |
+
return 'https://www.shareasale.com/r.cfm?u='
|
1479 |
. urlencode( trim( $omTrialId ) )
|
1480 |
. '&b=601672&m=49337&afftrack=&urllink=optinmonster.com%2Ffree-trial%2F%3Fid%3D' . urlencode( trim( $omTrialId ) );
|
1481 |
}
|
OMAPI/Migration.php
DELETED
@@ -1,415 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Migration class.
|
4 |
-
*
|
5 |
-
* @since 1.0.0
|
6 |
-
*
|
7 |
-
* @package OMAPI
|
8 |
-
* @author Thomas Griffin
|
9 |
-
*/
|
10 |
-
class OMAPI_Migration {
|
11 |
-
|
12 |
-
/**
|
13 |
-
* Path to the file.
|
14 |
-
*
|
15 |
-
* @since 1.0.0
|
16 |
-
*
|
17 |
-
* @var string
|
18 |
-
*/
|
19 |
-
public $file = __FILE__;
|
20 |
-
|
21 |
-
/**
|
22 |
-
* Holds the base class object.
|
23 |
-
*
|
24 |
-
* @since 1.0.0
|
25 |
-
*
|
26 |
-
* @var OMAPI
|
27 |
-
*/
|
28 |
-
public $base;
|
29 |
-
|
30 |
-
/**
|
31 |
-
* The API class
|
32 |
-
*
|
33 |
-
* @since 1.0.0
|
34 |
-
*
|
35 |
-
* @var OMAPI_Api
|
36 |
-
*/
|
37 |
-
private $api;
|
38 |
-
|
39 |
-
/**
|
40 |
-
* Class constructor.
|
41 |
-
*
|
42 |
-
* @since 1.0.0
|
43 |
-
*/
|
44 |
-
public function __construct( OMAPI_Api $api ) {
|
45 |
-
|
46 |
-
$this->base = OMAPI::get_instance();
|
47 |
-
$this->api = $api;
|
48 |
-
$this->data = $this->gather_data();
|
49 |
-
|
50 |
-
}
|
51 |
-
|
52 |
-
/**
|
53 |
-
* Collects all of the data necessary to migrate
|
54 |
-
*
|
55 |
-
* @since 1.0.0
|
56 |
-
*
|
57 |
-
* @return array
|
58 |
-
*/
|
59 |
-
protected function gather_data() {
|
60 |
-
|
61 |
-
$data = array();
|
62 |
-
|
63 |
-
// Get site info
|
64 |
-
$data['site'] = $this->get_site();
|
65 |
-
|
66 |
-
// Get optins
|
67 |
-
$data['optins'] = $this->get_optins();
|
68 |
-
|
69 |
-
// Get integrations
|
70 |
-
$data['integrations'] = $this->get_integrations();
|
71 |
-
|
72 |
-
return $data;
|
73 |
-
|
74 |
-
}
|
75 |
-
|
76 |
-
/**
|
77 |
-
* Collects the site information and global settings
|
78 |
-
*
|
79 |
-
* @since 1.0.0
|
80 |
-
*
|
81 |
-
* @return array
|
82 |
-
*/
|
83 |
-
protected function get_site() {
|
84 |
-
|
85 |
-
$site = array();
|
86 |
-
|
87 |
-
// Get site name
|
88 |
-
$site['name'] = get_bloginfo( 'name' );
|
89 |
-
|
90 |
-
// Get site url
|
91 |
-
$site['url'] = site_url();
|
92 |
-
|
93 |
-
$site_options = get_option( 'optin_monster' );
|
94 |
-
|
95 |
-
// Return early if options were not found
|
96 |
-
if ( ! $site_options ) {
|
97 |
-
return $site;
|
98 |
-
}
|
99 |
-
|
100 |
-
// Setup site options
|
101 |
-
$site['global_cookie'] = isset( $site_options['cookie'] ) ? $site_options['cookie'] : 0;
|
102 |
-
$site['affiliate_link'] = isset( $site_options['affiliate_link'] ) ? $site_options['affiliate_link'] : '';
|
103 |
-
$site['affiliate_link_position'] = isset( $site_options['affiliate_link_position'] ) ? $site_options['affiliate_link_position'] : 'under';
|
104 |
-
|
105 |
-
return $this->escape_values( $site );
|
106 |
-
|
107 |
-
}
|
108 |
-
|
109 |
-
/**
|
110 |
-
* Collects all of the optins.
|
111 |
-
*
|
112 |
-
* Parent optins then split tests to ensure split tests
|
113 |
-
* can be assigned to an existing parent during migration.
|
114 |
-
*
|
115 |
-
* @since 1.0.0
|
116 |
-
*
|
117 |
-
* @return array
|
118 |
-
*/
|
119 |
-
protected function get_optins() {
|
120 |
-
|
121 |
-
// Get all the optins
|
122 |
-
$args = array(
|
123 |
-
'post_type' => 'optin',
|
124 |
-
'post_status' => 'publish',
|
125 |
-
'no_found_rows' => true,
|
126 |
-
'cache_results' => false,
|
127 |
-
'nopaging' => true,
|
128 |
-
'meta_query' => array(
|
129 |
-
array(
|
130 |
-
'key' => '_om_is_clone',
|
131 |
-
'compare' => 'NOT EXISTS',
|
132 |
-
'value' => '',
|
133 |
-
)
|
134 |
-
),
|
135 |
-
);
|
136 |
-
$optins = get_posts( $args );
|
137 |
-
|
138 |
-
// Return early if we don't find any optins
|
139 |
-
if ( empty( $optins ) ) {
|
140 |
-
return false;
|
141 |
-
}
|
142 |
-
|
143 |
-
// Get the split tests
|
144 |
-
foreach ( $optins as $optin ) {
|
145 |
-
$splits = $this->get_split_tests( $optin->ID );
|
146 |
-
|
147 |
-
if ( $splits ) {
|
148 |
-
foreach ( $splits as $split ) {
|
149 |
-
$optins[] = $split;
|
150 |
-
}
|
151 |
-
}
|
152 |
-
}
|
153 |
-
|
154 |
-
$migration_data = get_option( '_om_migration_data', array( 'migrated_optins' => array() ) );
|
155 |
-
foreach ( $optins as $key => $optin ) {
|
156 |
-
// Unset the optin if it has already been migrated
|
157 |
-
if ( in_array( $optin->ID, $migration_data['migrated_optins'] ) ) {
|
158 |
-
unset($optins[$key] );
|
159 |
-
continue;
|
160 |
-
}
|
161 |
-
|
162 |
-
// Add all of the meta info as WP_Post properties to simplify migration
|
163 |
-
$optin->split_note = get_post_meta( $optin->ID, '_om_split_notes', true );
|
164 |
-
$optin->has_clone = get_post_meta( $optin->ID, '_om_has_clone' );
|
165 |
-
$optin->is_clone = get_post_meta( $optin->ID, '_om_is_clone', true );
|
166 |
-
$optin->meta = get_post_meta( $optin->ID, '_om_meta' );
|
167 |
-
|
168 |
-
// Add the image as a property if needed
|
169 |
-
$image_id = get_post_meta( $optin->ID, '_thumbnail_id', true );
|
170 |
-
if ( $image_id ) {
|
171 |
-
$image = wp_get_attachment_metadata( $image_id );
|
172 |
-
$optin->image = array();
|
173 |
-
$optin->image['filename'] = basename( $image['file'] );
|
174 |
-
$optin->image['alt'] = get_post_meta( $image_id, '_wp_attachment_image_alt', true );
|
175 |
-
|
176 |
-
$file = file_get_contents( WP_CONTENT_DIR . '/uploads/' . $image['file'] );
|
177 |
-
$optin->image['data'] = base64_encode( $file );
|
178 |
-
}
|
179 |
-
}
|
180 |
-
|
181 |
-
// Return all the data
|
182 |
-
return $this->escape_values( $optins );
|
183 |
-
|
184 |
-
}
|
185 |
-
|
186 |
-
/**
|
187 |
-
* Pulls the integration info
|
188 |
-
*
|
189 |
-
* @since 1.0.0
|
190 |
-
*
|
191 |
-
* @return bool|array
|
192 |
-
*/
|
193 |
-
protected function get_integrations() {
|
194 |
-
|
195 |
-
$providers = get_option( 'optin_monster_providers' );
|
196 |
-
|
197 |
-
if ( ! $providers ) {
|
198 |
-
return array();
|
199 |
-
}
|
200 |
-
|
201 |
-
return $this->escape_values( $providers );
|
202 |
-
|
203 |
-
}
|
204 |
-
|
205 |
-
/**
|
206 |
-
* Runs the migration through OMAPI_Api
|
207 |
-
*
|
208 |
-
* @since 1.0.0
|
209 |
-
*
|
210 |
-
* @return bool
|
211 |
-
*/
|
212 |
-
public function run() {
|
213 |
-
|
214 |
-
$this->api->set_additional_data( $this->data );
|
215 |
-
$response = $this->api->request();
|
216 |
-
|
217 |
-
if ( is_wp_error( $response ) ) {
|
218 |
-
return false;
|
219 |
-
}
|
220 |
-
|
221 |
-
$migration_data = get_option( '_om_migration_data', array( 'migrated_optins' => array() ) );
|
222 |
-
$migration_data['errors'] = false;
|
223 |
-
if ( property_exists( $response, 'imported_optins' ) ) {
|
224 |
-
$migration_data['migrated_optins'] = array_merge( $migration_data['migrated_optins'], $response->imported_optins );
|
225 |
-
}
|
226 |
-
|
227 |
-
if ( property_exists( $response, 'integrations' ) ) {
|
228 |
-
$migration_data['integrations'] = $response->integrations;
|
229 |
-
}
|
230 |
-
|
231 |
-
if ( property_exists( $response, 'site' ) ) {
|
232 |
-
$migration_data['site'] = $response->site;
|
233 |
-
}
|
234 |
-
|
235 |
-
if ( property_exists( $response, 'errors' ) ) {
|
236 |
-
foreach ( $response->errors as $error ) {
|
237 |
-
$migration_data['errors'][] = $error;
|
238 |
-
}
|
239 |
-
}
|
240 |
-
|
241 |
-
if ( property_exists( $response, 'new_optins' ) && $response->new_optins ) {
|
242 |
-
foreach ( $response->new_optins as $slug => $optin ) {
|
243 |
-
// Maybe update an optin rather than add a new one.
|
244 |
-
$local = $this->base->get_optin_by_slug( $slug );
|
245 |
-
$data = array();
|
246 |
-
if ( $local ) {
|
247 |
-
$data['ID'] = $local->ID;
|
248 |
-
$data['post_title'] = $optin->title;
|
249 |
-
$data['post_content'] = $optin->output;
|
250 |
-
$data['post_status'] = 'publish';
|
251 |
-
wp_update_post( $data );
|
252 |
-
update_post_meta( $local->ID, '_omapi_type', $optin->type );
|
253 |
-
update_post_meta( $local->ID, '_omapi_ids', $optin->ids );
|
254 |
-
$post_id = $local->ID;
|
255 |
-
} else {
|
256 |
-
$data['post_name'] = $slug;
|
257 |
-
$data['post_title'] = $optin->title;
|
258 |
-
$data['post_excerpt'] = $optin->id;
|
259 |
-
$data['post_content'] = $optin->output;
|
260 |
-
$data['post_status'] = 'publish';
|
261 |
-
$data['post_type'] = 'omapi';
|
262 |
-
$post_id = wp_insert_post( $data );
|
263 |
-
update_post_meta( $post_id, '_omapi_type', $optin->type );
|
264 |
-
update_post_meta( $post_id, '_omapi_ids', $optin->ids );
|
265 |
-
}
|
266 |
-
|
267 |
-
// Now that the data has been saved, let's now try to grab meta from the previous optin for output settings.
|
268 |
-
$prev_optin = get_posts(
|
269 |
-
array(
|
270 |
-
'post_type' => 'optin',
|
271 |
-
'posts_per_page' => 1,
|
272 |
-
'no_found_rows' => true,
|
273 |
-
'cache_results' => false,
|
274 |
-
'name' => $slug
|
275 |
-
)
|
276 |
-
);
|
277 |
-
if ( empty( $prev_optin ) ) {
|
278 |
-
continue;
|
279 |
-
}
|
280 |
-
|
281 |
-
// Now grab all the meta for the optin.
|
282 |
-
$prev_optin = $prev_optin[0];
|
283 |
-
$meta = get_post_meta( $prev_optin->ID, '_om_meta', true );
|
284 |
-
$test = get_post_meta( $prev_optin->ID, '_om_test_mode', true );
|
285 |
-
$fields = $this->base->output->fields;
|
286 |
-
|
287 |
-
// Get all the new fields available and store the data.
|
288 |
-
foreach ( $fields as $field ) {
|
289 |
-
$value = false;
|
290 |
-
switch ( $field ) {
|
291 |
-
case 'enabled' :
|
292 |
-
$value = false; // Make sure the optins are disabled by default when being added back.
|
293 |
-
break;
|
294 |
-
case 'global' :
|
295 |
-
$value = isset( $meta['display']['global'] ) && $meta['display']['global'] ? true : false;
|
296 |
-
break;
|
297 |
-
case 'automatic' :
|
298 |
-
$value = isset( $meta['display']['automatic'] ) && $meta['display']['automatic'] ? true : false;
|
299 |
-
break;
|
300 |
-
case 'users' :
|
301 |
-
$value = isset( $meta['logged_in'] ) && $meta['logged_in'] ? 'out' : 'all';
|
302 |
-
break;
|
303 |
-
case 'never' :
|
304 |
-
$value = ! empty( $meta['display']['never'] ) ? $meta['display']['never'] : array();
|
305 |
-
break;
|
306 |
-
case 'only' :
|
307 |
-
$value = ! empty( $meta['display']['exclusive'] ) ? $meta['display']['exclusive'] : array();
|
308 |
-
break;
|
309 |
-
case 'categories' :
|
310 |
-
$value = ! empty( $meta['display']['categories'] ) ? $meta['display']['categories'] : array();
|
311 |
-
break;
|
312 |
-
case 'show' :
|
313 |
-
$value = ! empty( $meta['display']['show'] ) ? $meta['display']['show'] : array();
|
314 |
-
break;
|
315 |
-
case 'test' :
|
316 |
-
$value = $test ? true : false;
|
317 |
-
break;
|
318 |
-
case 'shortcode' :
|
319 |
-
$value = false;
|
320 |
-
break;
|
321 |
-
case 'mailpoet' :
|
322 |
-
$provider = isset( $meta['email']['provider'] ) ? $meta['email']['provider'] : 'none';
|
323 |
-
$value = 'mailpoet' == $provider ? true : false;
|
324 |
-
|
325 |
-
// If true, we need to set the MailPoet list as well.
|
326 |
-
if ( $value ) {
|
327 |
-
$list = isset( $meta['email']['list_id'] ) ? $meta['email']['list_id'] : false;
|
328 |
-
if ( $list ) {
|
329 |
-
update_post_meta( $post_id, '_omapi_mailpoet_list', $list );
|
330 |
-
}
|
331 |
-
}
|
332 |
-
break;
|
333 |
-
case 'type' :
|
334 |
-
case 'ids' :
|
335 |
-
$value = get_post_meta( $post_id, '_omapi_' . $field, true );
|
336 |
-
break;
|
337 |
-
}
|
338 |
-
update_post_meta( $post_id, '_omapi_' . $field, $value );
|
339 |
-
}
|
340 |
-
}
|
341 |
-
}
|
342 |
-
|
343 |
-
update_option( '_om_migration_data', $migration_data );
|
344 |
-
return true;
|
345 |
-
|
346 |
-
}
|
347 |
-
|
348 |
-
/**
|
349 |
-
* Pulls all split tests for a given optin
|
350 |
-
*
|
351 |
-
* @since 1.0.0
|
352 |
-
*
|
353 |
-
* @param $id
|
354 |
-
* @return array|bool
|
355 |
-
*/
|
356 |
-
private function get_split_tests( $id ) {
|
357 |
-
$optin = get_post( $id );
|
358 |
-
if ( ! $optin ) {
|
359 |
-
return false;
|
360 |
-
}
|
361 |
-
$clones = get_post_meta( $optin->ID, '_om_has_clone', true );
|
362 |
-
if ( empty( $clones ) ) {
|
363 |
-
return false;
|
364 |
-
}
|
365 |
-
// Return the split test objects.
|
366 |
-
$objects = array();
|
367 |
-
foreach ( $clones as $clone ) {
|
368 |
-
$objects[] = get_post( $clone );
|
369 |
-
}
|
370 |
-
|
371 |
-
return $objects;
|
372 |
-
}
|
373 |
-
|
374 |
-
/**
|
375 |
-
* Escapes all HTML in an optin to prevent insertion errors.
|
376 |
-
*
|
377 |
-
* @since 1.0.0
|
378 |
-
*
|
379 |
-
* @param array $data Array of data to escape.
|
380 |
-
* @return array $new_data Sanitized array of data.
|
381 |
-
*/
|
382 |
-
private function escape_values( $data = array() ) {
|
383 |
-
|
384 |
-
$new_data = array();
|
385 |
-
foreach ( $data as $key => $value ) {
|
386 |
-
if ( is_array( $value ) ) {
|
387 |
-
if ( is_array( $data ) ) {
|
388 |
-
unset( $data[ $key ] );
|
389 |
-
} else {
|
390 |
-
unset( $data->{$key} );
|
391 |
-
}
|
392 |
-
$new_data[ $key ] = $this->escape_values( $value );
|
393 |
-
} else if ( is_object( $value ) ) {
|
394 |
-
if ( is_array( $data ) ) {
|
395 |
-
unset( $data[ $key ] );
|
396 |
-
} else {
|
397 |
-
unset( $data->{$key} );
|
398 |
-
}
|
399 |
-
$new_data[ $key ] = (object) $this->escape_values( $value );
|
400 |
-
} else {
|
401 |
-
$new_val = is_string( $value ) ? esc_html( $value ) : $value;
|
402 |
-
$new_data[ $key ] = $new_val;
|
403 |
-
if ( is_array( $data ) ) {
|
404 |
-
unset( $data[ $key ] );
|
405 |
-
} else {
|
406 |
-
unset( $data->{$key} );
|
407 |
-
}
|
408 |
-
}
|
409 |
-
}
|
410 |
-
|
411 |
-
return $new_data;
|
412 |
-
|
413 |
-
}
|
414 |
-
|
415 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
OMAPI/Output.php
CHANGED
@@ -136,7 +136,7 @@ class OMAPI_Output {
|
|
136 |
public function set() {
|
137 |
|
138 |
self::$instance = $this;
|
139 |
-
$this->base
|
140 |
$this->fields = apply_filters( 'optin_monster_api_output_fields', $this->fields );
|
141 |
|
142 |
}
|
@@ -163,7 +163,7 @@ class OMAPI_Output {
|
|
163 |
*
|
164 |
* @since 1.0.0
|
165 |
*
|
166 |
-
* @param string $tag
|
167 |
* @param string $handle The script handle to target.
|
168 |
* @return string $tag Amended HTML script with our ID attribute appended.
|
169 |
*/
|
@@ -304,7 +304,7 @@ class OMAPI_Output {
|
|
304 |
}
|
305 |
}
|
306 |
$optins = $this->base->get_optins();
|
307 |
-
$fields
|
308 |
|
309 |
// If no optins are found, return early.
|
310 |
if ( ! $optins ) {
|
@@ -425,12 +425,13 @@ class OMAPI_Output {
|
|
425 |
}
|
426 |
}
|
427 |
|
428 |
-
$taxonomies = get_taxonomies( array( 'public' => true, '_builtin' => false ) );
|
429 |
-
$taxonomies['post_tag'] = 'post_tag';
|
430 |
-
$taxonomies['post_format'] = 'post_format';
|
431 |
-
$taxonomies = wp_get_object_terms( $post_id, $taxonomies, array( 'fields' => 'ids' ) );
|
432 |
foreach ( $fields['taxonomies'] as $taxonomy => $taxonomy_id ) {
|
433 |
-
|
|
|
|
|
|
|
|
|
|
|
434 |
foreach ( $tax_ids as $tax_id ) {
|
435 |
if ( $post_id && $tax_id && has_term( $tax_id, $taxonomy, $post_id ) ) {
|
436 |
$content .= $html;
|
@@ -786,21 +787,15 @@ class OMAPI_Output {
|
|
786 |
}
|
787 |
}
|
788 |
|
789 |
-
$taxonomies = get_taxonomies( array( 'public' => true, '_builtin' => false ) );
|
790 |
-
$taxonomies['post_tag'] = 'post_tag';
|
791 |
-
$taxonomies['post_format'] = 'post_format';
|
792 |
-
$taxonomies = wp_get_object_terms( $post_id, $taxonomies, array( 'fields' => 'ids' ) );
|
793 |
foreach ( $fields['taxonomies'] as $taxonomy => $taxonomy_id ) {
|
794 |
-
|
795 |
-
|
796 |
-
|
797 |
-
|
798 |
-
$this->set_slug( $optin );
|
799 |
-
continue 2;
|
800 |
-
}
|
801 |
}
|
|
|
802 |
foreach ( $tax_ids as $tax_id ) {
|
803 |
-
if ( is_tag($tax_id) ) {
|
804 |
$init[ $optin->post_name ] = $html;
|
805 |
$this->set_slug( $optin );
|
806 |
continue 2;
|
136 |
public function set() {
|
137 |
|
138 |
self::$instance = $this;
|
139 |
+
$this->base = OMAPI::get_instance();
|
140 |
$this->fields = apply_filters( 'optin_monster_api_output_fields', $this->fields );
|
141 |
|
142 |
}
|
163 |
*
|
164 |
* @since 1.0.0
|
165 |
*
|
166 |
+
* @param string $tag The HTML script output.
|
167 |
* @param string $handle The script handle to target.
|
168 |
* @return string $tag Amended HTML script with our ID attribute appended.
|
169 |
*/
|
304 |
}
|
305 |
}
|
306 |
$optins = $this->base->get_optins();
|
307 |
+
$fields = array();
|
308 |
|
309 |
// If no optins are found, return early.
|
310 |
if ( ! $optins ) {
|
425 |
}
|
426 |
}
|
427 |
|
|
|
|
|
|
|
|
|
428 |
foreach ( $fields['taxonomies'] as $taxonomy => $taxonomy_id ) {
|
429 |
+
if ( 'post_tag' === $taxonomy ) {
|
430 |
+
$tax_ids = wp_parse_id_list( $taxonomy_id[0] );
|
431 |
+
} else {
|
432 |
+
$tax_ids = wp_parse_id_list( $taxonomy_id );
|
433 |
+
}
|
434 |
+
|
435 |
foreach ( $tax_ids as $tax_id ) {
|
436 |
if ( $post_id && $tax_id && has_term( $tax_id, $taxonomy, $post_id ) ) {
|
437 |
$content .= $html;
|
787 |
}
|
788 |
}
|
789 |
|
|
|
|
|
|
|
|
|
790 |
foreach ( $fields['taxonomies'] as $taxonomy => $taxonomy_id ) {
|
791 |
+
if ( 'post_tag' === $taxonomy ) {
|
792 |
+
$tax_ids = wp_parse_id_list( $taxonomy_id[0] );
|
793 |
+
} else {
|
794 |
+
$tax_ids = wp_parse_id_list( $taxonomy_id );
|
|
|
|
|
|
|
795 |
}
|
796 |
+
|
797 |
foreach ( $tax_ids as $tax_id ) {
|
798 |
+
if ( $post_id && $tax_id && ( has_term( $tax_id, $taxonomy, $post_id ) || is_tag( $tax_id ) ) ) {
|
799 |
$init[ $optin->post_name ] = $html;
|
800 |
$this->set_slug( $optin );
|
801 |
continue 2;
|
OMAPI/Welcome.php
CHANGED
@@ -401,7 +401,7 @@ class OMAPI_Welcome {
|
|
401 |
public function footer( $text ) {
|
402 |
|
403 |
$new_text = sprintf( __( 'Thank you for using <a href="%1$s" target="_blank">OptinMonster</a>!', 'optin-monster-api' ),
|
404 |
-
'
|
405 |
);
|
406 |
return str_replace( '</span>', '', $text ) . ' | ' . $new_text . '</span>';
|
407 |
|
401 |
public function footer( $text ) {
|
402 |
|
403 |
$new_text = sprintf( __( 'Thank you for using <a href="%1$s" target="_blank">OptinMonster</a>!', 'optin-monster-api' ),
|
404 |
+
'https://optinmonster.com'
|
405 |
);
|
406 |
return str_replace( '</span>', '', $text ) . ' | ' . $new_text . '</span>';
|
407 |
|
assets/js/clipboard.min.js
CHANGED
File without changes
|
assets/js/jspdf.min.js
CHANGED
File without changes
|
includes/class-am-notification.php
CHANGED
@@ -41,24 +41,6 @@ if ( ! class_exists( 'AM_Notification' ) ) {
|
|
41 |
*/
|
42 |
public $plugin_version;
|
43 |
|
44 |
-
/**
|
45 |
-
* The list of installed plugins.
|
46 |
-
*
|
47 |
-
* @since 1.0.0
|
48 |
-
*
|
49 |
-
* @var array
|
50 |
-
*/
|
51 |
-
public $plugin_list = array();
|
52 |
-
|
53 |
-
/**
|
54 |
-
* The list of installed themes.
|
55 |
-
*
|
56 |
-
* @since 1.0.0
|
57 |
-
*
|
58 |
-
* @var string
|
59 |
-
*/
|
60 |
-
public $theme_list = array();
|
61 |
-
|
62 |
/**
|
63 |
* Flag if a notice has been registered.
|
64 |
*
|
@@ -123,9 +105,7 @@ if ( ! class_exists( 'AM_Notification' ) ) {
|
|
123 |
'body' => array(
|
124 |
'slug' => $this->plugin,
|
125 |
'version' => $this->plugin_version,
|
126 |
-
'last_notification' => $notification_id
|
127 |
-
'plugins' => $this->get_plugins_list(),
|
128 |
-
'themes' => $this->get_themes_list(),
|
129 |
),
|
130 |
) ) );
|
131 |
|
@@ -158,8 +138,6 @@ if ( ! class_exists( 'AM_Notification' ) ) {
|
|
158 |
update_post_meta( $new_notification_id, 'type', sanitize_text_field( trim( $data->type ) ) );
|
159 |
update_post_meta( $new_notification_id, 'dismissable', (bool) $data->dismissible ? 1 : 0 );
|
160 |
update_post_meta( $new_notification_id, 'location', function_exists( 'wp_json_encode' ) ? wp_json_encode( $data->location ) : json_encode( $data->location ) );
|
161 |
-
update_post_meta( $new_notification_id, 'plugins', function_exists( 'wp_json_encode' ) ? wp_json_encode( $data->plugins ) : json_encode( $data->plugins ) );
|
162 |
-
update_post_meta( $new_notification_id, 'theme', sanitize_text_field( trim( $data->theme ) ) );
|
163 |
update_post_meta( $new_notification_id, 'version', sanitize_text_field( trim( $data->version ) ) );
|
164 |
update_post_meta( $new_notification_id, 'viewed', 0 );
|
165 |
update_post_meta( $new_notification_id, 'expiration', $data->expiration ? absint( $data->expiration ) : false );
|
@@ -196,62 +174,6 @@ if ( ! class_exists( 'AM_Notification' ) ) {
|
|
196 |
);
|
197 |
}
|
198 |
|
199 |
-
/**
|
200 |
-
* Retrieve a list of plugins that are currently installed.
|
201 |
-
*
|
202 |
-
* @since 1.0.0
|
203 |
-
*
|
204 |
-
* @return array An array of plugins that are currently installed.
|
205 |
-
*/
|
206 |
-
public function get_plugins_list() {
|
207 |
-
if ( ! empty( $this->plugin_list ) ) {
|
208 |
-
return $this->plugin_list;
|
209 |
-
}
|
210 |
-
|
211 |
-
if ( ! function_exists( 'get_plugins' ) ) {
|
212 |
-
require_once ABSPATH . 'wp-admin/includes/plugin.php';
|
213 |
-
}
|
214 |
-
|
215 |
-
$plugins = get_plugins();
|
216 |
-
|
217 |
-
foreach ( $plugins as $slug => $plugin ) {
|
218 |
-
$this->plugin_list[ $slug ] = array(
|
219 |
-
'slug' => $slug,
|
220 |
-
'name' => $plugin['Name'],
|
221 |
-
'version' => $plugin['Version'],
|
222 |
-
'active' => is_plugin_active( $slug ),
|
223 |
-
);
|
224 |
-
}
|
225 |
-
|
226 |
-
return $this->plugin_list;
|
227 |
-
}
|
228 |
-
|
229 |
-
/**
|
230 |
-
* Retrieve a list of themes that are currently installed.
|
231 |
-
*
|
232 |
-
* @since 1.0.0
|
233 |
-
*
|
234 |
-
* @return array An array of themes that are currently installed.
|
235 |
-
*/
|
236 |
-
public function get_themes_list() {
|
237 |
-
if ( ! empty( $this->theme_list ) ) {
|
238 |
-
return $this->theme_list;
|
239 |
-
}
|
240 |
-
|
241 |
-
$themes = wp_get_themes();
|
242 |
-
|
243 |
-
foreach ( $themes as $slug => $theme ) {
|
244 |
-
$this->theme_list[ $slug ] = array(
|
245 |
-
'slug' => $slug,
|
246 |
-
'name' => $theme->Name,
|
247 |
-
'version' => $theme->Version,
|
248 |
-
'active' => (string) wp_get_theme() === $theme->Name,
|
249 |
-
);
|
250 |
-
}
|
251 |
-
|
252 |
-
return $this->theme_list;
|
253 |
-
}
|
254 |
-
|
255 |
/**
|
256 |
* Display any notifications that should be displayed.
|
257 |
*
|
@@ -425,26 +347,6 @@ if ( ! class_exists( 'AM_Notification' ) ) {
|
|
425 |
$key = MONSTERINSIGHTS_LICENSE_KEY;
|
426 |
}
|
427 |
break;
|
428 |
-
case 'sol' :
|
429 |
-
$option = get_option( 'soliloquy' );
|
430 |
-
$key = is_array( $option ) && isset( $option['key'] ) ? $option['key'] : '';
|
431 |
-
$level = is_array( $option ) && isset( $option['type'] ) ? $option['type'] : '';
|
432 |
-
|
433 |
-
// Possibly check for a constant.
|
434 |
-
if ( empty( $key ) && defined( 'SOLILOQUY_LICENSE_KEY' ) ) {
|
435 |
-
$key = SOLILOQUY_LICENSE_KEY;
|
436 |
-
}
|
437 |
-
break;
|
438 |
-
case 'envira' :
|
439 |
-
$option = get_option( 'envira_gallery' );
|
440 |
-
$key = is_array( $option ) && isset( $option['key'] ) ? $option['key'] : '';
|
441 |
-
$level = is_array( $option ) && isset( $option['type'] ) ? $option['type'] : '';
|
442 |
-
|
443 |
-
// Possibly check for a constant.
|
444 |
-
if ( empty( $key ) && defined( 'ENVIRA_LICENSE_KEY' ) ) {
|
445 |
-
$key = ENVIRA_LICENSE_KEY;
|
446 |
-
}
|
447 |
-
break;
|
448 |
case 'om' :
|
449 |
$option = get_option( 'optin_monster_api' );
|
450 |
$key = is_array( $option ) && isset( $option['api']['apikey'] ) ? $option['api']['apikey'] : '';
|
41 |
*/
|
42 |
public $plugin_version;
|
43 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
44 |
/**
|
45 |
* Flag if a notice has been registered.
|
46 |
*
|
105 |
'body' => array(
|
106 |
'slug' => $this->plugin,
|
107 |
'version' => $this->plugin_version,
|
108 |
+
'last_notification' => $notification_id
|
|
|
|
|
109 |
),
|
110 |
) ) );
|
111 |
|
138 |
update_post_meta( $new_notification_id, 'type', sanitize_text_field( trim( $data->type ) ) );
|
139 |
update_post_meta( $new_notification_id, 'dismissable', (bool) $data->dismissible ? 1 : 0 );
|
140 |
update_post_meta( $new_notification_id, 'location', function_exists( 'wp_json_encode' ) ? wp_json_encode( $data->location ) : json_encode( $data->location ) );
|
|
|
|
|
141 |
update_post_meta( $new_notification_id, 'version', sanitize_text_field( trim( $data->version ) ) );
|
142 |
update_post_meta( $new_notification_id, 'viewed', 0 );
|
143 |
update_post_meta( $new_notification_id, 'expiration', $data->expiration ? absint( $data->expiration ) : false );
|
174 |
);
|
175 |
}
|
176 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
177 |
/**
|
178 |
* Display any notifications that should be displayed.
|
179 |
*
|
347 |
$key = MONSTERINSIGHTS_LICENSE_KEY;
|
348 |
}
|
349 |
break;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
350 |
case 'om' :
|
351 |
$option = get_option( 'optin_monster_api' );
|
352 |
$key = is_array( $option ) && isset( $option['api']['apikey'] ) ? $option['api']['apikey'] : '';
|
optin-monster-wp-api.php
CHANGED
@@ -1,11 +1,11 @@
|
|
1 |
<?php
|
2 |
/**
|
3 |
* Plugin Name: OptinMonster API
|
4 |
-
* Plugin URI:
|
5 |
* Description: OptinMonster API plugin to connect your WordPress site to your OptinMonster account.
|
6 |
-
* Author:
|
7 |
-
* Author URI:
|
8 |
-
* Version:
|
9 |
* Text Domain: optin-monster-api
|
10 |
* Domain Path: languages
|
11 |
*
|
@@ -20,7 +20,7 @@
|
|
20 |
* GNU General Public License for more details.
|
21 |
*
|
22 |
* You should have received a copy of the GNU General Public License
|
23 |
-
* along with OptinMonster. If not, see <
|
24 |
*/
|
25 |
|
26 |
// Exit if accessed directly.
|
@@ -60,7 +60,7 @@ class OMAPI {
|
|
60 |
*
|
61 |
* @var string
|
62 |
*/
|
63 |
-
public $version = '1.3.
|
64 |
|
65 |
/**
|
66 |
* The name of the plugin.
|
@@ -142,7 +142,7 @@ class OMAPI {
|
|
142 |
public function init() {
|
143 |
|
144 |
// Define necessary plugin constants.
|
145 |
-
define( 'OPTINMONSTER_API', '
|
146 |
|
147 |
// Load our global option.
|
148 |
$this->load_option();
|
@@ -261,20 +261,21 @@ class OMAPI {
|
|
261 |
wp_parse_args(
|
262 |
$args,
|
263 |
array(
|
264 |
-
'
|
265 |
-
'
|
266 |
-
'
|
267 |
-
'
|
|
|
268 |
)
|
269 |
)
|
270 |
);
|
|
|
271 |
if ( empty( $optins ) ) {
|
272 |
return false;
|
273 |
}
|
274 |
|
275 |
// Return the optin data.
|
276 |
return $optins;
|
277 |
-
|
278 |
}
|
279 |
|
280 |
/**
|
1 |
<?php
|
2 |
/**
|
3 |
* Plugin Name: OptinMonster API
|
4 |
+
* Plugin URI: https://optinmonster.com
|
5 |
* Description: OptinMonster API plugin to connect your WordPress site to your OptinMonster account.
|
6 |
+
* Author: OptinMonster Team
|
7 |
+
* Author URI: https://optinmonster.com
|
8 |
+
* Version: 1.3.3
|
9 |
* Text Domain: optin-monster-api
|
10 |
* Domain Path: languages
|
11 |
*
|
20 |
* GNU General Public License for more details.
|
21 |
*
|
22 |
* You should have received a copy of the GNU General Public License
|
23 |
+
* along with OptinMonster. If not, see <https://www.gnu.org/licenses/>.
|
24 |
*/
|
25 |
|
26 |
// Exit if accessed directly.
|
60 |
*
|
61 |
* @var string
|
62 |
*/
|
63 |
+
public $version = '1.3.3';
|
64 |
|
65 |
/**
|
66 |
* The name of the plugin.
|
142 |
public function init() {
|
143 |
|
144 |
// Define necessary plugin constants.
|
145 |
+
define( 'OPTINMONSTER_API', 'https://a.optnmstr.com/app/js/api.min.js' );
|
146 |
|
147 |
// Load our global option.
|
148 |
$this->load_option();
|
261 |
wp_parse_args(
|
262 |
$args,
|
263 |
array(
|
264 |
+
'no_found_rows' => true,
|
265 |
+
'nopaging' => true,
|
266 |
+
'post_type' => 'omapi',
|
267 |
+
'posts_per_page' => -1,
|
268 |
+
'update_post_term_cache' => false,
|
269 |
)
|
270 |
)
|
271 |
);
|
272 |
+
|
273 |
if ( empty( $optins ) ) {
|
274 |
return false;
|
275 |
}
|
276 |
|
277 |
// Return the optin data.
|
278 |
return $optins;
|
|
|
279 |
}
|
280 |
|
281 |
/**
|
readme.txt
CHANGED
@@ -2,8 +2,9 @@
|
|
2 |
Contributors: optinmonster, griffinjt, smub
|
3 |
Tags: wordpress popup, popup, lightbox popup, mailchimp, aweber, campaign monitor, constant contact, exit-intent, madmimi, infusionsoft, getresponse, hubspot, marketo, activecampaign, pardot, totalsend, emma, icontact, mailerlite, mailpoet, google analytics, pop over, optin forms, email list, subscribers, wordpress popup form, lightbox, wordpress popups, popups, lightbox popups, optin form, wordpress optin form, sidebar optin form, sidebar optin, sidebar form, wordpress overlay popup, wordpress popup plugin, popup plugin, wordpress lightbox optin, wordpress lightbox optin form, after post optin form, wordpress after post optin form, after post optin form plugin, lightbox popup plugin, wordpress popup solution, exit intent, exit-intent, optinmonster, optin monster, optin-monster, mobile popup, mobile popups, mobile optin forms, mobile optins, lightbox optins, wordpress mobile popup, wordpress mobile popups, wordpress mobile optin forms, wordpress lightbox optins, lead gen, lead generation, wordpress lead generation, lead generation wordpress, wordpress lead gen, fullscreen, welcome gate, interstitial
|
4 |
Requires at least: 3.5.1
|
5 |
-
Tested up to: 4.
|
6 |
-
|
|
|
7 |
License: GNU General Public License v2.0 or later
|
8 |
|
9 |
OptinMonster helps you grow your email list by converting visitors into subscribers and customers. Get more email subscribers now!
|
@@ -11,10 +12,10 @@ OptinMonster helps you grow your email list by converting visitors into subscrib
|
|
11 |
== Description ==
|
12 |
|
13 |
= WordPress Popup Plugin =
|
14 |
-
Did you know that over 70% of website visitors who leave your website will never return? Why? Because most people find your blog, read, and leave (that's just a natural pattern). Wouldn't it be nice if you can convert some of those people to subscribe to your blog? That's where <a href="
|
15 |
|
16 |
> <strong>OptinMonster App</strong><br>
|
17 |
-
> OptinMonster is a standalone application that integrates with all web platforms including WordPress. You must have an OptinMonster account in order to take advantage of this plugin. <a href="
|
18 |
|
19 |
OptinMonster comes with an easy to use form builder that allows you to create beautiful optin forms that are proven to convert. You can create various type of campaigns including WordPress popup forms, floating header and footer bars, slide-ins also known as scroll triggered boxes, sidebar forms, after post forms, in-line forms, mobile-specific forms, welcome gates and more.
|
20 |
|
@@ -23,7 +24,7 @@ Using OptinMonster forms combined with our exit-intent technology, page-level ta
|
|
23 |
Let's take a look at how OptinMonster can help you get more email subscribers.
|
24 |
|
25 |
> <strong>OptinMonster App</strong><br>
|
26 |
-
> OptinMonster is a standalone application that integrates with all web platforms including WordPress. You must have an OptinMonster account in order to take advantage of this plugin. <a href="
|
27 |
|
28 |
= OptinMonster Builder + Optin Forms Templates =
|
29 |
|
@@ -43,7 +44,7 @@ You can also use custom HTML forms as well as use shortcodes to add other form p
|
|
43 |
|
44 |
= Powerful Exit-Intent® Technology =
|
45 |
|
46 |
-
OptinMonster is among the pioneers of <a href="
|
47 |
|
48 |
This allows you to re-engage the visitor and encourage them to subscribe. Exit-intent is proven to increase conversions.
|
49 |
|
@@ -60,7 +61,7 @@ Have you ever wondered what if you created a highly targeted message based on th
|
|
60 |
|
61 |
Well, we have tested it, and it works wonders. We liked the results so much that we built-it into OptinMonster.
|
62 |
|
63 |
-
OptinMonster's <a href="
|
64 |
|
65 |
This allows you to segment your email list and group your subscribers based on their interest and interaction with your website. Segmentation allows you to send relevant emails to your subscribers which results in higher open rates, higher click through rate, increased sales, greater revenue, greater customer retention, and lower unsubscribe rate.
|
66 |
|
@@ -73,7 +74,7 @@ Read how this helped one of our users:
|
|
73 |
|
74 |
A/B testing is one of the most desired features, but normally it is extremely hard to setup for beginners. Well, we changed that.
|
75 |
|
76 |
-
OptinMonster's easy <a href="
|
77 |
|
78 |
You can try different content, headlines, layouts, styles, and opt-in triggers, to see what converts best.
|
79 |
|
@@ -82,11 +83,11 @@ You can try different content, headlines, layouts, styles, and opt-in triggers,
|
|
82 |
|
83 |
= Detailed Conversion Analytics =
|
84 |
|
85 |
-
Most people don't know what to do with analytics because they don't understand them. OptinMonster's <a href="
|
86 |
|
87 |
= MonsterLinks™ - 2 Step Opt-in Technology =
|
88 |
|
89 |
-
<a href="
|
90 |
|
91 |
= Full Features List =
|
92 |
|
@@ -106,7 +107,7 @@ Most people don't know what to do with analytics because they don't understand t
|
|
106 |
* Canvas popup forms - use Canvas to add facebook like box, WooCommerce products, or anything else that you like.
|
107 |
* MonsterEffects™ technology for eye-catching popup animations.
|
108 |
* Success messages and redirects
|
109 |
-
* Easy integration with over
|
110 |
|
111 |
|
112 |
= Credits =
|
@@ -117,7 +118,6 @@ This plugin is created by <a href="https://thomasgriffin.io" rel="friend" title=
|
|
117 |
|
118 |
If you like this plugin, then consider checking out our other projects:
|
119 |
|
120 |
-
* <a href="http://enviragallery.com/" rel="friend" title="Envira Gallery">Envira Gallery</a> - Responsive WordPress Gallery Plugin
|
121 |
* <a href="https://wpforms.com/" rel="friend" title="WPForms">WPForms</a> - Best WordPress Contact Form Plugin
|
122 |
* <a href="https://www.monsterinsights.com/" rel="friend" title="MonsterInsights">MonsterInsights</a> - Best Google Analytics Plugin for WordPress
|
123 |
|
@@ -125,7 +125,7 @@ Visit WPBeginner to learn from our <a href="http://www.wpbeginner.com/category/w
|
|
125 |
|
126 |
= Press & Brand Assets =
|
127 |
|
128 |
-
If you are interested in writing about OptinMonster, then we have have prepared a <a href="
|
129 |
|
130 |
When mentioning OptinMonster please know that OptinMonster is one word with a Capital O and M.
|
131 |
|
@@ -144,14 +144,14 @@ OptinMonster® and Exit-Intent® are registered trademarks of Retyp, LLC.
|
|
144 |
|
145 |
= I downloaded this plugin but don't have an OptinMonster account. How can I get one? =
|
146 |
|
147 |
-
You can sign up for an OptinMonster account by <a href="
|
148 |
|
149 |
== Screenshots ==
|
150 |
|
151 |
|
152 |
== Notes ==
|
153 |
|
154 |
-
OptinMonster is the <a href="
|
155 |
|
156 |
= Testimonial =
|
157 |
|
@@ -160,8 +160,14 @@ OptinMonster is the <a href="http://optinmonster.com" rel="friend" title="OptinM
|
|
160 |
|
161 |
== Changelog ==
|
162 |
|
|
|
|
|
|
|
|
|
|
|
|
|
163 |
= 1.3.2 =
|
164 |
-
* Fixed issue where campaigns of an "advanced age" may not work
|
165 |
|
166 |
= 1.3.1 =
|
167 |
* Fixed missing files in WordPress.org repository.
|
2 |
Contributors: optinmonster, griffinjt, smub
|
3 |
Tags: wordpress popup, popup, lightbox popup, mailchimp, aweber, campaign monitor, constant contact, exit-intent, madmimi, infusionsoft, getresponse, hubspot, marketo, activecampaign, pardot, totalsend, emma, icontact, mailerlite, mailpoet, google analytics, pop over, optin forms, email list, subscribers, wordpress popup form, lightbox, wordpress popups, popups, lightbox popups, optin form, wordpress optin form, sidebar optin form, sidebar optin, sidebar form, wordpress overlay popup, wordpress popup plugin, popup plugin, wordpress lightbox optin, wordpress lightbox optin form, after post optin form, wordpress after post optin form, after post optin form plugin, lightbox popup plugin, wordpress popup solution, exit intent, exit-intent, optinmonster, optin monster, optin-monster, mobile popup, mobile popups, mobile optin forms, mobile optins, lightbox optins, wordpress mobile popup, wordpress mobile popups, wordpress mobile optin forms, wordpress lightbox optins, lead gen, lead generation, wordpress lead generation, lead generation wordpress, wordpress lead gen, fullscreen, welcome gate, interstitial
|
4 |
Requires at least: 3.5.1
|
5 |
+
Tested up to: 4.9.2
|
6 |
+
Requires PHP: 5.2.4
|
7 |
+
Stable tag: 1.3.3
|
8 |
License: GNU General Public License v2.0 or later
|
9 |
|
10 |
OptinMonster helps you grow your email list by converting visitors into subscribers and customers. Get more email subscribers now!
|
12 |
== Description ==
|
13 |
|
14 |
= WordPress Popup Plugin =
|
15 |
+
Did you know that over 70% of website visitors who leave your website will never return? Why? Because most people find your blog, read, and leave (that's just a natural pattern). Wouldn't it be nice if you can convert some of those people to subscribe to your blog? That's where <a href="https://optinmonster.com" rel="friend" title="OptinMonster">OptinMonster</a> can help. OptinMonster helps you grow your email list and get more subscribers with popup and other types of high converting optin forms.
|
16 |
|
17 |
> <strong>OptinMonster App</strong><br>
|
18 |
+
> OptinMonster is a standalone application that integrates with all web platforms including WordPress. You must have an OptinMonster account in order to take advantage of this plugin. <a href="https://optinmonster.com/pricing/" rel="friend" title="OptinMonster Plans">Click here to create your account.</a>
|
19 |
|
20 |
OptinMonster comes with an easy to use form builder that allows you to create beautiful optin forms that are proven to convert. You can create various type of campaigns including WordPress popup forms, floating header and footer bars, slide-ins also known as scroll triggered boxes, sidebar forms, after post forms, in-line forms, mobile-specific forms, welcome gates and more.
|
21 |
|
24 |
Let's take a look at how OptinMonster can help you get more email subscribers.
|
25 |
|
26 |
> <strong>OptinMonster App</strong><br>
|
27 |
+
> OptinMonster is a standalone application that integrates with all web platforms including WordPress. You must have an OptinMonster account in order to take advantage of this plugin. <a href="https://optinmonster.com/pricing/" rel="friend" title="OptinMonster Plans">Click here to create your account.</a>
|
28 |
|
29 |
= OptinMonster Builder + Optin Forms Templates =
|
30 |
|
44 |
|
45 |
= Powerful Exit-Intent® Technology =
|
46 |
|
47 |
+
OptinMonster is among the pioneers of <a href="https://optinmonster.com/features/exit-intent/" rel="friend" title="Exit-Intent Technology">exit-intent technology</a>. It helps you track user's mouse behavior and prompt them with a targeted message at the precise moment they are about to leave.
|
48 |
|
49 |
This allows you to re-engage the visitor and encourage them to subscribe. Exit-intent is proven to increase conversions.
|
50 |
|
61 |
|
62 |
Well, we have tested it, and it works wonders. We liked the results so much that we built-it into OptinMonster.
|
63 |
|
64 |
+
OptinMonster's <a href="https://optinmonster.com/features/page-level-targeting/" rel="friend" title="Page Level Targeting">page level targeting module</a> allows you to display unique offers and campaigns based on visitor's location and interaction on your website.
|
65 |
|
66 |
This allows you to segment your email list and group your subscribers based on their interest and interaction with your website. Segmentation allows you to send relevant emails to your subscribers which results in higher open rates, higher click through rate, increased sales, greater revenue, greater customer retention, and lower unsubscribe rate.
|
67 |
|
74 |
|
75 |
A/B testing is one of the most desired features, but normally it is extremely hard to setup for beginners. Well, we changed that.
|
76 |
|
77 |
+
OptinMonster's easy <a href="https://optinmonster.com/features/easy-ab-split-testing/" rel="friend" title="A/B split testing">A/B split testing</a> module helps you eliminate the guess work and make data-driven decisions on what works best.
|
78 |
|
79 |
You can try different content, headlines, layouts, styles, and opt-in triggers, to see what converts best.
|
80 |
|
83 |
|
84 |
= Detailed Conversion Analytics =
|
85 |
|
86 |
+
Most people don't know what to do with analytics because they don't understand them. OptinMonster's <a href="https://optinmonster.com/features/conversion-analytics/" rel="friend" title="conversion analytics">conversion analytics</a> is easy to understand and give you the stats that matter, so you can take action to improve your lead-generation strategy.
|
87 |
|
88 |
= MonsterLinks™ - 2 Step Opt-in Technology =
|
89 |
|
90 |
+
<a href="https://optinmonster.com/features/monsterlinks/" rel="friend" title="MonsterLinks">MonsterLinks</a> allow you to turn any link or image into a 2-step opt-in process which is proven to boost conversions by as much as 785%. Marketers use it to offer content upgrades and then use OptinMonster's success redirect feature for lead-magnet delivery.
|
91 |
|
92 |
= Full Features List =
|
93 |
|
107 |
* Canvas popup forms - use Canvas to add facebook like box, WooCommerce products, or anything else that you like.
|
108 |
* MonsterEffects™ technology for eye-catching popup animations.
|
109 |
* Success messages and redirects
|
110 |
+
* Easy integration with over 25 different email marketing service providers
|
111 |
|
112 |
|
113 |
= Credits =
|
118 |
|
119 |
If you like this plugin, then consider checking out our other projects:
|
120 |
|
|
|
121 |
* <a href="https://wpforms.com/" rel="friend" title="WPForms">WPForms</a> - Best WordPress Contact Form Plugin
|
122 |
* <a href="https://www.monsterinsights.com/" rel="friend" title="MonsterInsights">MonsterInsights</a> - Best Google Analytics Plugin for WordPress
|
123 |
|
125 |
|
126 |
= Press & Brand Assets =
|
127 |
|
128 |
+
If you are interested in writing about OptinMonster, then we have have prepared a <a href="https://optinmonster.com/press/" rel="friend" title="OptinMonster Press Page">Press & Brand Assets page</a> where you can download our logo, screenshots, and other relevant assets.
|
129 |
|
130 |
When mentioning OptinMonster please know that OptinMonster is one word with a Capital O and M.
|
131 |
|
144 |
|
145 |
= I downloaded this plugin but don't have an OptinMonster account. How can I get one? =
|
146 |
|
147 |
+
You can sign up for an OptinMonster account by <a href="https://optinmonster.com/pricing/" rel="friend" title="OptinMonster Plans and Pricing">visiting our Pricing page</a> and choosing the account that best suits your needs.
|
148 |
|
149 |
== Screenshots ==
|
150 |
|
151 |
|
152 |
== Notes ==
|
153 |
|
154 |
+
OptinMonster is the <a href="https://optinmonster.com" rel="friend" title="OptinMonster">best WordPress lead generation and WordPress popup plugin solution</a> on the market. No other WordPress popup plugin or WordPress optin form solution compares to OptinMonster and features it offers.
|
155 |
|
156 |
= Testimonial =
|
157 |
|
160 |
|
161 |
== Changelog ==
|
162 |
|
163 |
+
= 1.3.3 =
|
164 |
+
* Fixed an issue that prevented campaigns from showing on some custom taxononmy terms.
|
165 |
+
* Performance improvements when retrieving, and determining when to display, campaigns.
|
166 |
+
* All URLs updated to use HTTPS.
|
167 |
+
* Updated notifications.
|
168 |
+
|
169 |
= 1.3.2 =
|
170 |
+
* Fixed issue where campaigns of an "advanced age" may not work in the plugin.
|
171 |
|
172 |
= 1.3.1 =
|
173 |
* Fixed missing files in WordPress.org repository.
|