Version Description
Download this release
Release Info
Developer | rohitrpatil |
Plugin | WooCommerce Cart Abandonment Recovery |
Version | 1.2.3 |
Comparing to | |
See all releases |
Code changes from version 1.2.2 to 1.2.3
- admin/assets/js/admin-email-templates.js +2 -1
- changelog.txt +7 -0
- classes/class-cartflows-ca-loader.php +1 -1
- languages/woo-cart-abandonment-recovery.pot +49 -44
- modules/cart-abandonment/class-cartflows-ca-cart-abandonment-table.php +22 -10
- modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php +21 -19
- modules/cart-abandonment/includes/admin/cartflows-ca-single-report-details.php +1 -1
- readme.txt +10 -2
- woo-cart-abandonment-recovery.php +1 -1
admin/assets/js/admin-email-templates.js
CHANGED
@@ -251,7 +251,8 @@
|
|
251 |
"checkout_url": window.location.origin + "/checkout/?wcf_ac_token=something",
|
252 |
"coupon_code": "abcgefgh",
|
253 |
"product_names": "Product1, Product2 & Product3",
|
254 |
-
"cart_total": wcf_ca_details.woo_currency_symbol + "20"
|
|
|
255 |
};
|
256 |
$.ajax({
|
257 |
url: zapier_webhook_url,
|
251 |
"checkout_url": window.location.origin + "/checkout/?wcf_ac_token=something",
|
252 |
"coupon_code": "abcgefgh",
|
253 |
"product_names": "Product1, Product2 & Product3",
|
254 |
+
"cart_total": wcf_ca_details.woo_currency_symbol + "20",
|
255 |
+
"product_table": '<table align= left; cellpadding="10" cellspacing="0" style="float: none; border: 1px solid #e5e5e5;"> <tr align="center"> <th style="color: #636363; border: 1px solid #e5e5e5;">Item</th> <th style="color: #636363; border: 1px solid #e5e5e5;">Name</th> <th style="color: #636363; border: 1px solid #e5e5e5;">Quantity</th> <th style="color: #636363; border: 1px solid #e5e5e5;">Price</th> <th style="color: #636363; border: 1px solid #e5e5e5;">Line Subtotal</th> </tr> <tr style=color: #636363; border: 1px solid #e5e5e5; align="center"> <td style="color: #636363; border: 1px solid #e5e5e5;"><img class="demo_img" style="height: 42px; width: 42px;" src="http://localhost/wp-local/wp-content/uploads/2019/11/wGdyS_Zgz1A.jpg"></td> <td style="color: #636363; border: 1px solid #e5e5e5;">Product1</td> <td style="color: #636363; border: 1px solid #e5e5e5;"> 1 </td> <td style="color: #636363; border: 1px solid #e5e5e5;">£85.00</td> <td style="color: #636363; border: 1px solid #e5e5e5;" >£85.00</td> </tr> </table>'
|
256 |
};
|
257 |
$.ajax({
|
258 |
url: zapier_webhook_url,
|
changelog.txt
CHANGED
@@ -1,3 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
Version 1.2.2 - Tuesday, 12th November 2019
|
2 |
- Fix: Duplicate order issue for variation products.
|
3 |
|
1 |
+
Version 1.2.3 - Thursday, 12th December 2019
|
2 |
+
- New: Added option to unsubscribe users in bulk.
|
3 |
+
- New: Added filter 'woo_ca_exclude_on_hold_order_from_tracking' to exclude on hold orders from the tracking.
|
4 |
+
- New: Added product table shortcode for webhook.
|
5 |
+
- Improvement: Updated filter 'woo_ca_email_template_table_style' for product table alignment.
|
6 |
+
- Fix: Sometimes test emails are not sending.
|
7 |
+
|
8 |
Version 1.2.2 - Tuesday, 12th November 2019
|
9 |
- Fix: Duplicate order issue for variation products.
|
10 |
|
classes/class-cartflows-ca-loader.php
CHANGED
@@ -78,7 +78,7 @@ if ( ! class_exists( 'CARTFLOWS_CA_Loader' ) ) {
|
|
78 |
define( 'CARTFLOWS_CA_BASE', plugin_basename( CARTFLOWS_CA_FILE ) );
|
79 |
define( 'CARTFLOWS_CA_DIR', plugin_dir_path( CARTFLOWS_CA_FILE ) );
|
80 |
define( 'CARTFLOWS_CA_URL', plugins_url( '/', CARTFLOWS_CA_FILE ) );
|
81 |
-
define( 'CARTFLOWS_CA_VER', '1.2.
|
82 |
define( 'CARTFLOWS_CA_SLUG', 'cartflows_ca' );
|
83 |
|
84 |
define( 'CARTFLOWS_CA_CART_ABANDONMENT_TABLE', 'cartflows_ca_cart_abandonment' );
|
78 |
define( 'CARTFLOWS_CA_BASE', plugin_basename( CARTFLOWS_CA_FILE ) );
|
79 |
define( 'CARTFLOWS_CA_DIR', plugin_dir_path( CARTFLOWS_CA_FILE ) );
|
80 |
define( 'CARTFLOWS_CA_URL', plugins_url( '/', CARTFLOWS_CA_FILE ) );
|
81 |
+
define( 'CARTFLOWS_CA_VER', '1.2.3' );
|
82 |
define( 'CARTFLOWS_CA_SLUG', 'cartflows_ca' );
|
83 |
|
84 |
define( 'CARTFLOWS_CA_CART_ABANDONMENT_TABLE', 'cartflows_ca_cart_abandonment' );
|
languages/woo-cart-abandonment-recovery.pot
CHANGED
@@ -2,10 +2,10 @@
|
|
2 |
# This file is distributed under the same license as the WooCommerce Cart Abandonment Recovery package.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
-
"Project-Id-Version: WooCommerce Cart Abandonment Recovery 1.2.
|
6 |
"Report-Msgid-Bugs-To: "
|
7 |
"https://wordpress.org/support/plugin/woo-cart-abandonment-recovery\n"
|
8 |
-
"POT-Creation-Date: 2019-
|
9 |
"MIME-Version: 1.0\n"
|
10 |
"Content-Type: text/plain; charset=utf-8\n"
|
11 |
"Content-Transfer-Encoding: 8bit\n"
|
@@ -228,146 +228,147 @@ msgid "View"
|
|
228 |
msgstr ""
|
229 |
|
230 |
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment-table.php:70
|
231 |
-
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:
|
|
|
232 |
msgid "Unsubscribe"
|
233 |
msgstr ""
|
234 |
|
235 |
-
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment-table.php:
|
236 |
-
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:
|
237 |
-
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:
|
238 |
#: modules/cart-abandonment/includes/admin/cartflows-ca-single-report-details.php:173
|
239 |
msgid "Name"
|
240 |
msgstr ""
|
241 |
|
242 |
-
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment-table.php:
|
243 |
msgid "Email"
|
244 |
msgstr ""
|
245 |
|
246 |
-
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment-table.php:
|
247 |
-
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:
|
248 |
msgid "Cart Total"
|
249 |
msgstr ""
|
250 |
|
251 |
-
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment-table.php:
|
252 |
msgid "Order Status"
|
253 |
msgstr ""
|
254 |
|
255 |
-
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment-table.php:
|
256 |
msgid "Time"
|
257 |
msgstr ""
|
258 |
|
259 |
-
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:
|
260 |
-
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:
|
261 |
msgid "This order was abandoned & subsequently recovered."
|
262 |
msgstr ""
|
263 |
|
264 |
-
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:
|
265 |
msgid "Mail has been sent successfully!"
|
266 |
msgstr ""
|
267 |
|
268 |
-
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:
|
269 |
msgid "Mail sending failed!"
|
270 |
msgstr ""
|
271 |
|
272 |
-
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:
|
273 |
msgid "Every Fifteen Minutes"
|
274 |
msgstr ""
|
275 |
|
276 |
-
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:
|
277 |
msgid "You have successfully unsubscribed from our email list."
|
278 |
msgstr ""
|
279 |
|
280 |
-
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:
|
281 |
#: modules/cart-abandonment/includes/admin/cartflows-ca-single-report-details.php:164
|
282 |
msgid "Unsubscribed"
|
283 |
msgstr ""
|
284 |
|
285 |
-
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:
|
286 |
msgid ""
|
287 |
"This checkout page is generated by WooCommerce Cart Abandonment Recovery "
|
288 |
"plugin from test mail."
|
289 |
msgstr ""
|
290 |
|
291 |
-
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:
|
292 |
msgid "No Thanks"
|
293 |
msgstr ""
|
294 |
|
295 |
-
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:
|
296 |
msgid "You won't receive further emails from us, thank you!"
|
297 |
msgstr ""
|
298 |
|
299 |
-
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:
|
300 |
-
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:
|
301 |
msgid "Cart Abandonment"
|
302 |
msgstr ""
|
303 |
|
304 |
-
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:
|
305 |
msgid "Items deleted: %d"
|
306 |
msgstr ""
|
307 |
|
308 |
-
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:
|
309 |
-
msgid "User unsubscribed successfully!"
|
310 |
msgstr ""
|
311 |
|
312 |
-
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:
|
313 |
msgid ""
|
314 |
"Do you really want to delete the used and expired coupons created by Cart "
|
315 |
"Abandonment Plugin?"
|
316 |
msgstr ""
|
317 |
|
318 |
-
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:
|
319 |
msgid "Report"
|
320 |
msgstr ""
|
321 |
|
322 |
-
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:
|
323 |
msgid "Follow-Up Emails"
|
324 |
msgstr ""
|
325 |
|
326 |
-
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:
|
327 |
msgid "Settings"
|
328 |
msgstr ""
|
329 |
|
330 |
-
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:
|
331 |
msgid "there"
|
332 |
msgstr ""
|
333 |
|
334 |
-
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:
|
335 |
msgid "Cart Total ( Cart Total + Shipping + Tax )"
|
336 |
msgstr ""
|
337 |
|
338 |
-
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:
|
339 |
-
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:
|
340 |
msgid "Item"
|
341 |
msgstr ""
|
342 |
|
343 |
-
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:
|
344 |
-
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:
|
345 |
msgid "Quantity"
|
346 |
msgstr ""
|
347 |
|
348 |
-
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:
|
349 |
-
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:
|
350 |
msgid "Price"
|
351 |
msgstr ""
|
352 |
|
353 |
-
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:
|
354 |
-
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:
|
355 |
msgid "Line Subtotal"
|
356 |
msgstr ""
|
357 |
|
358 |
-
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:
|
359 |
msgid "Discount"
|
360 |
msgstr ""
|
361 |
|
362 |
-
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:
|
363 |
msgid "Other"
|
364 |
msgstr ""
|
365 |
|
366 |
-
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:
|
367 |
msgid "Shipping"
|
368 |
msgstr ""
|
369 |
|
370 |
-
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:
|
371 |
#. translators: %1$s: Coupons Deleted, %2$s: Deleted coupons count'.
|
372 |
msgid "%1$s: %2$d"
|
373 |
msgstr ""
|
@@ -601,6 +602,10 @@ msgstr ""
|
|
601 |
msgid "Close"
|
602 |
msgstr ""
|
603 |
|
|
|
|
|
|
|
|
|
604 |
#: modules/cart-abandonment/includes/admin/cartflows-ca-single-report-details.php:69
|
605 |
msgid "Reschedule Emails"
|
606 |
msgstr ""
|
2 |
# This file is distributed under the same license as the WooCommerce Cart Abandonment Recovery package.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
+
"Project-Id-Version: WooCommerce Cart Abandonment Recovery 1.2.3\n"
|
6 |
"Report-Msgid-Bugs-To: "
|
7 |
"https://wordpress.org/support/plugin/woo-cart-abandonment-recovery\n"
|
8 |
+
"POT-Creation-Date: 2019-12-12 05:59:07+00:00\n"
|
9 |
"MIME-Version: 1.0\n"
|
10 |
"Content-Type: text/plain; charset=utf-8\n"
|
11 |
"Content-Transfer-Encoding: 8bit\n"
|
228 |
msgstr ""
|
229 |
|
230 |
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment-table.php:70
|
231 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment-table.php:122
|
232 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1682
|
233 |
msgid "Unsubscribe"
|
234 |
msgstr ""
|
235 |
|
236 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment-table.php:189
|
237 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1825
|
238 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1879
|
239 |
#: modules/cart-abandonment/includes/admin/cartflows-ca-single-report-details.php:173
|
240 |
msgid "Name"
|
241 |
msgstr ""
|
242 |
|
243 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment-table.php:190
|
244 |
msgid "Email"
|
245 |
msgstr ""
|
246 |
|
247 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment-table.php:191
|
248 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1901
|
249 |
msgid "Cart Total"
|
250 |
msgstr ""
|
251 |
|
252 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment-table.php:192
|
253 |
msgid "Order Status"
|
254 |
msgstr ""
|
255 |
|
256 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment-table.php:193
|
257 |
msgid "Time"
|
258 |
msgstr ""
|
259 |
|
260 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:133
|
261 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:941
|
262 |
msgid "This order was abandoned & subsequently recovered."
|
263 |
msgstr ""
|
264 |
|
265 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:154
|
266 |
msgid "Mail has been sent successfully!"
|
267 |
msgstr ""
|
268 |
|
269 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:156
|
270 |
msgid "Mail sending failed!"
|
271 |
msgstr ""
|
272 |
|
273 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:196
|
274 |
msgid "Every Fifteen Minutes"
|
275 |
msgstr ""
|
276 |
|
277 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:262
|
278 |
msgid "You have successfully unsubscribed from our email list."
|
279 |
msgstr ""
|
280 |
|
281 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:262
|
282 |
#: modules/cart-abandonment/includes/admin/cartflows-ca-single-report-details.php:164
|
283 |
msgid "Unsubscribed"
|
284 |
msgstr ""
|
285 |
|
286 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:417
|
287 |
msgid ""
|
288 |
"This checkout page is generated by WooCommerce Cart Abandonment Recovery "
|
289 |
"plugin from test mail."
|
290 |
msgstr ""
|
291 |
|
292 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:459
|
293 |
msgid "No Thanks"
|
294 |
msgstr ""
|
295 |
|
296 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:460
|
297 |
msgid "You won't receive further emails from us, thank you!"
|
298 |
msgstr ""
|
299 |
|
300 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1096
|
301 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1097
|
302 |
msgid "Cart Abandonment"
|
303 |
msgstr ""
|
304 |
|
305 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1130
|
306 |
msgid "Items deleted: %d"
|
307 |
msgstr ""
|
308 |
|
309 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1147
|
310 |
+
msgid "User(s) unsubscribed successfully!"
|
311 |
msgstr ""
|
312 |
|
313 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1199
|
314 |
msgid ""
|
315 |
"Do you really want to delete the used and expired coupons created by Cart "
|
316 |
"Abandonment Plugin?"
|
317 |
msgstr ""
|
318 |
|
319 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1357
|
320 |
msgid "Report"
|
321 |
msgstr ""
|
322 |
|
323 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1373
|
324 |
msgid "Follow-Up Emails"
|
325 |
msgstr ""
|
326 |
|
327 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1389
|
328 |
msgid "Settings"
|
329 |
msgstr ""
|
330 |
|
331 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1643
|
332 |
msgid "there"
|
333 |
msgstr ""
|
334 |
|
335 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1817
|
336 |
msgid "Cart Total ( Cart Total + Shipping + Tax )"
|
337 |
msgstr ""
|
338 |
|
339 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1824
|
340 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1878
|
341 |
msgid "Item"
|
342 |
msgstr ""
|
343 |
|
344 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1826
|
345 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1880
|
346 |
msgid "Quantity"
|
347 |
msgstr ""
|
348 |
|
349 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1827
|
350 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1881
|
351 |
msgid "Price"
|
352 |
msgstr ""
|
353 |
|
354 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1828
|
355 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1882
|
356 |
msgid "Line Subtotal"
|
357 |
msgstr ""
|
358 |
|
359 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1888
|
360 |
msgid "Discount"
|
361 |
msgstr ""
|
362 |
|
363 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1892
|
364 |
msgid "Other"
|
365 |
msgstr ""
|
366 |
|
367 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1897
|
368 |
msgid "Shipping"
|
369 |
msgstr ""
|
370 |
|
371 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:2045
|
372 |
#. translators: %1$s: Coupons Deleted, %2$s: Deleted coupons count'.
|
373 |
msgid "%1$s: %2$d"
|
374 |
msgstr ""
|
602 |
msgid "Close"
|
603 |
msgstr ""
|
604 |
|
605 |
+
#: modules/cart-abandonment/includes/admin/cartflows-ca-single-report-details.php:69
|
606 |
+
msgid "Do you really want to reschedule emails?"
|
607 |
+
msgstr ""
|
608 |
+
|
609 |
#: modules/cart-abandonment/includes/admin/cartflows-ca-single-report-details.php:69
|
610 |
msgid "Reschedule Emails"
|
611 |
msgstr ""
|
modules/cart-abandonment/class-cartflows-ca-cart-abandonment-table.php
CHANGED
@@ -117,6 +117,11 @@ class Cartflows_Ca_Cart_Abandonment_Table extends WP_List_Table {
|
|
117 |
$actions = array(
|
118 |
'delete' => __( 'Delete', 'woo-cart-abandonment-recovery' ),
|
119 |
);
|
|
|
|
|
|
|
|
|
|
|
120 |
return $actions;
|
121 |
}
|
122 |
|
@@ -213,19 +218,26 @@ class Cartflows_Ca_Cart_Abandonment_Table extends WP_List_Table {
|
|
213 |
global $wpdb;
|
214 |
$table_name = $wpdb->prefix . CARTFLOWS_CA_CART_ABANDONMENT_TABLE;
|
215 |
|
216 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
217 |
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
|
|
225 |
|
226 |
-
if ( ! empty( $ids ) ) {
|
227 |
-
$wpdb->query("DELETE FROM $table_name WHERE id IN($ids)"); // phpcs:ignore
|
228 |
}
|
229 |
}
|
|
|
230 |
}
|
231 |
}
|
117 |
$actions = array(
|
118 |
'delete' => __( 'Delete', 'woo-cart-abandonment-recovery' ),
|
119 |
);
|
120 |
+
|
121 |
+
if ( ! isset( $_GET['filter_table'] ) || ( isset( $_GET['filter_table'] ) && WCF_CART_ABANDONED_ORDER === $_GET['filter_table'] ) ) {
|
122 |
+
$actions['unsubscribe'] = __( 'Unsubscribe', 'woo-cart-abandonment-recovery' );
|
123 |
+
}
|
124 |
+
|
125 |
return $actions;
|
126 |
}
|
127 |
|
218 |
global $wpdb;
|
219 |
$table_name = $wpdb->prefix . CARTFLOWS_CA_CART_ABANDONMENT_TABLE;
|
220 |
|
221 |
+
$ids = array();
|
222 |
+
if ( isset( $_REQUEST['id'] ) && is_array( $_REQUEST['id'] ) ) {
|
223 |
+
$ids = array_map( 'intval', $_REQUEST['id'] );
|
224 |
+
} elseif ( isset( $_REQUEST['id'] ) ) {
|
225 |
+
$ids = array( intval( $_REQUEST['id'] ) );
|
226 |
+
}
|
227 |
+
$ids = implode( ',', $ids );
|
228 |
+
if ( ! empty( $ids ) ) {
|
229 |
|
230 |
+
switch ( $this->current_action() ) {
|
231 |
+
|
232 |
+
case 'delete':
|
233 |
+
$wpdb->query("DELETE FROM $table_name WHERE id IN($ids)"); // phpcs:ignore
|
234 |
+
break;
|
235 |
+
case 'unsubscribe':
|
236 |
+
$wpdb->query( "UPDATE {$table_name} SET unsubscribed = 1 WHERE id IN($ids)" ); // phpcs:ignore
|
237 |
+
break;
|
238 |
|
|
|
|
|
239 |
}
|
240 |
}
|
241 |
+
|
242 |
}
|
243 |
}
|
modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php
CHANGED
@@ -102,6 +102,11 @@ class Cartflows_Ca_Cart_Abandonment {
|
|
102 |
|
103 |
$acceptable_order_statuses = array( 'completed', 'processing', 'failed' );
|
104 |
|
|
|
|
|
|
|
|
|
|
|
105 |
if ( ( WCF_CART_FAILED_ORDER === $new_order_status ) ) {
|
106 |
return;
|
107 |
}
|
@@ -500,7 +505,7 @@ class Cartflows_Ca_Cart_Abandonment {
|
|
500 |
$orders = wc_get_orders(
|
501 |
array(
|
502 |
'billing_email' => $email_data->email,
|
503 |
-
'status' =>
|
504 |
'date_after' => date(
|
505 |
'Y-m-d h:i:s',
|
506 |
strtotime( '-30 days' )
|
@@ -512,13 +517,9 @@ class Cartflows_Ca_Cart_Abandonment {
|
|
512 |
foreach ( $orders as $order ) {
|
513 |
$order = wc_get_order( $order->get_id() );
|
514 |
$items = $order->get_items();
|
515 |
-
|
516 |
-
|
517 |
-
|
518 |
-
$product_id = $item_data->get_product()->get_id();
|
519 |
-
|
520 |
if ( in_array( $product_id, $current_products, true ) ) {
|
521 |
-
|
522 |
/**
|
523 |
* Remove duplicate captured order for tracking.
|
524 |
*/
|
@@ -651,6 +652,7 @@ class Cartflows_Ca_Cart_Abandonment {
|
|
651 |
$trigger_details['coupon_code'] = $checkout_details->coupon_code;
|
652 |
$trigger_details['order_status'] = $order_status;
|
653 |
$trigger_details['cart_total'] = $checkout_details->cart_total;
|
|
|
654 |
|
655 |
$parameters = http_build_query( $trigger_details );
|
656 |
$args = array(
|
@@ -1141,8 +1143,8 @@ class Cartflows_Ca_Cart_Abandonment {
|
|
1141 |
array( 'unsubscribed' => true ),
|
1142 |
array( 'id' => $id )
|
1143 |
);
|
1144 |
-
|
1145 |
-
$message = '<div class="notice notice-success is-dismissible" id="message"><p>' . sprintf( __( 'User unsubscribed successfully!', 'woo-cart-abandonment-recovery' ) ) . '</p></div>'; // phpcs:ignore
|
1146 |
set_transient( 'wcf_ca_show_message', $message, 5 );
|
1147 |
if ( isset( $_SERVER['HTTP_REFERER'] ) ) {
|
1148 |
wp_safe_redirect( $_SERVER['HTTP_REFERER'] );
|
@@ -1528,7 +1530,6 @@ class Cartflows_Ca_Cart_Abandonment {
|
|
1528 |
$current_time = current_time( WCF_CA_DATETIME_FORMAT );
|
1529 |
// phpcs:disable WordPress.DB.PreparedSQL.NotPrepared
|
1530 |
$emails_send_to = $wpdb->get_results(
|
1531 |
-
|
1532 |
$wpdb->prepare(
|
1533 |
'SELECT *, EHT.id as email_history_id, ETT.id as email_template_id FROM ' . $email_history_table . ' as EHT
|
1534 |
INNER JOIN ' . $cart_abandonment_table . ' as CAT ON EHT.`ca_session_id` = CAT.`session_id`
|
@@ -1626,9 +1627,10 @@ class Cartflows_Ca_Cart_Abandonment {
|
|
1626 |
}
|
1627 |
|
1628 |
if ( filter_var( $email_data->email, FILTER_VALIDATE_EMAIL ) ) {
|
1629 |
-
|
1630 |
-
|
1631 |
-
|
|
|
1632 |
}
|
1633 |
|
1634 |
$other_fields = unserialize( $email_data->other_fields );
|
@@ -1780,13 +1782,14 @@ class Cartflows_Ca_Cart_Abandonment {
|
|
1780 |
'style' => 'height: 42px; width: 42px;',
|
1781 |
),
|
1782 |
'table' => array(
|
1783 |
-
'style'
|
|
|
1784 |
),
|
1785 |
);
|
1786 |
|
1787 |
-
$
|
1788 |
-
$product_image_style = isset( $
|
1789 |
-
$style = isset( $
|
1790 |
|
1791 |
foreach ( $cart_items as $cart_item ) {
|
1792 |
|
@@ -1816,7 +1819,7 @@ class Cartflows_Ca_Cart_Abandonment {
|
|
1816 |
</tr> ';
|
1817 |
}
|
1818 |
|
1819 |
-
return '<table
|
1820 |
<tr align="center">
|
1821 |
<th style="' . $style . '">' . __( 'Item', 'woo-cart-abandonment-recovery' ) . '</th>
|
1822 |
<th style="' . $style . '">' . __( 'Name', 'woo-cart-abandonment-recovery' ) . '</th>
|
@@ -1825,7 +1828,6 @@ class Cartflows_Ca_Cart_Abandonment {
|
|
1825 |
<th style="' . $style . '">' . __( 'Line Subtotal', 'woo-cart-abandonment-recovery' ) . '</th>
|
1826 |
</tr> ' . $tr . '
|
1827 |
</table>';
|
1828 |
-
|
1829 |
}
|
1830 |
|
1831 |
/**
|
102 |
|
103 |
$acceptable_order_statuses = array( 'completed', 'processing', 'failed' );
|
104 |
|
105 |
+
$exclude_on_hold_order = apply_filters( 'woo_ca_exclude_on_hold_order_from_tracking', false );
|
106 |
+
|
107 |
+
if ( $exclude_on_hold_order ) {
|
108 |
+
array_push( $acceptable_order_statuses, 'on-hold' );
|
109 |
+
}
|
110 |
if ( ( WCF_CART_FAILED_ORDER === $new_order_status ) ) {
|
111 |
return;
|
112 |
}
|
505 |
$orders = wc_get_orders(
|
506 |
array(
|
507 |
'billing_email' => $email_data->email,
|
508 |
+
'status' => array( 'processing', 'completed' ),
|
509 |
'date_after' => date(
|
510 |
'Y-m-d h:i:s',
|
511 |
strtotime( '-30 days' )
|
517 |
foreach ( $orders as $order ) {
|
518 |
$order = wc_get_order( $order->get_id() );
|
519 |
$items = $order->get_items();
|
520 |
+
foreach ( $items as $item ) {
|
521 |
+
$product_id = $item->get_product_id();
|
|
|
|
|
|
|
522 |
if ( in_array( $product_id, $current_products, true ) ) {
|
|
|
523 |
/**
|
524 |
* Remove duplicate captured order for tracking.
|
525 |
*/
|
652 |
$trigger_details['coupon_code'] = $checkout_details->coupon_code;
|
653 |
$trigger_details['order_status'] = $order_status;
|
654 |
$trigger_details['cart_total'] = $checkout_details->cart_total;
|
655 |
+
$trigger_details['product_table'] = $this->get_email_product_block( $checkout_details->cart_contents, $checkout_details->cart_total );
|
656 |
|
657 |
$parameters = http_build_query( $trigger_details );
|
658 |
$args = array(
|
1143 |
array( 'unsubscribed' => true ),
|
1144 |
array( 'id' => $id )
|
1145 |
);
|
1146 |
+
$wcf_list_table->process_bulk_action();
|
1147 |
+
$message = '<div class="notice notice-success is-dismissible" id="message"><p>' . sprintf( __( 'User(s) unsubscribed successfully!', 'woo-cart-abandonment-recovery' ) ) . '</p></div>'; // phpcs:ignore
|
1148 |
set_transient( 'wcf_ca_show_message', $message, 5 );
|
1149 |
if ( isset( $_SERVER['HTTP_REFERER'] ) ) {
|
1150 |
wp_safe_redirect( $_SERVER['HTTP_REFERER'] );
|
1530 |
$current_time = current_time( WCF_CA_DATETIME_FORMAT );
|
1531 |
// phpcs:disable WordPress.DB.PreparedSQL.NotPrepared
|
1532 |
$emails_send_to = $wpdb->get_results(
|
|
|
1533 |
$wpdb->prepare(
|
1534 |
'SELECT *, EHT.id as email_history_id, ETT.id as email_template_id FROM ' . $email_history_table . ' as EHT
|
1535 |
INNER JOIN ' . $cart_abandonment_table . ' as CAT ON EHT.`ca_session_id` = CAT.`session_id`
|
1627 |
}
|
1628 |
|
1629 |
if ( filter_var( $email_data->email, FILTER_VALIDATE_EMAIL ) ) {
|
1630 |
+
if ( ! $preview_email ) {
|
1631 |
+
if ( ! $this->check_if_already_purchased_by_email_product_ids( $email_data, $email_data->cart_contents ) ) {
|
1632 |
+
return false;
|
1633 |
+
}
|
1634 |
}
|
1635 |
|
1636 |
$other_fields = unserialize( $email_data->other_fields );
|
1782 |
'style' => 'height: 42px; width: 42px;',
|
1783 |
),
|
1784 |
'table' => array(
|
1785 |
+
'style' => 'color: #636363; border: 1px solid #e5e5e5;',
|
1786 |
+
'attribute' => 'align= left;',
|
1787 |
),
|
1788 |
);
|
1789 |
|
1790 |
+
$style_filter = apply_filters( 'woo_ca_email_template_table_style', $style );
|
1791 |
+
$product_image_style = isset( $style_filter['product_image']['style'] ) ? $style_filter['product_image']['style'] : '';
|
1792 |
+
$style = isset( $style_filter['table']['style'] ) ? $style_filter['table']['style'] : '';
|
1793 |
|
1794 |
foreach ( $cart_items as $cart_item ) {
|
1795 |
|
1819 |
</tr> ';
|
1820 |
}
|
1821 |
|
1822 |
+
return '<table ' . $style_filter['table']['attribute'] . ' cellpadding="10" cellspacing="0" style="float: none; border: 1px solid #e5e5e5;">
|
1823 |
<tr align="center">
|
1824 |
<th style="' . $style . '">' . __( 'Item', 'woo-cart-abandonment-recovery' ) . '</th>
|
1825 |
<th style="' . $style . '">' . __( 'Name', 'woo-cart-abandonment-recovery' ) . '</th>
|
1828 |
<th style="' . $style . '">' . __( 'Line Subtotal', 'woo-cart-abandonment-recovery' ) . '</th>
|
1829 |
</tr> ' . $tr . '
|
1830 |
</table>';
|
|
|
1831 |
}
|
1832 |
|
1833 |
/**
|
modules/cart-abandonment/includes/admin/cartflows-ca-single-report-details.php
CHANGED
@@ -66,7 +66,7 @@
|
|
66 |
</p>
|
67 |
</div>
|
68 |
</div>
|
69 |
-
<a name="Do you really want to reschedule emails?" href="#TB_inline?&width=500&height=200&inlineId=wcf-ca-confirm-email-reschedule" class="thickbox button button-secondary"> <?php _e( 'Reschedule Emails', 'woo-cart-abandonment-recovery' ); ?> </a>
|
70 |
<?php endif; ?>
|
71 |
</div>
|
72 |
</div>
|
66 |
</p>
|
67 |
</div>
|
68 |
</div>
|
69 |
+
<a name="<?php _e( 'Do you really want to reschedule emails?', 'woo-cart-abandonment-recovery' ); ?>" href="#TB_inline?&width=500&height=200&inlineId=wcf-ca-confirm-email-reschedule" class="thickbox button button-secondary"> <?php _e( 'Reschedule Emails', 'woo-cart-abandonment-recovery' ); ?> </a>
|
70 |
<?php endif; ?>
|
71 |
</div>
|
72 |
</div>
|
readme.txt
CHANGED
@@ -4,7 +4,7 @@ Donate link: https://www.paypal.me/BrainstormForce
|
|
4 |
Tags: woocommerce, cart abandonment, cart recovery
|
5 |
Requires at least: 4.4
|
6 |
Tested up to: 5.2
|
7 |
-
Stable tag: 1.2.
|
8 |
Requires PHP: 5.6
|
9 |
License: GPLv2 or later
|
10 |
License URI: https://www.gnu.org/licenses/gpl-2.0.html
|
@@ -128,6 +128,14 @@ Here are few thoughts behind making it available for free:
|
|
128 |
4. General settings for Email, Webhook (Coupon Code), GDPR
|
129 |
|
130 |
== Changelog ==
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
131 |
= Version 1.2.2 - Tuesday, 12th November 2019 =
|
132 |
* Fix: Duplicate order issue for variation products.
|
133 |
|
@@ -199,4 +207,4 @@ Here are few thoughts behind making it available for free:
|
|
199 |
= Version 1.0.0 - Monday, 27th May 2019 =
|
200 |
* Initial Release
|
201 |
|
202 |
-
== Upgrade Notice ==
|
4 |
Tags: woocommerce, cart abandonment, cart recovery
|
5 |
Requires at least: 4.4
|
6 |
Tested up to: 5.2
|
7 |
+
Stable tag: 1.2.3
|
8 |
Requires PHP: 5.6
|
9 |
License: GPLv2 or later
|
10 |
License URI: https://www.gnu.org/licenses/gpl-2.0.html
|
128 |
4. General settings for Email, Webhook (Coupon Code), GDPR
|
129 |
|
130 |
== Changelog ==
|
131 |
+
|
132 |
+
= Version 1.2.3 - Thursday, 12th December 2019 =
|
133 |
+
* New: Added option to unsubscribe users in bulk.
|
134 |
+
* New: Added filter 'woo_ca_exclude_on_hold_order_from_tracking' to exclude on hold orders from the tracking.
|
135 |
+
* New: Added product table shortcode for webhook.
|
136 |
+
* Improvement: Updated filter 'woo_ca_email_template_table_style' for product table alignment.
|
137 |
+
* Fix: Sometimes test emails are not sending.
|
138 |
+
|
139 |
= Version 1.2.2 - Tuesday, 12th November 2019 =
|
140 |
* Fix: Duplicate order issue for variation products.
|
141 |
|
207 |
= Version 1.0.0 - Monday, 27th May 2019 =
|
208 |
* Initial Release
|
209 |
|
210 |
+
== Upgrade Notice ==
|
woo-cart-abandonment-recovery.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
* Plugin Name: WooCommerce Cart Abandonment Recovery
|
4 |
* Plugin URI: https://cartflows.com/
|
5 |
* Description: Recover your lost revenue. Capture email address of users on the checkout page and send follow up emails if they don't complete the purchase.
|
6 |
-
* Version: 1.2.
|
7 |
* Author: CartFlows Inc
|
8 |
* Author URI: https://cartflows.com/
|
9 |
* Text Domain: woo-cart-abandonment-recovery
|
3 |
* Plugin Name: WooCommerce Cart Abandonment Recovery
|
4 |
* Plugin URI: https://cartflows.com/
|
5 |
* Description: Recover your lost revenue. Capture email address of users on the checkout page and send follow up emails if they don't complete the purchase.
|
6 |
+
* Version: 1.2.3
|
7 |
* Author: CartFlows Inc
|
8 |
* Author URI: https://cartflows.com/
|
9 |
* Text Domain: woo-cart-abandonment-recovery
|