Funnel Builder by CartFlows – Create High Converting Sales Funnels For WordPress - Version 1.1.18

Version Description

Download this release

Release Info

Developer sandesh055
Plugin Icon Funnel Builder by CartFlows – Create High Converting Sales Funnels For WordPress
Version 1.1.18
Comparing to
See all releases

Code changes from version 1.1.17 to 1.1.18

assets/js/frontend.js CHANGED
@@ -1,5 +1,19 @@
1
  (function($){
2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3
  // Remove css when oceanwp theme is enabled.
4
  var remove_oceanwp_custom_style = function(){
5
  if( 'OceanWP' == cartflows.current_theme ){
@@ -14,18 +28,5 @@
14
 
15
  remove_oceanwp_custom_style();
16
 
17
- $(document).on( 'click', 'a[href*="wcf-next-step"]', function(e) {
18
-
19
- e.preventDefault();
20
-
21
- if( 'undefined' !== typeof cartflows.is_pb_preview && '1' == cartflows.is_pb_preview ) {
22
- e.stopPropagation();
23
- return;
24
- }
25
-
26
- window.location.href = cartflows.next_step;
27
-
28
- return false;
29
- });
30
  });
31
  })(jQuery);
1
  (function($){
2
 
3
+ $(document).on( 'click', 'a[href*="wcf-next-step"]', function(e) {
4
+
5
+ e.preventDefault();
6
+
7
+ if( 'undefined' !== typeof cartflows.is_pb_preview && '1' == cartflows.is_pb_preview ) {
8
+ e.stopPropagation();
9
+ return;
10
+ }
11
+
12
+ window.location.href = cartflows.next_step;
13
+
14
+ return false;
15
+ });
16
+
17
  // Remove css when oceanwp theme is enabled.
18
  var remove_oceanwp_custom_style = function(){
19
  if( 'OceanWP' == cartflows.current_theme ){
28
 
29
  remove_oceanwp_custom_style();
30
 
 
 
 
 
 
 
 
 
 
 
 
 
 
31
  });
32
  })(jQuery);
assets/min-js/frontend.min.js CHANGED
@@ -1 +1 @@
1
- !function(e){e(document).ready(function(e){!function(){if("OceanWP"==cartflows.current_theme){var e=document.getElementById("oceanwp-style-css");null!=e&&e.remove()}}(),e(document).on("click",'a[href*="wcf-next-step"]',function(e){if(e.preventDefault(),void 0===cartflows.is_pb_preview||"1"!=cartflows.is_pb_preview)return window.location.href=cartflows.next_step,!1;e.stopPropagation()})})}(jQuery);
1
+ !function(e){e(document).on("click",'a[href*="wcf-next-step"]',function(e){if(e.preventDefault(),void 0===cartflows.is_pb_preview||"1"!=cartflows.is_pb_preview)return window.location.href=cartflows.next_step,!1;e.stopPropagation()});e(document).ready(function(e){!function(){if("OceanWP"==cartflows.current_theme){var e=document.getElementById("oceanwp-style-css");null!=e&&e.remove()}}()})}(jQuery);
cartflows.php CHANGED
@@ -1,24 +1,24 @@
1
- <?php
2
- /**
3
- * Plugin Name: CartFlows
4
- * Plugin URI: https://cartflows.com/
5
- * Description: Create beautiful checkout pages & sales flows for WooCommerce.
6
- * Version: 1.1.17
7
- * Author: CartFlows Inc
8
- * Author URI: https://cartflows.com/
9
- * Text Domain: cartflows
10
- * WC requires at least: 3.0
11
- * WC tested up to: 3.5.1
12
- *
13
- * @package CartFlows
14
- */
15
-
16
- /**
17
- * Set constants.
18
- */
19
- define( 'CARTFLOWS_FILE', __FILE__ );
20
-
21
- /**
22
- * Loader
23
- */
24
- require_once 'classes/class-cartflows-loader.php';
1
+ <?php
2
+ /**
3
+ * Plugin Name: CartFlows
4
+ * Plugin URI: https://cartflows.com/
5
+ * Description: Create beautiful checkout pages & sales flows for WooCommerce.
6
+ * Version: 1.1.18
7
+ * Author: CartFlows Inc
8
+ * Author URI: https://cartflows.com/
9
+ * Text Domain: cartflows
10
+ * WC requires at least: 3.0
11
+ * WC tested up to: 3.6.2
12
+ *
13
+ * @package CartFlows
14
+ */
15
+
16
+ /**
17
+ * Set constants.
18
+ */
19
+ define( 'CARTFLOWS_FILE', __FILE__ );
20
+
21
+ /**
22
+ * Loader
23
+ */
24
+ require_once 'classes/class-cartflows-loader.php';
changelog.txt CHANGED
@@ -1,3 +1,6 @@
 
 
 
1
  Version 1.1.17 - Tuesday, 30th April 2019
2
  - Fix: Database connectivity error while cloning the flow.
3
 
1
+ Version 1.1.18 - Friday, 10th May 2019
2
+ - Fix: Sometimes, Next step link was not working.
3
+
4
  Version 1.1.17 - Tuesday, 30th April 2019
5
  - Fix: Database connectivity error while cloning the flow.
6
 
classes/class-cartflows-admin.php CHANGED
@@ -1,490 +1,511 @@
1
- <?php
2
- /**
3
- * CartFlows Admin.
4
- *
5
- * @package CartFlows
6
- */
7
-
8
- /**
9
- * Class Cartflows_Admin.
10
- */
11
- class Cartflows_Admin {
12
-
13
- /**
14
- * Calls on initialization
15
- *
16
- * @since 1.0.0
17
- */
18
- public static function init() {
19
-
20
- self::initialise_plugin();
21
- self::init_hooks();
22
- }
23
-
24
- /**
25
- * Init Hooks.
26
- *
27
- * @since 1.0.0
28
- * @return void
29
- */
30
- static public function init_hooks() {
31
-
32
- if ( ! is_admin() ) {
33
- return;
34
- }
35
-
36
- include_once CARTFLOWS_DIR . 'classes/class-cartflows-admin-fields.php';
37
-
38
- // Add CARTFLOWS menu option to admin.
39
- add_action( 'network_admin_menu', __CLASS__ . '::menu' );
40
- add_action( 'admin_menu', __CLASS__ . '::menu' );
41
- add_action( 'admin_menu', __CLASS__ . '::submenu', 999 );
42
-
43
- add_action( 'cartflows_render_admin_content', __CLASS__ . '::render_content' );
44
-
45
- add_action( 'init', __CLASS__ . '::settings_admin_scripts' );
46
-
47
- /* Global Addmin Script */
48
- add_action( 'admin_enqueue_scripts', __CLASS__ . '::global_admin_scripts', 20 );
49
-
50
- add_action( 'admin_footer', __CLASS__ . '::global_admin_data', 9555 );
51
-
52
- /* Add lite version class to body */
53
- add_action( 'admin_body_class', __CLASS__ . '::add_admin_body_class' );
54
- }
55
-
56
-
57
- /**
58
- * Initialize after Cartflows pro get loaded.
59
- */
60
- static public function settings_admin_scripts() {
61
- // Enqueue admin scripts.
62
- if ( isset( $_REQUEST['page'] ) && CARTFLOWS_SETTINGS == $_REQUEST['page'] ) {
63
- add_action( 'admin_enqueue_scripts', __CLASS__ . '::styles_scripts' );
64
-
65
- self::save_settings();
66
- }
67
- }
68
- /**
69
- * Initialises the Plugin Name.
70
- *
71
- * @since 1.0.0
72
- * @return void
73
- */
74
- static public function initialise_plugin() {
75
-
76
- $name = 'Cartflows';
77
- $short_name = 'Cflows';
78
-
79
- define( 'CARTFLOWS_PLUGIN_NAME', $name );
80
- define( 'CARTFLOWS_PLUGIN_SHORT_NAME', $short_name );
81
- }
82
-
83
- /**
84
- * Renders the admin settings menu.
85
- *
86
- * @since 1.0.0
87
- * @return void
88
- */
89
- static public function menu() {
90
-
91
- if ( ! current_user_can( 'manage_options' ) ) {
92
- return;
93
- }
94
-
95
- add_menu_page(
96
- 'CartFlows',
97
- 'CartFlows',
98
- 'manage_options',
99
- CARTFLOWS_SLUG,
100
- __CLASS__ . '::render',
101
- 'data:image/svg+xml;base64,' . base64_encode( file_get_contents( CARTFLOWS_DIR . 'assets/images/cartflows-icon.svg' ) ),
102
- 39.7
103
- );
104
-
105
- }
106
-
107
- /**
108
- * Add submenu to admin menu.
109
- *
110
- * @since 1.0.0
111
- */
112
- static function submenu() {
113
-
114
- $parent_slug = CARTFLOWS_SLUG;
115
- $page_title = __( 'Settings', 'cartflows' );
116
- $menu_title = __( 'Settings', 'cartflows' );
117
- $capability = 'manage_options';
118
- $menu_slug = 'cartflows_settings';
119
- $callback = __CLASS__ . '::render';
120
-
121
- add_submenu_page(
122
- $parent_slug,
123
- $page_title,
124
- $menu_title,
125
- $capability,
126
- $menu_slug,
127
- $callback
128
- );
129
- }
130
-
131
- /**
132
- * Renders the admin settings.
133
- *
134
- * @since 1.0.0
135
- * @return void
136
- */
137
- static public function render() {
138
- $action = ( isset( $_GET['action'] ) ) ? sanitize_text_field( $_GET['action'] ) : '';
139
- $action = ( ! empty( $action ) && '' != $action ) ? $action : 'general';
140
- $action = str_replace( '_', '-', $action );
141
-
142
- // Enable header icon filter below.
143
- $header_wrapper_class = apply_filters( 'cartflows_header_wrapper_class', array( $action ) );
144
-
145
- include_once CARTFLOWS_DIR . 'includes/admin/cartflows-admin.php';
146
- }
147
-
148
- /**
149
- * Renders the admin settings content.
150
- *
151
- * @since 1.0.0
152
- * @return void
153
- */
154
- static public function render_content() {
155
-
156
- $action = ( isset( $_GET['action'] ) ) ? sanitize_text_field( $_GET['action'] ) : '';
157
- $action = ( ! empty( $action ) && '' != $action ) ? $action : 'general';
158
- $action = str_replace( '_', '-', $action );
159
- $action = 'general';
160
-
161
- $header_wrapper_class = apply_filters( 'cartflows_header_wrapper_class', array( $action ) );
162
-
163
- include_once CARTFLOWS_DIR . 'includes/admin/cartflows-general.php';
164
- }
165
-
166
- /**
167
- * Save Global Setting options.
168
- *
169
- * @since 1.0.0
170
- */
171
- static public function save_common_settings() {
172
-
173
- if ( isset( $_POST['cartflows-common-settings-nonce'] ) && wp_verify_nonce( $_POST['cartflows-common-settings-nonce'], 'cartflows-common-settings' ) ) {
174
-
175
- $url = $_SERVER['REQUEST_URI'];
176
- $input_settings = array();
177
- $new_settings = array();
178
-
179
- if ( isset( $_POST['_cartflows_common'] ) ) {
180
-
181
- $input_settings = $_POST['_cartflows_common'];
182
-
183
- // Loop through the input and sanitize each of the values.
184
- foreach ( $input_settings as $key => $val ) {
185
-
186
- if ( is_array( $val ) ) {
187
- foreach ( $val as $k => $v ) {
188
- $new_settings[ $key ][ $k ] = ( isset( $val[ $k ] ) ) ? sanitize_text_field( $v ) : '';
189
- }
190
- } else {
191
- $new_settings[ $key ] = ( isset( $input_settings[ $key ] ) ) ? sanitize_text_field( $val ) : '';
192
- }
193
- }
194
- }
195
-
196
- Cartflows_Helper::update_admin_settings_option( '_cartflows_common', $new_settings, true );
197
-
198
- $query = array(
199
- 'message' => 'saved',
200
- );
201
-
202
- $redirect_to = add_query_arg( $query, $url );
203
-
204
- wp_redirect( $redirect_to );
205
- exit;
206
- } // End if statement.
207
- }
208
-
209
- /**
210
- * Save Debug Setting options.
211
- *
212
- * @since 1.1.14
213
- */
214
- static public function save_debug_settings() {
215
-
216
- if ( isset( $_POST['cartflows-debug-settings-nonce'] ) && wp_verify_nonce( $_POST['cartflows-debug-settings-nonce'], 'cartflows-debug-settings' ) ) {
217
-
218
- $url = $_SERVER['REQUEST_URI'];
219
- $input_settings = array();
220
- $new_settings = array();
221
-
222
- if ( isset( $_POST['_cartflows_debug_data'] ) ) {
223
-
224
- $input_settings = $_POST['_cartflows_debug_data'];
225
-
226
- // Loop through the input and sanitize each of the values.
227
- foreach ( $input_settings as $key => $val ) {
228
-
229
- if ( is_array( $val ) ) {
230
- foreach ( $val as $k => $v ) {
231
- $new_settings[ $key ][ $k ] = ( isset( $val[ $k ] ) ) ? sanitize_text_field( $v ) : '';
232
- }
233
- } else {
234
- $new_settings[ $key ] = ( isset( $input_settings[ $key ] ) ) ? sanitize_text_field( $val ) : '';
235
- }
236
- }
237
- }
238
-
239
- Cartflows_Helper::update_admin_settings_option( '_cartflows_debug_data', $new_settings, true );
240
-
241
- $query = array(
242
- 'message' => 'saved',
243
- );
244
-
245
- $redirect_to = add_query_arg( $query, $url );
246
-
247
- wp_redirect( $redirect_to );
248
- exit;
249
-
250
- }
251
- }
252
-
253
- /**
254
- * Check is cartflows admin.
255
- *
256
- * @since 1.0.0
257
- * @return boolean
258
- */
259
- static public function is_global_admin() {
260
-
261
- $current_screen = get_current_screen();
262
-
263
- if (
264
- is_object( $current_screen ) &&
265
- isset( $current_screen->post_type ) &&
266
- ( CARTFLOWS_FLOW_POST_TYPE === $current_screen->post_type ||
267
- CARTFLOWS_STEP_POST_TYPE === $current_screen->post_type
268
- )
269
- ) {
270
- return true;
271
- }
272
- return false;
273
- }
274
-
275
- /**
276
- * Check is flow admin.
277
- *
278
- * @since 1.0.0
279
- * @return boolean
280
- */
281
- static public function is_flow_edit_admin() {
282
-
283
- $current_screen = get_current_screen();
284
-
285
- if (
286
- is_object( $current_screen ) &&
287
- isset( $current_screen->post_type ) &&
288
- ( CARTFLOWS_FLOW_POST_TYPE === $current_screen->post_type ) &&
289
- isset( $current_screen->base ) &&
290
- ( 'post' === $current_screen->base )
291
- ) {
292
- return true;
293
- }
294
- return false;
295
- }
296
-
297
- /**
298
- * Global Admin Scripts.
299
- *
300
- * @since 1.0.0
301
- */
302
- static public function global_admin_scripts() {
303
-
304
- $localize = array(
305
- 'ajaxurl' => admin_url( 'admin-ajax.php' ),
306
- 'ajax_nonce' => wp_create_nonce( 'cartflows-nonce' ),
307
- );
308
-
309
- wp_localize_script( 'jquery', 'cartflows_admin', apply_filters( 'cartflows_admin_js_localize', $localize ) );
310
-
311
- if ( self::is_global_admin() ) {
312
-
313
- // Styles.
314
- wp_enqueue_style( 'cartflows-global-admin', CARTFLOWS_URL . 'admin/assets/css/global-admin.css', array(), CARTFLOWS_VER );
315
- wp_style_add_data( 'cartflows-global-admin', 'rtl', 'replace' );
316
-
317
- wp_enqueue_script(
318
- 'wcf-global-admin',
319
- CARTFLOWS_URL . 'admin/assets/js/global-admin.js',
320
- array( 'jquery' ),
321
- CARTFLOWS_VER,
322
- true
323
- );
324
-
325
- do_action( 'cartflows_global_admin_scripts' );
326
- }
327
- }
328
-
329
- /**
330
- * Global Admin Data.
331
- *
332
- * @since 1.0.0
333
- */
334
- static public function global_admin_data() {
335
-
336
- $current_screen = get_current_screen();
337
-
338
- if ( ! $current_screen ) {
339
- return;
340
- }
341
-
342
- if ( 'edit-' . CARTFLOWS_FLOW_POST_TYPE != $current_screen->id ) {
343
- return;
344
- }
345
-
346
- $default_page_builder = Cartflows_Helper::get_common_setting( 'default_page_builder' );
347
- ?>
348
-
349
- <div id="wcf-remote-flow-importer" class="wcf-templates-popup-overlay">
350
- <div class="wcf-templates-popup-content">
351
- <div class="spinner"></div>
352
- <div class="wcf-templates-wrap wcf-templates-wrap-flows">
353
-
354
- <div id="wcf-remote-flow-actions" class="wcf-template-header">
355
- <div class="wcf-template-logo-wrap">
356
- <span class="wcf-cartflows-logo-img">
357
- <span class="cartflows-logo-icon"></span>
358
- </span>
359
- <span class="wcf-cartflows-title"><?php _e( 'Flows Library', 'cartflows' ); ?></span>
360
- </div>
361
- <div class="wcf-tab-wrapper">
362
- <?php if ( 'other' !== $default_page_builder ) { ?>
363
- <div id="wcf-get-started-steps">
364
- <ul class="filter-links ">
365
- <li>
366
- <a href="#" class="current" data-slug="ready-templates" data-title="<?php _e( 'Ready Templates', 'cartflows' ); ?>"><?php _e( 'Ready Templates', 'cartflows' ); ?></a>
367
- </li>
368
- <li>
369
- <a href="#" data-slug="canvas" data-title="<?php _e( 'Create Your Own', 'cartflows' ); ?>"><?php _e( 'Create Your Own', 'cartflows' ); ?></a>
370
- </li>
371
- </ul>
372
- </div>
373
- <?php } ?>
374
- </div>
375
- <div class="wcf-popup-close-wrap">
376
- <span class="close-icon"><span class="wcf-cartflow-icons dashicons dashicons-no"></span></span>
377
- </div>
378
- </div>
379
- <!-- <div class="wcf-search-form">
380
- <label class="screen-reader-text" for="wp-filter-search-input"><?php _e( 'Search Sites', 'cartflows' ); ?> </label>
381
- <input placeholder="<?php _e( 'Search Flow...', 'cartflows' ); ?>" type="text" aria-describedby="live-search-desc" class="wcf-flow-search-input">
382
- </div> -->
383
-
384
- <div id="wcf-remote-content">
385
- <?php if ( 'other' !== $default_page_builder ) { ?>
386
- <div id="wcf-ready-templates">
387
- <div id="wcf-remote-filters">
388
- <div id="wcf-page-builders"></div>
389
- <div id="wcf-categories"></div>
390
- </div>
391
- <div class="wcf-page-builder-notice"></div>
392
- <div id="wcf-remote-flow-list" class="wcf-remote-list wcf-template-list-wrap"><span class="spinner is-active"></span></div>
393
- <div id="wcf-upcoming-page-builders" style="display: none;" class="wcf-remote-list wcf-template-list-wrap"></div>
394
- </div>
395
- <?php } ?>
396
- <div id="wcf-start-from-scratch" style="<?php echo ( 'other' !== $default_page_builder ) ? 'display: none;' : ''; ?>">
397
- <div class="inner">
398
- <a href="#" class="button button-hero button-primary cartflows-flow-import-blank"><?php _e( 'Design Your Flow', 'cartflows' ); ?></a>
399
- <p class="wcf-learn-how"><a href="https://cartflows.com/docs/cartflows-step-types/" target="_blank"><?php _e( 'Learn How', 'cartflows' ); ?> <i class="dashicons dashicons-external"></i></a></p>
400
- </div>
401
- </div>
402
- </div>
403
- </div>
404
- </div>
405
- </div>
406
-
407
- <?php
408
- }
409
-
410
- /**
411
- * Enqueues the needed CSS/JS for the builder's admin settings page.
412
- *
413
- * @since 1.0.0
414
- */
415
- static public function styles_scripts() {
416
-
417
- // Styles.
418
- wp_enqueue_style( 'cartflows-admin-settings', CARTFLOWS_URL . 'admin/assets/css/admin-menu-settings.css', array(), CARTFLOWS_VER );
419
- wp_style_add_data( 'cartflows-admin-settings', 'rtl', 'replace' );
420
-
421
- // Script.
422
- wp_enqueue_script( 'cartflows-admin-settings', CARTFLOWS_URL . 'admin/assets/js/admin-menu-settings.js', array( 'jquery', 'wp-util', 'updates' ), CARTFLOWS_VER );
423
-
424
- $localize = array(
425
- 'ajax_nonce' => wp_create_nonce( 'cartflows-widget-nonce' ),
426
- );
427
-
428
- wp_localize_script( 'cartflows-admin-settings', 'cartflows', apply_filters( 'cartflows_js_localize', $localize ) );
429
-
430
- do_action( 'cartflows_admin_settings_after_enqueue_scripts' );
431
- }
432
-
433
- /**
434
- * Save All admin settings here
435
- */
436
- static public function save_settings() {
437
-
438
- // Only admins can save settings.
439
- if ( ! current_user_can( 'manage_options' ) ) {
440
- return;
441
- }
442
-
443
- self::save_common_settings();
444
- self::save_debug_settings();
445
-
446
- // Let extensions hook into saving.
447
- do_action( 'cartflows_admin_settings_save' );
448
- }
449
-
450
- /**
451
- * Get and return page URL
452
- *
453
- * @param string $menu_slug Menu name.
454
- * @since 1.0.0
455
- * @return string page url
456
- */
457
- static public function get_page_url( $menu_slug ) {
458
-
459
- $parent_page = self::$default_menu_position;
460
-
461
- if ( strpos( $parent_page, '?' ) !== false ) {
462
- $query_var = '&page=' . self::$plugin_slug;
463
- } else {
464
- $query_var = '?page=' . self::$plugin_slug;
465
- }
466
-
467
- $parent_page_url = admin_url( $parent_page . $query_var );
468
-
469
- $url = $parent_page_url . '&action=' . $menu_slug;
470
-
471
- return esc_url( $url );
472
- }
473
-
474
- /**
475
- * Admin body classes.
476
- *
477
- * Body classes to be added to <body> tag in admin page
478
- *
479
- * @param String $classes body classes returned from the filter.
480
- * @return String body classes to be added to <body> tag in admin page
481
- */
482
- static public function add_admin_body_class( $classes ) {
483
-
484
- $classes .= ' cartflows-' . CARTFLOWS_VER;
485
-
486
- return $classes;
487
- }
488
- }
489
-
490
- Cartflows_Admin::init();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * CartFlows Admin.
4
+ *
5
+ * @package CartFlows
6
+ */
7
+
8
+ /**
9
+ * Class Cartflows_Admin.
10
+ */
11
+ class Cartflows_Admin {
12
+
13
+ /**
14
+ * Calls on initialization
15
+ *
16
+ * @since 1.0.0
17
+ */
18
+ public static function init() {
19
+
20
+ self::initialise_plugin();
21
+ self::init_hooks();
22
+ }
23
+
24
+ /**
25
+ * Init Hooks.
26
+ *
27
+ * @since 1.0.0
28
+ * @return void
29
+ */
30
+ static public function init_hooks() {
31
+
32
+ if ( ! is_admin() ) {
33
+ return;
34
+ }
35
+
36
+ include_once CARTFLOWS_DIR . 'classes/class-cartflows-admin-fields.php';
37
+
38
+ // Add CARTFLOWS menu option to admin.
39
+ add_action( 'network_admin_menu', __CLASS__ . '::menu' );
40
+ add_action( 'admin_menu', __CLASS__ . '::menu' );
41
+ add_action( 'admin_menu', __CLASS__ . '::submenu', 999 );
42
+
43
+ add_action( 'cartflows_render_admin_content', __CLASS__ . '::render_content' );
44
+
45
+ add_action( 'init', __CLASS__ . '::settings_admin_scripts' );
46
+
47
+ /* Global Addmin Script */
48
+ add_action( 'admin_enqueue_scripts', __CLASS__ . '::global_admin_scripts', 20 );
49
+
50
+ add_action( 'admin_footer', __CLASS__ . '::global_admin_data', 9555 );
51
+
52
+ /* Add lite version class to body */
53
+ add_action( 'admin_body_class', __CLASS__ . '::add_admin_body_class' );
54
+
55
+ add_filter( 'plugin_action_links_' . CARTFLOWS_BASE, __CLASS__ . '::add_action_links' );
56
+
57
+ }
58
+
59
+ /**
60
+ * Show action on plugin page.
61
+ *
62
+ * @param array $links links.
63
+ * @return array
64
+ */
65
+ static public function add_action_links( $links ) {
66
+ $mylinks = array(
67
+ '<a href="' . admin_url( 'admin.php?page=' . CARTFLOWS_SETTINGS ) . '">Settings</a>',
68
+ '<a target="_blank" href="' . esc_url( 'https://cartflows.com/docs' ) . '">Docs</a>',
69
+ );
70
+
71
+ if ( ! _is_cartflows_pro() ) {
72
+ array_push( $mylinks, '<a style="color: #39b54a; font-weight: bold;" target="_blank" href="' . esc_url( 'https://cartflows.com/pricing/' ) . '"> Go Pro </a>' );
73
+ }
74
+
75
+ return array_merge( $links, $mylinks );
76
+ }
77
+
78
+ /**
79
+ * Initialize after Cartflows pro get loaded.
80
+ */
81
+ static public function settings_admin_scripts() {
82
+ // Enqueue admin scripts.
83
+ if ( isset( $_REQUEST['page'] ) && CARTFLOWS_SETTINGS == $_REQUEST['page'] ) {
84
+ add_action( 'admin_enqueue_scripts', __CLASS__ . '::styles_scripts' );
85
+
86
+ self::save_settings();
87
+ }
88
+ }
89
+ /**
90
+ * Initialises the Plugin Name.
91
+ *
92
+ * @since 1.0.0
93
+ * @return void
94
+ */
95
+ static public function initialise_plugin() {
96
+
97
+ $name = 'Cartflows';
98
+ $short_name = 'Cflows';
99
+
100
+ define( 'CARTFLOWS_PLUGIN_NAME', $name );
101
+ define( 'CARTFLOWS_PLUGIN_SHORT_NAME', $short_name );
102
+ }
103
+
104
+ /**
105
+ * Renders the admin settings menu.
106
+ *
107
+ * @since 1.0.0
108
+ * @return void
109
+ */
110
+ static public function menu() {
111
+
112
+ if ( ! current_user_can( 'manage_options' ) ) {
113
+ return;
114
+ }
115
+
116
+ add_menu_page(
117
+ 'CartFlows',
118
+ 'CartFlows',
119
+ 'manage_options',
120
+ CARTFLOWS_SLUG,
121
+ __CLASS__ . '::render',
122
+ 'data:image/svg+xml;base64,' . base64_encode( file_get_contents( CARTFLOWS_DIR . 'assets/images/cartflows-icon.svg' ) ),
123
+ 39.7
124
+ );
125
+
126
+ }
127
+
128
+ /**
129
+ * Add submenu to admin menu.
130
+ *
131
+ * @since 1.0.0
132
+ */
133
+ static function submenu() {
134
+
135
+ $parent_slug = CARTFLOWS_SLUG;
136
+ $page_title = __( 'Settings', 'cartflows' );
137
+ $menu_title = __( 'Settings', 'cartflows' );
138
+ $capability = 'manage_options';
139
+ $menu_slug = 'cartflows_settings';
140
+ $callback = __CLASS__ . '::render';
141
+
142
+ add_submenu_page(
143
+ $parent_slug,
144
+ $page_title,
145
+ $menu_title,
146
+ $capability,
147
+ $menu_slug,
148
+ $callback
149
+ );
150
+ }
151
+
152
+ /**
153
+ * Renders the admin settings.
154
+ *
155
+ * @since 1.0.0
156
+ * @return void
157
+ */
158
+ static public function render() {
159
+ $action = ( isset( $_GET['action'] ) ) ? sanitize_text_field( $_GET['action'] ) : '';
160
+ $action = ( ! empty( $action ) && '' != $action ) ? $action : 'general';
161
+ $action = str_replace( '_', '-', $action );
162
+
163
+ // Enable header icon filter below.
164
+ $header_wrapper_class = apply_filters( 'cartflows_header_wrapper_class', array( $action ) );
165
+
166
+ include_once CARTFLOWS_DIR . 'includes/admin/cartflows-admin.php';
167
+ }
168
+
169
+ /**
170
+ * Renders the admin settings content.
171
+ *
172
+ * @since 1.0.0
173
+ * @return void
174
+ */
175
+ static public function render_content() {
176
+
177
+ $action = ( isset( $_GET['action'] ) ) ? sanitize_text_field( $_GET['action'] ) : '';
178
+ $action = ( ! empty( $action ) && '' != $action ) ? $action : 'general';
179
+ $action = str_replace( '_', '-', $action );
180
+ $action = 'general';
181
+
182
+ $header_wrapper_class = apply_filters( 'cartflows_header_wrapper_class', array( $action ) );
183
+
184
+ include_once CARTFLOWS_DIR . 'includes/admin/cartflows-general.php';
185
+ }
186
+
187
+ /**
188
+ * Save Global Setting options.
189
+ *
190
+ * @since 1.0.0
191
+ */
192
+ static public function save_common_settings() {
193
+
194
+ if ( isset( $_POST['cartflows-common-settings-nonce'] ) && wp_verify_nonce( $_POST['cartflows-common-settings-nonce'], 'cartflows-common-settings' ) ) {
195
+
196
+ $url = $_SERVER['REQUEST_URI'];
197
+ $input_settings = array();
198
+ $new_settings = array();
199
+
200
+ if ( isset( $_POST['_cartflows_common'] ) ) {
201
+
202
+ $input_settings = $_POST['_cartflows_common'];
203
+
204
+ // Loop through the input and sanitize each of the values.
205
+ foreach ( $input_settings as $key => $val ) {
206
+
207
+ if ( is_array( $val ) ) {
208
+ foreach ( $val as $k => $v ) {
209
+ $new_settings[ $key ][ $k ] = ( isset( $val[ $k ] ) ) ? sanitize_text_field( $v ) : '';
210
+ }
211
+ } else {
212
+ $new_settings[ $key ] = ( isset( $input_settings[ $key ] ) ) ? sanitize_text_field( $val ) : '';
213
+ }
214
+ }
215
+ }
216
+
217
+ Cartflows_Helper::update_admin_settings_option( '_cartflows_common', $new_settings, true );
218
+
219
+ $query = array(
220
+ 'message' => 'saved',
221
+ );
222
+
223
+ $redirect_to = add_query_arg( $query, $url );
224
+
225
+ wp_redirect( $redirect_to );
226
+ exit;
227
+ } // End if statement.
228
+ }
229
+
230
+ /**
231
+ * Save Debug Setting options.
232
+ *
233
+ * @since 1.1.14
234
+ */
235
+ static public function save_debug_settings() {
236
+
237
+ if ( isset( $_POST['cartflows-debug-settings-nonce'] ) && wp_verify_nonce( $_POST['cartflows-debug-settings-nonce'], 'cartflows-debug-settings' ) ) {
238
+
239
+ $url = $_SERVER['REQUEST_URI'];
240
+ $input_settings = array();
241
+ $new_settings = array();
242
+
243
+ if ( isset( $_POST['_cartflows_debug_data'] ) ) {
244
+
245
+ $input_settings = $_POST['_cartflows_debug_data'];
246
+
247
+ // Loop through the input and sanitize each of the values.
248
+ foreach ( $input_settings as $key => $val ) {
249
+
250
+ if ( is_array( $val ) ) {
251
+ foreach ( $val as $k => $v ) {
252
+ $new_settings[ $key ][ $k ] = ( isset( $val[ $k ] ) ) ? sanitize_text_field( $v ) : '';
253
+ }
254
+ } else {
255
+ $new_settings[ $key ] = ( isset( $input_settings[ $key ] ) ) ? sanitize_text_field( $val ) : '';
256
+ }
257
+ }
258
+ }
259
+
260
+ Cartflows_Helper::update_admin_settings_option( '_cartflows_debug_data', $new_settings, true );
261
+
262
+ $query = array(
263
+ 'message' => 'saved',
264
+ );
265
+
266
+ $redirect_to = add_query_arg( $query, $url );
267
+
268
+ wp_redirect( $redirect_to );
269
+ exit;
270
+
271
+ }
272
+ }
273
+
274
+ /**
275
+ * Check is cartflows admin.
276
+ *
277
+ * @since 1.0.0
278
+ * @return boolean
279
+ */
280
+ static public function is_global_admin() {
281
+
282
+ $current_screen = get_current_screen();
283
+
284
+ if (
285
+ is_object( $current_screen ) &&
286
+ isset( $current_screen->post_type ) &&
287
+ ( CARTFLOWS_FLOW_POST_TYPE === $current_screen->post_type ||
288
+ CARTFLOWS_STEP_POST_TYPE === $current_screen->post_type
289
+ )
290
+ ) {
291
+ return true;
292
+ }
293
+ return false;
294
+ }
295
+
296
+ /**
297
+ * Check is flow admin.
298
+ *
299
+ * @since 1.0.0
300
+ * @return boolean
301
+ */
302
+ static public function is_flow_edit_admin() {
303
+
304
+ $current_screen = get_current_screen();
305
+
306
+ if (
307
+ is_object( $current_screen ) &&
308
+ isset( $current_screen->post_type ) &&
309
+ ( CARTFLOWS_FLOW_POST_TYPE === $current_screen->post_type ) &&
310
+ isset( $current_screen->base ) &&
311
+ ( 'post' === $current_screen->base )
312
+ ) {
313
+ return true;
314
+ }
315
+ return false;
316
+ }
317
+
318
+ /**
319
+ * Global Admin Scripts.
320
+ *
321
+ * @since 1.0.0
322
+ */
323
+ static public function global_admin_scripts() {
324
+
325
+ $localize = array(
326
+ 'ajaxurl' => admin_url( 'admin-ajax.php' ),
327
+ 'ajax_nonce' => wp_create_nonce( 'cartflows-nonce' ),
328
+ );
329
+
330
+ wp_localize_script( 'jquery', 'cartflows_admin', apply_filters( 'cartflows_admin_js_localize', $localize ) );
331
+
332
+ if ( self::is_global_admin() ) {
333
+
334
+ // Styles.
335
+ wp_enqueue_style( 'cartflows-global-admin', CARTFLOWS_URL . 'admin/assets/css/global-admin.css', array(), CARTFLOWS_VER );
336
+ wp_style_add_data( 'cartflows-global-admin', 'rtl', 'replace' );
337
+
338
+ wp_enqueue_script(
339
+ 'wcf-global-admin',
340
+ CARTFLOWS_URL . 'admin/assets/js/global-admin.js',
341
+ array( 'jquery' ),
342
+ CARTFLOWS_VER,
343
+ true
344
+ );
345
+
346
+ do_action( 'cartflows_global_admin_scripts' );
347
+ }
348
+ }
349
+
350
+ /**
351
+ * Global Admin Data.
352
+ *
353
+ * @since 1.0.0
354
+ */
355
+ static public function global_admin_data() {
356
+
357
+ $current_screen = get_current_screen();
358
+
359
+ if ( ! $current_screen ) {
360
+ return;
361
+ }
362
+
363
+ if ( 'edit-' . CARTFLOWS_FLOW_POST_TYPE != $current_screen->id ) {
364
+ return;
365
+ }
366
+
367
+ $default_page_builder = Cartflows_Helper::get_common_setting( 'default_page_builder' );
368
+ ?>
369
+
370
+ <div id="wcf-remote-flow-importer" class="wcf-templates-popup-overlay">
371
+ <div class="wcf-templates-popup-content">
372
+ <div class="spinner"></div>
373
+ <div class="wcf-templates-wrap wcf-templates-wrap-flows">
374
+
375
+ <div id="wcf-remote-flow-actions" class="wcf-template-header">
376
+ <div class="wcf-template-logo-wrap">
377
+ <span class="wcf-cartflows-logo-img">
378
+ <span class="cartflows-logo-icon"></span>
379
+ </span>
380
+ <span class="wcf-cartflows-title"><?php _e( 'Flows Library', 'cartflows' ); ?></span>
381
+ </div>
382
+ <div class="wcf-tab-wrapper">
383
+ <?php if ( 'other' !== $default_page_builder ) { ?>
384
+ <div id="wcf-get-started-steps">
385
+ <ul class="filter-links ">
386
+ <li>
387
+ <a href="#" class="current" data-slug="ready-templates" data-title="<?php _e( 'Ready Templates', 'cartflows' ); ?>"><?php _e( 'Ready Templates', 'cartflows' ); ?></a>
388
+ </li>
389
+ <li>
390
+ <a href="#" data-slug="canvas" data-title="<?php _e( 'Create Your Own', 'cartflows' ); ?>"><?php _e( 'Create Your Own', 'cartflows' ); ?></a>
391
+ </li>
392
+ </ul>
393
+ </div>
394
+ <?php } ?>
395
+ </div>
396
+ <div class="wcf-popup-close-wrap">
397
+ <span class="close-icon"><span class="wcf-cartflow-icons dashicons dashicons-no"></span></span>
398
+ </div>
399
+ </div>
400
+ <!-- <div class="wcf-search-form">
401
+ <label class="screen-reader-text" for="wp-filter-search-input"><?php _e( 'Search Sites', 'cartflows' ); ?> </label>
402
+ <input placeholder="<?php _e( 'Search Flow...', 'cartflows' ); ?>" type="text" aria-describedby="live-search-desc" class="wcf-flow-search-input">
403
+ </div> -->
404
+
405
+ <div id="wcf-remote-content">
406
+ <?php if ( 'other' !== $default_page_builder ) { ?>
407
+ <div id="wcf-ready-templates">
408
+ <div id="wcf-remote-filters">
409
+ <div id="wcf-page-builders"></div>
410
+ <div id="wcf-categories"></div>
411
+ </div>
412
+ <div class="wcf-page-builder-notice"></div>
413
+ <div id="wcf-remote-flow-list" class="wcf-remote-list wcf-template-list-wrap"><span class="spinner is-active"></span></div>
414
+ <div id="wcf-upcoming-page-builders" style="display: none;" class="wcf-remote-list wcf-template-list-wrap"></div>
415
+ </div>
416
+ <?php } ?>
417
+ <div id="wcf-start-from-scratch" style="<?php echo ( 'other' !== $default_page_builder ) ? 'display: none;' : ''; ?>">
418
+ <div class="inner">
419
+ <a href="#" class="button button-hero button-primary cartflows-flow-import-blank"><?php _e( 'Design Your Flow', 'cartflows' ); ?></a>
420
+ <p class="wcf-learn-how"><a href="https://cartflows.com/docs/cartflows-step-types/" target="_blank"><?php _e( 'Learn How', 'cartflows' ); ?> <i class="dashicons dashicons-external"></i></a></p>
421
+ </div>
422
+ </div>
423
+ </div>
424
+ </div>
425
+ </div>
426
+ </div>
427
+
428
+ <?php
429
+ }
430
+
431
+ /**
432
+ * Enqueues the needed CSS/JS for the builder's admin settings page.
433
+ *
434
+ * @since 1.0.0
435
+ */
436
+ static public function styles_scripts() {
437
+
438
+ // Styles.
439
+ wp_enqueue_style( 'cartflows-admin-settings', CARTFLOWS_URL . 'admin/assets/css/admin-menu-settings.css', array(), CARTFLOWS_VER );
440
+ wp_style_add_data( 'cartflows-admin-settings', 'rtl', 'replace' );
441
+
442
+ // Script.
443
+ wp_enqueue_script( 'cartflows-admin-settings', CARTFLOWS_URL . 'admin/assets/js/admin-menu-settings.js', array( 'jquery', 'wp-util', 'updates' ), CARTFLOWS_VER );
444
+
445
+ $localize = array(
446
+ 'ajax_nonce' => wp_create_nonce( 'cartflows-widget-nonce' ),
447
+ );
448
+
449
+ wp_localize_script( 'cartflows-admin-settings', 'cartflows', apply_filters( 'cartflows_js_localize', $localize ) );
450
+
451
+ do_action( 'cartflows_admin_settings_after_enqueue_scripts' );
452
+ }
453
+
454
+ /**
455
+ * Save All admin settings here
456
+ */
457
+ static public function save_settings() {
458
+
459
+ // Only admins can save settings.
460
+ if ( ! current_user_can( 'manage_options' ) ) {
461
+ return;
462
+ }
463
+
464
+ self::save_common_settings();
465
+ self::save_debug_settings();
466
+
467
+ // Let extensions hook into saving.
468
+ do_action( 'cartflows_admin_settings_save' );
469
+ }
470
+
471
+ /**
472
+ * Get and return page URL
473
+ *
474
+ * @param string $menu_slug Menu name.
475
+ * @since 1.0.0
476
+ * @return string page url
477
+ */
478
+ static public function get_page_url( $menu_slug ) {
479
+
480
+ $parent_page = self::$default_menu_position;
481
+
482
+ if ( strpos( $parent_page, '?' ) !== false ) {
483
+ $query_var = '&page=' . self::$plugin_slug;
484
+ } else {
485
+ $query_var = '?page=' . self::$plugin_slug;
486
+ }
487
+
488
+ $parent_page_url = admin_url( $parent_page . $query_var );
489
+
490
+ $url = $parent_page_url . '&action=' . $menu_slug;
491
+
492
+ return esc_url( $url );
493
+ }
494
+
495
+ /**
496
+ * Admin body classes.
497
+ *
498
+ * Body classes to be added to <body> tag in admin page
499
+ *
500
+ * @param String $classes body classes returned from the filter.
501
+ * @return String body classes to be added to <body> tag in admin page
502
+ */
503
+ static public function add_admin_body_class( $classes ) {
504
+
505
+ $classes .= ' cartflows-' . CARTFLOWS_VER;
506
+
507
+ return $classes;
508
+ }
509
+ }
510
+
511
+ Cartflows_Admin::init();
classes/class-cartflows-cloning.php CHANGED
@@ -1,445 +1,445 @@
1
- <?php
2
- /**
3
- * Cloning.
4
- *
5
- * @package cartflows-pro
6
- */
7
-
8
- /**
9
- * Initialization
10
- *
11
- * @since 1.0.0
12
- */
13
- class Cartflows_Cloning {
14
-
15
-
16
- /**
17
- * Member Variable
18
- *
19
- * @var instance
20
- */
21
- private static $instance;
22
-
23
- /**
24
- * Initiator
25
- */
26
- public static function get_instance() {
27
- if ( ! isset( self::$instance ) ) {
28
- self::$instance = new self;
29
- }
30
- return self::$instance;
31
- }
32
-
33
- /**
34
- * Constructor
35
- */
36
- public function __construct() {
37
-
38
- add_filter( 'post_row_actions', array( $this, 'clone_link' ), 99, 2 );
39
- add_action( 'admin_action_cartflows_clone_flow', array( $this, 'clone_flow' ) );
40
- add_action( 'admin_action_cartflows_clone_step', array( $this, 'clone_step' ) );
41
- }
42
-
43
- /**
44
- * Clone flow with steps and its meta.
45
- */
46
- function clone_flow() {
47
-
48
- global $wpdb;
49
-
50
- if ( ! ( isset( $_GET['post'] ) || isset( $_POST['post'] ) || ( isset( $_REQUEST['action'] ) && 'cartflows_clone_flow' == $_REQUEST['action'] ) ) ) {
51
- wp_die( 'No post to duplicate has been supplied!' );
52
- }
53
-
54
- /*
55
- * Nonce verification
56
- */
57
- if ( ! isset( $_GET['flow_clone_nonce'] ) || ! wp_verify_nonce( $_GET['flow_clone_nonce'], basename( __FILE__ ) ) ) {
58
- return;
59
- }
60
-
61
- /**
62
- * Get the original post id
63
- */
64
- $post_id = ( isset( $_GET['post'] ) ? absint( $_GET['post'] ) : absint( $_POST['post'] ) );
65
-
66
- /**
67
- * And all the original post data then
68
- */
69
- $post = get_post( $post_id );
70
-
71
- /**
72
- * Assign current user to be the new post author
73
- */
74
- $current_user = wp_get_current_user();
75
- $new_post_author = $current_user->ID;
76
-
77
- /**
78
- * If post data exists, create the post duplicate
79
- */
80
- if ( isset( $post ) && null !== $post ) {
81
-
82
- /**
83
- * New post data array
84
- */
85
-
86
- $args = array(
87
- 'comment_status' => $post->comment_status,
88
- 'ping_status' => $post->ping_status,
89
- 'post_author' => $new_post_author,
90
- 'post_content' => $post->post_content,
91
- 'post_excerpt' => $post->post_excerpt,
92
- 'post_name' => $post->post_name,
93
- 'post_parent' => $post->post_parent,
94
- 'post_password' => $post->post_password,
95
- 'post_status' => $post->post_status,
96
- 'post_title' => $post->post_title . ' Clone',
97
- 'post_type' => $post->post_type,
98
- 'to_ping' => $post->to_ping,
99
- 'menu_order' => $post->menu_order,
100
- );
101
-
102
- /**
103
- * Insert the post
104
- */
105
- $new_flow_id = wp_insert_post( $args );
106
-
107
- /**
108
- * Get all current post terms ad set them to the new post
109
- */
110
- // returns array of taxonomy names for post type, ex array("category", "post_tag");.
111
- $taxonomies = get_object_taxonomies( $post->post_type );
112
-
113
- foreach ( $taxonomies as $taxonomy ) {
114
-
115
- $post_terms = wp_get_object_terms( $post_id, $taxonomy, array( 'fields' => 'slugs' ) );
116
-
117
- wp_set_object_terms( $new_flow_id, $post_terms, $taxonomy, false );
118
- }
119
-
120
- /**
121
- * Duplicate all post meta just in two SQL queries
122
- */
123
- // @codingStandardsIgnoreStart
124
- $post_meta_infos = $wpdb->get_results(
125
- "SELECT meta_key, meta_value FROM $wpdb->postmeta WHERE post_id=$post_id"
126
- );
127
- // @codingStandardsIgnoreEnd
128
-
129
- if ( ! empty( $post_meta_infos ) ) {
130
-
131
- $sql_query = "INSERT INTO $wpdb->postmeta (post_id, meta_key, meta_value) VALUES ";
132
-
133
- $sql_query_sel = array();
134
-
135
- foreach ( $post_meta_infos as $meta_info ) {
136
-
137
- $meta_key = $meta_info->meta_key;
138
-
139
- if ( '_wp_old_slug' === $meta_key ) {
140
- continue;
141
- }
142
-
143
- $meta_value = addslashes( $meta_info->meta_value );
144
-
145
- $sql_query_sel[] = "($new_flow_id, '$meta_key', '$meta_value')";
146
- }
147
-
148
- $sql_query .= implode( ',', $sql_query_sel );
149
-
150
- // @codingStandardsIgnoreStart
151
- $wpdb->query( $sql_query );
152
- // @codingStandardsIgnoreEnd
153
- }
154
-
155
- /* Steps Cloning */
156
- $flow_steps = get_post_meta( $post_id, 'wcf-steps', true );
157
- $new_flow_steps = array();
158
-
159
- /* Set Steps Empty */
160
- update_post_meta( $new_flow_id, 'wcf-steps', $new_flow_steps );
161
-
162
- if ( is_array( $flow_steps ) && ! empty( $flow_steps ) ) {
163
-
164
- foreach ( $flow_steps as $index => $step_data ) {
165
-
166
- $step_id = $step_data['id'];
167
- $step_type = get_post_meta( $step_id, 'wcf-step-type', true );
168
-
169
- $step_object = get_post( $step_id );
170
-
171
- /**
172
- * New step post data array
173
- */
174
- $step_args = array(
175
- 'comment_status' => $step_object->comment_status,
176
- 'ping_status' => $step_object->ping_status,
177
- 'post_author' => $new_post_author,
178
- 'post_content' => $step_object->post_content,
179
- 'post_excerpt' => $step_object->post_excerpt,
180
- 'post_name' => $step_object->post_name,
181
- 'post_parent' => $step_object->post_parent,
182
- 'post_password' => $step_object->post_password,
183
- 'post_status' => $step_object->post_status,
184
- 'post_title' => $step_object->post_title,
185
- 'post_type' => $step_object->post_type,
186
- 'to_ping' => $step_object->to_ping,
187
- 'menu_order' => $step_object->menu_order,
188
- );
189
-
190
- /**
191
- * Insert the post
192
- */
193
- $new_step_id = wp_insert_post( $step_args );
194
-
195
- /**
196
- * Duplicate all step meta
197
- */
198
- // @codingStandardsIgnoreStart
199
- $post_meta_infos = $wpdb->get_results(
200
- "SELECT meta_key, meta_value FROM $wpdb->postmeta WHERE post_id=$step_id"
201
- );
202
- // @codingStandardsIgnoreEnd
203
-
204
- if ( ! empty( $post_meta_infos ) ) {
205
-
206
- $sql_query = "INSERT INTO $wpdb->postmeta (post_id, meta_key, meta_value) VALUES ";
207
-
208
- $sql_query_sel = array();
209
-
210
- foreach ( $post_meta_infos as $meta_info ) {
211
-
212
- $meta_key = $meta_info->meta_key;
213
-
214
- if ( '_wp_old_slug' === $meta_key ) {
215
- continue;
216
- }
217
-
218
- $meta_value = addslashes( $meta_info->meta_value );
219
-
220
- $sql_query_sel[] = "($new_step_id, '$meta_key', '$meta_value')";
221
- }
222
-
223
- $sql_query .= implode( ',', $sql_query_sel );
224
-
225
- // @codingStandardsIgnoreStart
226
- $wpdb->query( $sql_query );
227
- // @codingStandardsIgnoreEnd
228
- }
229
-
230
- // insert post meta.
231
- update_post_meta( $new_step_id, 'wcf-flow-id', $new_flow_id );
232
- update_post_meta( $new_step_id, 'wcf-step-type', $step_type );
233
-
234
- wp_set_object_terms( $new_step_id, $step_type, CARTFLOWS_TAXONOMY_STEP_TYPE );
235
- wp_set_object_terms( $new_step_id, 'flow-' . $new_flow_id, CARTFLOWS_TAXONOMY_STEP_FLOW );
236
-
237
- /* Add New Flow Steps */
238
- $new_flow_steps[] = array(
239
- 'id' => $new_step_id,
240
- 'title' => $step_object->post_title,
241
- 'type' => $step_type,
242
- );
243
- }
244
- }
245
-
246
- /* Update New Flow Step Post Meta */
247
- update_post_meta( $new_flow_id, 'wcf-steps', $new_flow_steps );
248
-
249
- /* Clear Page Builder Cache */
250
- $this->clear_cache();
251
-
252
- /**
253
- * Redirect to the new flow edit screen
254
- */
255
- wp_redirect( admin_url( 'post.php?action=edit&post=' . $new_flow_id ) );
256
- exit;
257
- } else {
258
- wp_die( 'Post creation failed, could not find original post: ' . $post_id );
259
- }
260
- }
261
-
262
- /**
263
- * Clone step with its meta.
264
- */
265
- function clone_step() {
266
-
267
- global $wpdb;
268
-
269
- if ( ! ( isset( $_GET['post'] ) || isset( $_POST['post'] ) || ( isset( $_REQUEST['action'] ) && 'cartflows_clone_step' === $_REQUEST['action'] ) ) ) {
270
- wp_die( 'No post to duplicate has been supplied!' );
271
- }
272
-
273
- /*
274
- * Nonce verification
275
- */
276
- if ( ! isset( $_GET['step_clone_nonce'] ) || ! wp_verify_nonce( $_GET['step_clone_nonce'], 'step_clone' ) ) {
277
- return;
278
- }
279
-
280
- /**
281
- * Get the original post id
282
- */
283
- $post_id = ( isset( $_GET['post'] ) ? absint( $_GET['post'] ) : absint( $_POST['post'] ) );
284
-
285
- /**
286
- * And all the original post data then
287
- */
288
- $post = get_post( $post_id );
289
-
290
- /**
291
- * Assign current user to be the new post author
292
- */
293
- $current_user = wp_get_current_user();
294
- $new_post_author = $current_user->ID;
295
-
296
- /**
297
- * If post data exists, create the post duplicate
298
- */
299
- if ( isset( $post ) && null !== $post ) {
300
-
301
- /**
302
- * New post data array
303
- */
304
- $args = array(
305
- 'comment_status' => $post->comment_status,
306
- 'ping_status' => $post->ping_status,
307
- 'post_author' => $new_post_author,
308
- 'post_content' => $post->post_content,
309
- 'post_excerpt' => $post->post_excerpt,
310
- 'post_name' => $post->post_name,
311
- 'post_parent' => $post->post_parent,
312
- 'post_password' => $post->post_password,
313
- 'post_status' => $post->post_status,
314
- 'post_title' => $post->post_title . ' Clone',
315
- 'post_type' => $post->post_type,
316
- 'to_ping' => $post->to_ping,
317
- 'menu_order' => $post->menu_order,
318
- );
319
-
320
- /**
321
- * Insert the post
322
- */
323
- $new_step_id = wp_insert_post( $args );
324
-
325
- /**
326
- * Get all current post terms ad set them to the new post
327
- */
328
- // returns array of taxonomy names for post type, ex array("category", "post_tag");.
329
- $taxonomies = get_object_taxonomies( $post->post_type );
330
-
331
- foreach ( $taxonomies as $taxonomy ) {
332
-
333
- $post_terms = wp_get_object_terms( $post_id, $taxonomy, array( 'fields' => 'slugs' ) );
334
-
335
- wp_set_object_terms( $new_step_id, $post_terms, $taxonomy, false );
336
- }
337
-
338
- /**
339
- * Duplicate all post meta just in two SQL queries
340
- */
341
- // @codingStandardsIgnoreStart
342
- $post_meta_infos = $wpdb->get_results(
343
- "SELECT meta_key, meta_value FROM $wpdb->postmeta WHERE post_id=$post_id"
344
- );
345
- // @codingStandardsIgnoreEnd
346
-
347
- if ( ! empty( $post_meta_infos ) ) {
348
-
349
- $sql_query = "INSERT INTO $wpdb->postmeta (post_id, meta_key, meta_value) VALUES ";
350
-
351
- $sql_query_sel = array();
352
-
353
- foreach ( $post_meta_infos as $meta_info ) {
354
-
355
- $meta_key = $meta_info->meta_key;
356
-
357
- if ( '_wp_old_slug' === $meta_key ) {
358
- continue;
359
- }
360
-
361
- $meta_value = addslashes( $meta_info->meta_value );
362
-
363
- $sql_query_sel[] = "($new_step_id, '$meta_key', '$meta_value')";
364
- }
365
-
366
- $sql_query .= implode( ',', $sql_query_sel );
367
-
368
- // @codingStandardsIgnoreStart
369
- $wpdb->query( $sql_query );
370
- // @codingStandardsIgnoreEnd
371
- }
372
-
373
- $flow_id = get_post_meta( $post_id, 'wcf-flow-id', true );
374
- $flow_steps = get_post_meta( $flow_id, 'wcf-steps', true );
375
- $step_type = get_post_meta( $post_id, 'wcf-step-type', true );
376
-
377
- if ( ! is_array( $flow_steps ) ) {
378
- $flow_steps = array();
379
- }
380
-
381
- $flow_steps[] = array(
382
- 'id' => $new_step_id,
383
- 'title' => $post->post_title,
384
- 'type' => $step_type,
385
- );
386
-
387
- update_post_meta( $flow_id, 'wcf-steps', $flow_steps );
388
-
389
- /* Clear Page Builder Cache */
390
- $this->clear_cache();
391
-
392
- /**
393
- * Redirect to the new flow edit screen
394
- */
395
- $redirect_url = add_query_arg( 'highlight-step-id', $new_step_id, get_edit_post_link( $flow_id, 'default' ) );
396
-
397
- wp_redirect( $redirect_url );
398
- exit;
399
- } else {
400
- wp_die( 'Post creation failed, could not find original post: ' . $post_id );
401
- }
402
- }
403
-
404
- /**
405
- * Add the clone link to action list for flows row actions
406
- *
407
- * @param array $actions Actions array.
408
- * @param object $post Post object.
409
- *
410
- * @return array
411
- */
412
- function clone_link( $actions, $post ) {
413
-
414
- if ( current_user_can( 'edit_posts' ) && isset( $post ) && CARTFLOWS_FLOW_POST_TYPE === $post->post_type ) {
415
-
416
- if ( isset( $actions['duplicate'] ) ) { // Duplicate page plugin remove.
417
- unset( $actions['duplicate'] );
418
- }
419
- if ( isset( $actions['edit_as_new_draft'] ) ) { // Duplicate post plugin remove.
420
- unset( $actions['edit_as_new_draft'] );
421
- }
422
-
423
- $actions['clone'] = '<a href="' . wp_nonce_url( 'admin.php?action=cartflows_clone_flow&post=' . $post->ID, basename( __FILE__ ), 'flow_clone_nonce' ) . '" title="' . __( 'Clone this flow', 'cartflows' ) . '" rel="permalink">' . __( 'Clone', 'cartflows' ) . '</a>';
424
- }
425
-
426
- return $actions;
427
- }
428
-
429
- /**
430
- * Clear Page Builder Cache
431
- */
432
- function clear_cache() {
433
-
434
- // Clear 'Elementor' file cache.
435
- if ( class_exists( '\Elementor\Plugin' ) ) {
436
- Elementor\Plugin::$instance->files_manager->clear_cache();
437
- }
438
- }
439
-
440
- }
441
-
442
- /**
443
- * Kicking this off by calling 'get_instance()' method
444
- */
445
- Cartflows_Cloning::get_instance();
1
+ <?php
2
+ /**
3
+ * Cloning.
4
+ *
5
+ * @package cartflows-pro
6
+ */
7
+
8
+ /**
9
+ * Initialization
10
+ *
11
+ * @since 1.0.0
12
+ */
13
+ class Cartflows_Cloning {
14
+
15
+
16
+ /**
17
+ * Member Variable
18
+ *
19
+ * @var instance
20
+ */
21
+ private static $instance;
22
+
23
+ /**
24
+ * Initiator
25
+ */
26
+ public static function get_instance() {
27
+ if ( ! isset( self::$instance ) ) {
28
+ self::$instance = new self;
29
+ }
30
+ return self::$instance;
31
+ }
32
+
33
+ /**
34
+ * Constructor
35
+ */
36
+ public function __construct() {
37
+
38
+ add_filter( 'post_row_actions', array( $this, 'clone_link' ), 99, 2 );
39
+ add_action( 'admin_action_cartflows_clone_flow', array( $this, 'clone_flow' ) );
40
+ add_action( 'admin_action_cartflows_clone_step', array( $this, 'clone_step' ) );
41
+ }
42
+
43
+ /**
44
+ * Clone flow with steps and its meta.
45
+ */
46
+ function clone_flow() {
47
+
48
+ global $wpdb;
49
+
50
+ if ( ! ( isset( $_GET['post'] ) || isset( $_POST['post'] ) || ( isset( $_REQUEST['action'] ) && 'cartflows_clone_flow' == $_REQUEST['action'] ) ) ) {
51
+ wp_die( 'No post to duplicate has been supplied!' );
52
+ }
53
+
54
+ /*
55
+ * Nonce verification
56
+ */
57
+ if ( ! isset( $_GET['flow_clone_nonce'] ) || ! wp_verify_nonce( $_GET['flow_clone_nonce'], basename( __FILE__ ) ) ) {
58
+ return;
59
+ }
60
+
61
+ /**
62
+ * Get the original post id
63
+ */
64
+ $post_id = ( isset( $_GET['post'] ) ? absint( $_GET['post'] ) : absint( $_POST['post'] ) );
65
+
66
+ /**
67
+ * And all the original post data then
68
+ */
69
+ $post = get_post( $post_id );
70
+
71
+ /**
72
+ * Assign current user to be the new post author
73
+ */
74
+ $current_user = wp_get_current_user();
75
+ $new_post_author = $current_user->ID;
76
+
77
+ /**
78
+ * If post data exists, create the post duplicate
79
+ */
80
+ if ( isset( $post ) && null !== $post ) {
81
+
82
+ /**
83
+ * New post data array
84
+ */
85
+
86
+ $args = array(
87
+ 'comment_status' => $post->comment_status,
88
+ 'ping_status' => $post->ping_status,
89
+ 'post_author' => $new_post_author,
90
+ 'post_content' => $post->post_content,
91
+ 'post_excerpt' => $post->post_excerpt,
92
+ 'post_name' => $post->post_name,
93
+ 'post_parent' => $post->post_parent,
94
+ 'post_password' => $post->post_password,
95
+ 'post_status' => $post->post_status,
96
+ 'post_title' => $post->post_title . ' Clone',
97
+ 'post_type' => $post->post_type,
98
+ 'to_ping' => $post->to_ping,
99
+ 'menu_order' => $post->menu_order,
100
+ );
101
+
102
+ /**
103
+ * Insert the post
104
+ */
105
+ $new_flow_id = wp_insert_post( $args );
106
+
107
+ /**
108
+ * Get all current post terms ad set them to the new post
109
+ */
110
+ // returns array of taxonomy names for post type, ex array("category", "post_tag");.
111
+ $taxonomies = get_object_taxonomies( $post->post_type );
112
+
113
+ foreach ( $taxonomies as $taxonomy ) {
114
+
115
+ $post_terms = wp_get_object_terms( $post_id, $taxonomy, array( 'fields' => 'slugs' ) );
116
+
117
+ wp_set_object_terms( $new_flow_id, $post_terms, $taxonomy, false );
118
+ }
119
+
120
+ /**
121
+ * Duplicate all post meta just in two SQL queries
122
+ */
123
+ // @codingStandardsIgnoreStart
124
+ $post_meta_infos = $wpdb->get_results(
125
+ "SELECT meta_key, meta_value FROM $wpdb->postmeta WHERE post_id=$post_id"
126
+ );
127
+ // @codingStandardsIgnoreEnd
128
+
129
+ if ( ! empty( $post_meta_infos ) ) {
130
+
131
+ $sql_query = "INSERT INTO $wpdb->postmeta (post_id, meta_key, meta_value) VALUES ";
132
+
133
+ $sql_query_sel = array();
134
+
135
+ foreach ( $post_meta_infos as $meta_info ) {
136
+
137
+ $meta_key = $meta_info->meta_key;
138
+
139
+ if ( '_wp_old_slug' === $meta_key ) {
140
+ continue;
141
+ }
142
+
143
+ $meta_value = addslashes( $meta_info->meta_value );
144
+
145
+ $sql_query_sel[] = "($new_flow_id, '$meta_key', '$meta_value')";
146
+ }
147
+
148
+ $sql_query .= implode( ',', $sql_query_sel );
149
+
150
+ // @codingStandardsIgnoreStart
151
+ $wpdb->query( $sql_query );
152
+ // @codingStandardsIgnoreEnd
153
+ }
154
+
155
+ /* Steps Cloning */
156
+ $flow_steps = get_post_meta( $post_id, 'wcf-steps', true );
157
+ $new_flow_steps = array();
158
+
159
+ /* Set Steps Empty */
160
+ update_post_meta( $new_flow_id, 'wcf-steps', $new_flow_steps );
161
+
162
+ if ( is_array( $flow_steps ) && ! empty( $flow_steps ) ) {
163
+
164
+ foreach ( $flow_steps as $index => $step_data ) {
165
+
166
+ $step_id = $step_data['id'];
167
+ $step_type = get_post_meta( $step_id, 'wcf-step-type', true );
168
+
169
+ $step_object = get_post( $step_id );
170
+
171
+ /**
172
+ * New step post data array
173
+ */
174
+ $step_args = array(
175
+ 'comment_status' => $step_object->comment_status,
176
+ 'ping_status' => $step_object->ping_status,
177
+ 'post_author' => $new_post_author,
178
+ 'post_content' => $step_object->post_content,
179
+ 'post_excerpt' => $step_object->post_excerpt,
180
+ 'post_name' => $step_object->post_name,
181
+ 'post_parent' => $step_object->post_parent,
182
+ 'post_password' => $step_object->post_password,
183
+ 'post_status' => $step_object->post_status,
184
+ 'post_title' => $step_object->post_title,
185
+ 'post_type' => $step_object->post_type,
186
+ 'to_ping' => $step_object->to_ping,
187
+ 'menu_order' => $step_object->menu_order,
188
+ );
189
+
190
+ /**
191
+ * Insert the post
192
+ */
193
+ $new_step_id = wp_insert_post( $step_args );
194
+
195
+ /**
196
+ * Duplicate all step meta
197
+ */
198
+ // @codingStandardsIgnoreStart
199
+ $post_meta_infos = $wpdb->get_results(
200
+ "SELECT meta_key, meta_value FROM $wpdb->postmeta WHERE post_id=$step_id"
201
+ );
202
+ // @codingStandardsIgnoreEnd
203
+
204
+ if ( ! empty( $post_meta_infos ) ) {
205
+
206
+ $sql_query = "INSERT INTO $wpdb->postmeta (post_id, meta_key, meta_value) VALUES ";
207
+
208
+ $sql_query_sel = array();
209
+
210
+ foreach ( $post_meta_infos as $meta_info ) {
211
+
212
+ $meta_key = $meta_info->meta_key;
213
+
214
+ if ( '_wp_old_slug' === $meta_key ) {
215
+ continue;
216
+ }
217
+
218
+ $meta_value = addslashes( $meta_info->meta_value );
219
+
220
+ $sql_query_sel[] = "($new_step_id, '$meta_key', '$meta_value')";
221
+ }
222
+
223
+ $sql_query .= implode( ',', $sql_query_sel );
224
+
225
+ // @codingStandardsIgnoreStart
226
+ $wpdb->query( $sql_query );
227
+ // @codingStandardsIgnoreEnd
228
+ }
229
+
230
+ // insert post meta.
231
+ update_post_meta( $new_step_id, 'wcf-flow-id', $new_flow_id );
232
+ update_post_meta( $new_step_id, 'wcf-step-type', $step_type );
233
+
234
+ wp_set_object_terms( $new_step_id, $step_type, CARTFLOWS_TAXONOMY_STEP_TYPE );
235
+ wp_set_object_terms( $new_step_id, 'flow-' . $new_flow_id, CARTFLOWS_TAXONOMY_STEP_FLOW );
236
+
237
+ /* Add New Flow Steps */
238
+ $new_flow_steps[] = array(
239
+ 'id' => $new_step_id,
240
+ 'title' => $step_object->post_title,
241
+ 'type' => $step_type,
242
+ );
243
+ }
244
+ }
245
+
246
+ /* Update New Flow Step Post Meta */
247
+ update_post_meta( $new_flow_id, 'wcf-steps', $new_flow_steps );
248
+
249
+ /* Clear Page Builder Cache */
250
+ $this->clear_cache();
251
+
252
+ /**
253
+ * Redirect to the new flow edit screen
254
+ */
255
+ wp_redirect( admin_url( 'post.php?action=edit&post=' . $new_flow_id ) );
256
+ exit;
257
+ } else {
258
+ wp_die( 'Post creation failed, could not find original post: ' . $post_id );
259
+ }
260
+ }
261
+
262
+ /**
263
+ * Clone step with its meta.
264
+ */
265
+ function clone_step() {
266
+
267
+ global $wpdb;
268
+
269
+ if ( ! ( isset( $_GET['post'] ) || isset( $_POST['post'] ) || ( isset( $_REQUEST['action'] ) && 'cartflows_clone_step' === $_REQUEST['action'] ) ) ) {
270
+ wp_die( 'No post to duplicate has been supplied!' );
271
+ }
272
+
273
+ /*
274
+ * Nonce verification
275
+ */
276
+ if ( ! isset( $_GET['step_clone_nonce'] ) || ! wp_verify_nonce( $_GET['step_clone_nonce'], 'step_clone' ) ) {
277
+ return;
278
+ }
279
+
280
+ /**
281
+ * Get the original post id
282
+ */
283
+ $post_id = ( isset( $_GET['post'] ) ? absint( $_GET['post'] ) : absint( $_POST['post'] ) );
284
+
285
+ /**
286
+ * And all the original post data then
287
+ */
288
+ $post = get_post( $post_id );
289
+
290
+ /**
291
+ * Assign current user to be the new post author
292
+ */
293
+ $current_user = wp_get_current_user();
294
+ $new_post_author = $current_user->ID;
295
+
296
+ /**
297
+ * If post data exists, create the post duplicate
298
+ */
299
+ if ( isset( $post ) && null !== $post ) {
300
+
301
+ /**
302
+ * New post data array
303
+ */
304
+ $args = array(
305
+ 'comment_status' => $post->comment_status,
306
+ 'ping_status' => $post->ping_status,
307
+ 'post_author' => $new_post_author,
308
+ 'post_content' => $post->post_content,
309
+ 'post_excerpt' => $post->post_excerpt,
310
+ 'post_name' => $post->post_name,
311
+ 'post_parent' => $post->post_parent,
312
+ 'post_password' => $post->post_password,
313
+ 'post_status' => $post->post_status,
314
+ 'post_title' => $post->post_title . ' Clone',
315
+ 'post_type' => $post->post_type,
316
+ 'to_ping' => $post->to_ping,
317
+ 'menu_order' => $post->menu_order,
318
+ );
319
+
320
+ /**
321
+ * Insert the post
322
+ */
323
+ $new_step_id = wp_insert_post( $args );
324
+
325
+ /**
326
+ * Get all current post terms ad set them to the new post
327
+ */
328
+ // returns array of taxonomy names for post type, ex array("category", "post_tag");.
329
+ $taxonomies = get_object_taxonomies( $post->post_type );
330
+
331
+ foreach ( $taxonomies as $taxonomy ) {
332
+
333
+ $post_terms = wp_get_object_terms( $post_id, $taxonomy, array( 'fields' => 'slugs' ) );
334
+
335
+ wp_set_object_terms( $new_step_id, $post_terms, $taxonomy, false );
336
+ }
337
+
338
+ /**
339
+ * Duplicate all post meta just in two SQL queries
340
+ */
341
+ // @codingStandardsIgnoreStart
342
+ $post_meta_infos = $wpdb->get_results(
343
+ "SELECT meta_key, meta_value FROM $wpdb->postmeta WHERE post_id=$post_id"
344
+ );
345
+ // @codingStandardsIgnoreEnd
346
+
347
+ if ( ! empty( $post_meta_infos ) ) {
348
+
349
+ $sql_query = "INSERT INTO $wpdb->postmeta (post_id, meta_key, meta_value) VALUES ";
350
+
351
+ $sql_query_sel = array();
352
+
353
+ foreach ( $post_meta_infos as $meta_info ) {
354
+
355
+ $meta_key = $meta_info->meta_key;
356
+
357
+ if ( '_wp_old_slug' === $meta_key ) {
358
+ continue;
359
+ }
360
+
361
+ $meta_value = addslashes( $meta_info->meta_value );
362
+
363
+ $sql_query_sel[] = "($new_step_id, '$meta_key', '$meta_value')";
364
+ }
365
+
366
+ $sql_query .= implode( ',', $sql_query_sel );
367
+
368
+ // @codingStandardsIgnoreStart
369
+ $wpdb->query( $sql_query );
370
+ // @codingStandardsIgnoreEnd
371
+ }
372
+
373
+ $flow_id = get_post_meta( $post_id, 'wcf-flow-id', true );
374
+ $flow_steps = get_post_meta( $flow_id, 'wcf-steps', true );
375
+ $step_type = get_post_meta( $post_id, 'wcf-step-type', true );
376
+
377
+ if ( ! is_array( $flow_steps ) ) {
378
+ $flow_steps = array();
379
+ }
380
+
381
+ $flow_steps[] = array(
382
+ 'id' => $new_step_id,
383
+ 'title' => $post->post_title,
384
+ 'type' => $step_type,
385
+ );
386
+
387
+ update_post_meta( $flow_id, 'wcf-steps', $flow_steps );
388
+
389
+ /* Clear Page Builder Cache */
390
+ $this->clear_cache();
391
+
392
+ /**
393
+ * Redirect to the new flow edit screen
394
+ */
395
+ $redirect_url = add_query_arg( 'highlight-step-id', $new_step_id, get_edit_post_link( $flow_id, 'default' ) );
396
+
397
+ wp_redirect( $redirect_url );
398
+ exit;
399
+ } else {
400
+ wp_die( 'Post creation failed, could not find original post: ' . $post_id );
401
+ }
402
+ }
403
+
404
+ /**
405
+ * Add the clone link to action list for flows row actions
406
+ *
407
+ * @param array $actions Actions array.
408
+ * @param object $post Post object.
409
+ *
410
+ * @return array
411
+ */
412
+ function clone_link( $actions, $post ) {
413
+
414
+ if ( current_user_can( 'edit_posts' ) && isset( $post ) && CARTFLOWS_FLOW_POST_TYPE === $post->post_type ) {
415
+
416
+ if ( isset( $actions['duplicate'] ) ) { // Duplicate page plugin remove.
417
+ unset( $actions['duplicate'] );
418
+ }
419
+ if ( isset( $actions['edit_as_new_draft'] ) ) { // Duplicate post plugin remove.
420
+ unset( $actions['edit_as_new_draft'] );
421
+ }
422
+
423
+ $actions['clone'] = '<a href="' . wp_nonce_url( 'admin.php?action=cartflows_clone_flow&post=' . $post->ID, basename( __FILE__ ), 'flow_clone_nonce' ) . '" title="' . __( 'Clone this flow', 'cartflows' ) . '" rel="permalink">' . __( 'Clone', 'cartflows' ) . '</a>';
424
+ }
425
+
426
+ return $actions;
427
+ }
428
+
429
+ /**
430
+ * Clear Page Builder Cache
431
+ */
432
+ function clear_cache() {
433
+
434
+ // Clear 'Elementor' file cache.
435
+ if ( class_exists( '\Elementor\Plugin' ) ) {
436
+ Elementor\Plugin::$instance->files_manager->clear_cache();
437
+ }
438
+ }
439
+
440
+ }
441
+
442
+ /**
443
+ * Kicking this off by calling 'get_instance()' method
444
+ */
445
+ Cartflows_Cloning::get_instance();
classes/class-cartflows-frontend.php CHANGED
@@ -366,7 +366,7 @@ class Cartflows_Frontend {
366
  wcf()->utils->get_js_url( 'frontend' ),
367
  array( 'jquery' ),
368
  CARTFLOWS_VER,
369
- true
370
  );
371
  }
372
 
366
  wcf()->utils->get_js_url( 'frontend' ),
367
  array( 'jquery' ),
368
  CARTFLOWS_VER,
369
+ false
370
  );
371
  }
372
 
classes/class-cartflows-loader.php CHANGED
@@ -118,7 +118,7 @@ if ( ! class_exists( 'Cartflows_Loader' ) ) {
118
  define( 'CARTFLOWS_BASE', plugin_basename( CARTFLOWS_FILE ) );
119
  define( 'CARTFLOWS_DIR', plugin_dir_path( CARTFLOWS_FILE ) );
120
  define( 'CARTFLOWS_URL', plugins_url( '/', CARTFLOWS_FILE ) );
121
- define( 'CARTFLOWS_VER', '1.1.17' );
122
  define( 'CARTFLOWS_SLUG', 'cartflows' );
123
  define( 'CARTFLOWS_SETTINGS', 'cartflows_settings' );
124
 
118
  define( 'CARTFLOWS_BASE', plugin_basename( CARTFLOWS_FILE ) );
119
  define( 'CARTFLOWS_DIR', plugin_dir_path( CARTFLOWS_FILE ) );
120
  define( 'CARTFLOWS_URL', plugins_url( '/', CARTFLOWS_FILE ) );
121
+ define( 'CARTFLOWS_VER', '1.1.18' );
122
  define( 'CARTFLOWS_SLUG', 'cartflows' );
123
  define( 'CARTFLOWS_SETTINGS', 'cartflows_settings' );
124
 
languages/cartflows.pot CHANGED
@@ -1,1443 +1,1443 @@
1
- # Copyright (C) 2019 CartFlows Inc
2
- # This file is distributed under the same license as the CartFlows package.
3
- msgid ""
4
- msgstr ""
5
- "Project-Id-Version: CartFlows 1.1.17\n"
6
- "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/cartflows\n"
7
- "POT-Creation-Date: 2019-04-30 06:45:35+00:00\n"
8
- "MIME-Version: 1.0\n"
9
- "Content-Type: text/plain; charset=utf-8\n"
10
- "Content-Transfer-Encoding: 8bit\n"
11
- "PO-Revision-Date: 2019-MO-DA HO:MI+ZONE\n"
12
- "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13
- "Language-Team: LANGUAGE <LL@li.org>\n"
14
- "Language: en\n"
15
- "Plural-Forms: nplurals=2; plural=(n != 1);\n"
16
- "X-Poedit-Country: United States\n"
17
- "X-Poedit-SourceCharset: UTF-8\n"
18
- "X-Poedit-KeywordsList: "
19
- "__;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_"
20
- "attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c;\n"
21
- "X-Poedit-Basepath: ../\n"
22
- "X-Poedit-SearchPath-0: .\n"
23
- "X-Poedit-Bookmarks: \n"
24
- "X-Textdomain-Support: yes\n"
25
- "X-Generator: grunt-wp-i18n 1.0.3\n"
26
-
27
- #: classes/batch-process/class-cartflows-importer-elementor.php:44
28
- msgid "Invalid content."
29
- msgstr ""
30
-
31
- #: classes/batch-process/class-cartflows-importer-elementor.php:52
32
- msgid "Invalid content. Expected an array."
33
- msgstr ""
34
-
35
- #: classes/batch-process/helpers/class-wp-background-process.php:435
36
- msgid "Every %d Minutes"
37
- msgstr ""
38
-
39
- #: classes/class-cartflows-admin-fields.php:162
40
- msgid "Select"
41
- msgstr ""
42
-
43
- #: classes/class-cartflows-admin-fields.php:165
44
- msgid "No Checkout Steps"
45
- msgstr ""
46
-
47
- #: classes/class-cartflows-admin-fields.php:191
48
- #. translators: %s: link
49
- msgid ""
50
- "Be sure not to add any product in above selected Global Checkout step. "
51
- "Please read information about how to set up Global Checkout %1$shere%2$s."
52
- msgstr ""
53
-
54
- #: classes/class-cartflows-admin.php:115 classes/class-cartflows-admin.php:116
55
- #: includes/admin/cartflows-general-bck.php:34
56
- msgid "Settings"
57
- msgstr ""
58
-
59
- #: classes/class-cartflows-admin.php:359
60
- msgid "Flows Library"
61
- msgstr ""
62
-
63
- #: classes/class-cartflows-admin.php:366
64
- #: modules/flow/view/meta-flow-steps.php:145
65
- msgid "Ready Templates"
66
- msgstr ""
67
-
68
- #: classes/class-cartflows-admin.php:369
69
- #: modules/flow/view/meta-flow-steps.php:148
70
- msgid "Create Your Own"
71
- msgstr ""
72
-
73
- #: classes/class-cartflows-admin.php:380
74
- #: modules/flow/view/meta-flow-steps.php:160
75
- msgid "Search Sites"
76
- msgstr ""
77
-
78
- #: classes/class-cartflows-admin.php:381
79
- #: modules/flow/view/meta-flow-steps.php:161
80
- msgid "Search Flow..."
81
- msgstr ""
82
-
83
- #: classes/class-cartflows-admin.php:398
84
- msgid "Design Your Flow"
85
- msgstr ""
86
-
87
- #: classes/class-cartflows-admin.php:399
88
- #: modules/flow/view/meta-flow-steps.php:192
89
- msgid "Learn How"
90
- msgstr ""
91
-
92
- #: classes/class-cartflows-api.php:368
93
- msgid "Request successfully processed!"
94
- msgstr ""
95
-
96
- #: classes/class-cartflows-cloning.php:423
97
- msgid "Clone this flow"
98
- msgstr ""
99
-
100
- #: classes/class-cartflows-cloning.php:423
101
- msgid "Clone"
102
- msgstr ""
103
-
104
- #: classes/class-cartflows-flow-frontend.php:52
105
- msgid ""
106
- "Test mode is active — which displays random products for previewing. It can "
107
- "be deactivated from the flow settings in the admin dashboard."
108
- msgstr ""
109
-
110
- #: classes/class-cartflows-importer.php:80
111
- msgid "Export this flow"
112
- msgstr ""
113
-
114
- #: classes/class-cartflows-importer.php:80 includes/exporter.php:18
115
- msgid "Export"
116
- msgstr ""
117
-
118
- #: classes/class-cartflows-importer.php:91
119
- msgid "Flow Export"
120
- msgstr ""
121
-
122
- #: classes/class-cartflows-importer.php:92
123
- msgid "Flow Import"
124
- msgstr ""
125
-
126
- #: classes/class-cartflows-importer.php:103
127
- msgid "No post to export has been supplied!"
128
- msgstr ""
129
-
130
- #: classes/class-cartflows-importer.php:294
131
- msgid "Please upload a valid .json file"
132
- msgstr ""
133
-
134
- #: classes/class-cartflows-importer.php:300
135
- msgid "Please upload a file to import"
136
- msgstr ""
137
-
138
- #: classes/class-cartflows-importer.php:438
139
- msgid "Successfully imported flows."
140
- msgstr ""
141
-
142
- #: classes/class-cartflows-importer.php:470
143
- msgid "Loading Steps"
144
- msgstr ""
145
-
146
- #: classes/class-cartflows-importer.php:472
147
- msgid "Getting steps from the cloud. Please wait for the moment."
148
- msgstr ""
149
-
150
- #: classes/class-cartflows-importer.php:483
151
- msgid "Searching Template.."
152
- msgstr ""
153
-
154
- #: classes/class-cartflows-importer.php:485
155
- msgid "Getting templates from the cloud. Please wait for the moment."
156
- msgstr ""
157
-
158
- #: classes/class-cartflows-importer.php:494
159
- msgid "Importing.."
160
- msgstr ""
161
-
162
- #: classes/class-cartflows-importer.php:503
163
- #: classes/class-cartflows-importer.php:543
164
- msgid "Imported"
165
- msgstr ""
166
-
167
- #: classes/class-cartflows-importer.php:504
168
- #: classes/class-cartflows-importer.php:544
169
- msgid "Thanks for patience"
170
- msgstr ""
171
-
172
- #: classes/class-cartflows-importer.php:513
173
- #: classes/class-cartflows-importer.php:525
174
- msgid "Coming Soon!"
175
- msgstr ""
176
-
177
- #: classes/class-cartflows-importer.php:544
178
- msgid "Redirecting to the Elementor edit window."
179
- msgstr ""
180
-
181
- #: classes/class-cartflows-importer.php:591
182
- #: classes/class-cartflows-importer.php:675
183
- msgid "Pro"
184
- msgstr ""
185
-
186
- #: classes/class-cartflows-importer.php:614
187
- #: classes/class-cartflows-importer.php:701
188
- msgid "Activate License"
189
- msgstr ""
190
-
191
- #: classes/class-cartflows-importer.php:616
192
- #: classes/class-cartflows-importer.php:703
193
- msgid "Get Pro"
194
- msgstr ""
195
-
196
- #: classes/class-cartflows-importer.php:641
197
- msgid "Create"
198
- msgstr ""
199
-
200
- #: classes/class-cartflows-importer.php:720
201
- msgid "Under Maintenance.."
202
- msgstr ""
203
-
204
- #: classes/class-cartflows-importer.php:721
205
- msgid ""
206
- "If you are seeing this message, most likely our servers are under routine "
207
- "maintenance and we will be back shortly."
208
- msgstr ""
209
-
210
- #: classes/class-cartflows-importer.php:722
211
- msgid ""
212
- "In rare case, it is possible your website is having trouble connecting with "
213
- "ours. If you need help, please feel free to get in touch with us from our "
214
- "website.."
215
- msgstr ""
216
-
217
- #: classes/class-cartflows-importer.php:752
218
- #. translators: %s: Plugin string
219
- msgid ""
220
- "%1$s to see CartFlows templates. If you prefer another page builder tool, "
221
- "you can <a href=\"%2$s\" target=\"blank\">select it here</a>."
222
- msgstr ""
223
-
224
- #: classes/class-cartflows-importer.php:767
225
- msgid "All"
226
- msgstr ""
227
-
228
- #: classes/class-cartflows-importer.php:770
229
- msgid "Select Step Type"
230
- msgstr ""
231
-
232
- #: classes/class-cartflows-importer.php:847
233
- msgid "Import from Cloud"
234
- msgstr ""
235
-
236
- #: classes/class-cartflows-importer.php:1149
237
- #: modules/flow/classes/class-cartflows-flow-meta.php:224
238
- msgid "Landing Page"
239
- msgstr ""
240
-
241
- #: classes/class-cartflows-importer.php:1150
242
- #: modules/flow/classes/class-cartflows-flow-meta.php:225
243
- msgid "Checkout Page"
244
- msgstr ""
245
-
246
- #: classes/class-cartflows-importer.php:1151
247
- #: modules/flow/classes/class-cartflows-flow-meta.php:226
248
- msgid "Thank You Page"
249
- msgstr ""
250
-
251
- #: classes/class-cartflows-importer.php:1259
252
- #. translators: %s: template ID
253
- msgid "Invalid template id %1$s or post id %2$s."
254
- msgstr ""
255
-
256
- #: classes/class-cartflows-importer.php:1317
257
- #. translators: %s: flow ID
258
- msgid "Invalid flow id %1$s OR step type %2$s."
259
- msgstr ""
260
-
261
- #: classes/class-cartflows-importer.php:1438
262
- msgid ""
263
- "Elementor is not activated. Please activate plugin Elementor Page Builder "
264
- "to import the step."
265
- msgstr ""
266
-
267
- #: classes/class-cartflows-importer.php:1556
268
- msgid "Plugin Successfully Activated"
269
- msgstr ""
270
-
271
- #: classes/class-cartflows-loader.php:368
272
- #. translators: %s: html tags
273
- msgid ""
274
- "The %1$sCartFlows%2$s plugin requires %1$sWooCommerce%2$s plugin installed "
275
- "& activated."
276
- msgstr ""
277
-
278
- #: classes/class-cartflows-loader.php:378
279
- msgid "Activate WooCommerce"
280
- msgstr ""
281
-
282
- #: classes/class-cartflows-loader.php:386
283
- msgid "Install WooCommerce"
284
- msgstr ""
285
-
286
- #: classes/class-cartflows-meta-fields.php:86
287
- msgid "Thin 100"
288
- msgstr ""
289
-
290
- #: classes/class-cartflows-meta-fields.php:87
291
- msgid "Extra-Light 200"
292
- msgstr ""
293
-
294
- #: classes/class-cartflows-meta-fields.php:88
295
- msgid "Light 300"
296
- msgstr ""
297
-
298
- #: classes/class-cartflows-meta-fields.php:89
299
- msgid "Normal 400"
300
- msgstr ""
301
-
302
- #: classes/class-cartflows-meta-fields.php:90
303
- msgid "Medium 500"
304
- msgstr ""
305
-
306
- #: classes/class-cartflows-meta-fields.php:91
307
- msgid "Semi-Bold 600"
308
- msgstr ""
309
-
310
- #: classes/class-cartflows-meta-fields.php:92
311
- msgid "Bold 700"
312
- msgstr ""
313
-
314
- #: classes/class-cartflows-meta-fields.php:93
315
- msgid "Extra-Bold 800"
316
- msgstr ""
317
-
318
- #: classes/class-cartflows-meta-fields.php:94
319
- msgid "Ultra-Bold 900"
320
- msgstr ""
321
-
322
- #: classes/class-cartflows-meta-fields.php:217
323
- #: classes/class-cartflows-meta-fields.php:325
324
- #: classes/class-cartflows-meta-fields.php:1417
325
- msgid "Remove"
326
- msgstr ""
327
-
328
- #: classes/class-cartflows-meta-fields.php:446
329
- msgid "Field Width"
330
- msgstr ""
331
-
332
- #: classes/class-cartflows-meta-fields.php:450
333
- msgid "33%"
334
- msgstr ""
335
-
336
- #: classes/class-cartflows-meta-fields.php:451
337
- msgid "50%"
338
- msgstr ""
339
-
340
- #: classes/class-cartflows-meta-fields.php:452
341
- msgid "100%"
342
- msgstr ""
343
-
344
- #: classes/class-cartflows-meta-fields.php:463
345
- msgid "Field Label"
346
- msgstr ""
347
-
348
- #: classes/class-cartflows-meta-fields.php:477
349
- msgid "Options"
350
- msgstr ""
351
-
352
- #: classes/class-cartflows-meta-fields.php:492
353
- #: classes/class-cartflows-meta-fields.php:505
354
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:459
355
- msgid "Default"
356
- msgstr ""
357
-
358
- #: classes/class-cartflows-meta-fields.php:496
359
- msgid "Checked"
360
- msgstr ""
361
-
362
- #: classes/class-cartflows-meta-fields.php:497
363
- msgid "Un-Checked"
364
- msgstr ""
365
-
366
- #: classes/class-cartflows-meta-fields.php:518
367
- msgid "Placeholder"
368
- msgstr ""
369
-
370
- #: classes/class-cartflows-meta-fields.php:530
371
- msgid "Required"
372
- msgstr ""
373
-
374
- #: classes/class-cartflows-meta-fields.php:542
375
- msgid "Enable this field"
376
- msgstr ""
377
-
378
- #: classes/class-cartflows-meta-fields.php:562
379
- msgid "Label"
380
- msgstr ""
381
-
382
- #: classes/class-cartflows-meta-fields.php:990
383
- #: classes/class-cartflows-meta-fields.php:1409
384
- msgid "Search for a product&hellip;"
385
- msgstr ""
386
-
387
- #: classes/class-cartflows-meta-fields.php:1031
388
- msgid "Search for a coupon&hellip;"
389
- msgstr ""
390
-
391
- #: classes/class-cartflows-meta.php:34
392
- msgid "Update"
393
- msgstr ""
394
-
395
- #: classes/class-cartflows-meta.php:42
396
- #: modules/flow/classes/class-cartflows-flow-meta.php:84
397
- msgid "Back to edit Flow"
398
- msgstr ""
399
-
400
- #: classes/class-cartflows-meta.php:63
401
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:191
402
- #: modules/landing/classes/class-cartflows-landing-meta.php:136
403
- #: modules/thankyou/classes/class-cartflows-thankyou-meta.php:148
404
- msgid "Custom Script"
405
- msgstr ""
406
-
407
- #: classes/class-cartflows-meta.php:66
408
- msgid ""
409
- "Custom script lets you add your own custom script on front end of this flow "
410
- "page."
411
- msgstr ""
412
-
413
- #: classes/class-cartflows-wizard.php:45
414
- msgid "Thanks for installing and using CartFlows!"
415
- msgstr ""
416
-
417
- #: classes/class-cartflows-wizard.php:46
418
- msgid ""
419
- "It is easy to use the CartFlows. Please use the setup wizard to quick start "
420
- "setup."
421
- msgstr ""
422
-
423
- #: classes/class-cartflows-wizard.php:71
424
- #: includes/admin/cartflows-general-bck.php:24
425
- msgid "Welcome"
426
- msgstr ""
427
-
428
- #: classes/class-cartflows-wizard.php:76 classes/class-cartflows-wizard.php:259
429
- msgid "Page Builder"
430
- msgstr ""
431
-
432
- #: classes/class-cartflows-wizard.php:81
433
- msgid "Ready!"
434
- msgstr ""
435
-
436
- #: classes/class-cartflows-wizard.php:150
437
- msgid "CartFlows Setup"
438
- msgstr ""
439
-
440
- #: classes/class-cartflows-wizard.php:176
441
- msgid "Exit Setup Wizard"
442
- msgstr ""
443
-
444
- #: classes/class-cartflows-wizard.php:225
445
- msgid "Thank you for choosing CartFlows!"
446
- msgstr ""
447
-
448
- #: classes/class-cartflows-wizard.php:232
449
- msgid "Lets Go »"
450
- msgstr ""
451
-
452
- #: classes/class-cartflows-wizard.php:260
453
- msgid "Select a page builder which you want to use for creating your new flows."
454
- msgstr ""
455
-
456
- #: classes/class-cartflows-wizard.php:265
457
- msgid "Select Page Builder"
458
- msgstr ""
459
-
460
- #: classes/class-cartflows-wizard.php:266
461
- msgid "Add locations for where this Schema should appear."
462
- msgstr ""
463
-
464
- #: classes/class-cartflows-wizard.php:273
465
- #: includes/admin/cartflows-general.php:76
466
- msgid "Elementor"
467
- msgstr ""
468
-
469
- #: classes/class-cartflows-wizard.php:294
470
- msgid "The above plugin will be installed and activated for you!"
471
- msgstr ""
472
-
473
- #: classes/class-cartflows-wizard.php:297
474
- msgid "« Previous"
475
- msgstr ""
476
-
477
- #: classes/class-cartflows-wizard.php:300
478
- #: classes/class-cartflows-wizard.php:301
479
- msgid "Next »"
480
- msgstr ""
481
-
482
- #: classes/class-cartflows-wizard.php:393
483
- msgid "Congratulations!"
484
- msgstr ""
485
-
486
- #: classes/class-cartflows-wizard.php:400
487
- msgid ""
488
- "You've successfully completed the setup before you begin setting now you "
489
- "can use it."
490
- msgstr ""
491
-
492
- #: classes/class-cartflows-wizard.php:414
493
- msgid "Create a flow"
494
- msgstr ""
495
-
496
- #: includes/admin/cartflows-admin.php:19
497
- #: includes/admin/cartflows-general.php:33
498
- msgid "Modernizing WordPress eCommerce!"
499
- msgstr ""
500
-
501
- #: includes/admin/cartflows-admin.php:29
502
- msgid "Settings saved successfully."
503
- msgstr ""
504
-
505
- #: includes/admin/cartflows-general-bck.php:10
506
- msgid "Selec"
507
- msgstr ""
508
-
509
- #: includes/admin/cartflows-general-bck.php:22
510
- msgid "General"
511
- msgstr ""
512
-
513
- #: includes/admin/cartflows-general.php:18
514
- #: includes/admin/cartflows-general.php:41
515
- msgid "General Settings"
516
- msgstr ""
517
-
518
- #: includes/admin/cartflows-general.php:25
519
- msgid "Getting Started"
520
- msgstr ""
521
-
522
- #: includes/admin/cartflows-general.php:54
523
- msgid "Disallow search engines from indexing flows"
524
- msgstr ""
525
-
526
- #: includes/admin/cartflows-general.php:63
527
- #: modules/flow/view/meta-flow-steps.php:87
528
- msgid "Global Checkout"
529
- msgstr ""
530
-
531
- #: includes/admin/cartflows-general.php:72
532
- msgid "Show Templates designed with"
533
- msgstr ""
534
-
535
- #: includes/admin/cartflows-general.php:73
536
- msgid ""
537
- "CartFlows offers flow templates that can be imported in one click. These "
538
- "templates are available in few different page builders. Please choose your "
539
- "preferred page builder from the list so you will only see templates that "
540
- "are made using that page builder.."
541
- msgstr ""
542
-
543
- #: includes/admin/cartflows-general.php:77
544
- msgid "Beaver Builder"
545
- msgstr ""
546
-
547
- #: includes/admin/cartflows-general.php:78
548
- msgid "Divi"
549
- msgstr ""
550
-
551
- #: includes/admin/cartflows-general.php:79
552
- msgid "Other"
553
- msgstr ""
554
-
555
- #: includes/admin/cartflows-general.php:88
556
- msgid "Save Changes"
557
- msgstr ""
558
-
559
- #: includes/admin/cartflows-general.php:100
560
- msgid "Knowledge Base"
561
- msgstr ""
562
-
563
- #: includes/admin/cartflows-general.php:104
564
- msgid "Not sure how something works? Take a peek at the knowledge base and learn."
565
- msgstr ""
566
-
567
- #: includes/admin/cartflows-general.php:107
568
- msgid "Visit Knowledge Base »"
569
- msgstr ""
570
-
571
- #: includes/admin/cartflows-general.php:115
572
- msgid "Community"
573
- msgstr ""
574
-
575
- #: includes/admin/cartflows-general.php:119
576
- msgid ""
577
- "Join the community of super helpful CartFlows users. Say hello, ask "
578
- "questions, give feedback and help each other!"
579
- msgstr ""
580
-
581
- #: includes/admin/cartflows-general.php:122
582
- msgid "Join Our Facebook Group »"
583
- msgstr ""
584
-
585
- #: includes/admin/cartflows-general.php:130
586
- msgid "Five Star Support"
587
- msgstr ""
588
-
589
- #: includes/admin/cartflows-general.php:134
590
- msgid "Got a question? Get in touch with CartFlows developers. We're happy to help!"
591
- msgstr ""
592
-
593
- #: includes/admin/cartflows-general.php:137
594
- msgid "Submit a Ticket »"
595
- msgstr ""
596
-
597
- #: includes/admin/cartflows-general.php:147
598
- msgid "Load Minified CSS"
599
- msgstr ""
600
-
601
- #: includes/admin/cartflows-general.php:152
602
- msgid ""
603
- "Load the Minified CSS from here. Just Enable it by checking the below given "
604
- "checkbox."
605
- msgstr ""
606
-
607
- #: includes/admin/cartflows-general.php:159
608
- msgid "Load minified CSS & JS Files"
609
- msgstr ""
610
-
611
- #: includes/admin/cartflows-general.php:164
612
- msgid "Save"
613
- msgstr ""
614
-
615
- #: includes/exporter.php:12
616
- msgid "Export Flows to a JSON file"
617
- msgstr ""
618
-
619
- #: includes/exporter.php:13
620
- msgid ""
621
- "This tool allows you to generate and download a JSON file containing a list "
622
- "of all flows."
623
- msgstr ""
624
-
625
- #: includes/importer.php:12
626
- msgid "Import Flows to a JSON file"
627
- msgstr ""
628
-
629
- #: includes/importer.php:13
630
- msgid "This tool allows you to import the flows from the JSON file."
631
- msgstr ""
632
-
633
- #: includes/importer.php:21
634
- msgid "Import"
635
- msgstr ""
636
-
637
- #: modules/checkout/classes/class-cartflows-checkout-markup.php:161
638
- #: modules/thankyou/classes/class-cartflows-thankyou-markup.php:62
639
- msgid ""
640
- "WooCommerce functions not exists. If you are in iframe, please reload the "
641
- "iframe"
642
- msgstr ""
643
-
644
- #: modules/checkout/classes/class-cartflows-checkout-markup.php:177
645
- msgid "Checkout ID not found"
646
- msgstr ""
647
-
648
- #: modules/checkout/classes/class-cartflows-checkout-markup.php:343
649
- msgid "Variations Not set"
650
- msgstr ""
651
-
652
- #: modules/checkout/classes/class-cartflows-checkout-markup.php:352
653
- msgid "This product can't be purcahsed"
654
- msgstr ""
655
-
656
- #: modules/checkout/classes/class-cartflows-checkout-markup.php:948
657
- #: modules/checkout/classes/class-cartflows-checkout-markup.php:979
658
- msgid "Coupon Code"
659
- msgstr ""
660
-
661
- #: modules/checkout/classes/class-cartflows-checkout-markup.php:953
662
- #: modules/checkout/classes/class-cartflows-checkout-markup.php:988
663
- msgid "Apply"
664
- msgstr ""
665
-
666
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:68
667
- msgid "Checkout Layout"
668
- msgstr ""
669
-
670
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:155
671
- #: modules/landing/classes/class-cartflows-landing-meta.php:130
672
- #: modules/thankyou/classes/class-cartflows-thankyou-meta.php:130
673
- msgid "Shortcodes"
674
- msgstr ""
675
-
676
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:161
677
- msgid "Select Product"
678
- msgstr ""
679
-
680
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:167
681
- msgid "Order Bump"
682
- msgstr ""
683
-
684
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:173
685
- msgid "Checkout Design"
686
- msgstr ""
687
-
688
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:179
689
- msgid "Checkout Fields"
690
- msgstr ""
691
-
692
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:185
693
- msgid "Logo (Optional)"
694
- msgstr ""
695
-
696
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:250
697
- msgid "Add this shortcode to your checkout page"
698
- msgstr ""
699
-
700
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:302
701
- #. translators: %s: link
702
- msgid "Upgrade to %1$sCartFlows Pro%2$s for Order Bump feature"
703
- msgstr ""
704
-
705
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:330
706
- #. translators: %s: link
707
- msgid "Upgrade to %1$sCartFlows Pro%2$s for Custom Fields feature"
708
- msgstr ""
709
-
710
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:358
711
- msgid "One Column (Available in CartFlows Pro) "
712
- msgstr ""
713
-
714
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:359
715
- msgid "Two Step (Available in CartFlows Pro) "
716
- msgstr ""
717
-
718
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:365
719
- msgid "Checkout Skin"
720
- msgstr ""
721
-
722
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:369
723
- msgid "One Column"
724
- msgstr ""
725
-
726
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:370
727
- msgid "Two Column"
728
- msgstr ""
729
-
730
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:371
731
- msgid "Two Step"
732
- msgstr ""
733
-
734
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:380
735
- msgid "Primary Color"
736
- msgstr ""
737
-
738
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:389
739
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:424
740
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:470
741
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:562
742
- #: modules/thankyou/classes/class-cartflows-thankyou-meta.php:203
743
- #: modules/thankyou/classes/class-cartflows-thankyou-meta.php:226
744
- msgid "Font Family"
745
- msgstr ""
746
-
747
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:397
748
- msgid "Advance Options"
749
- msgstr ""
750
-
751
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:409
752
- #: modules/thankyou/classes/class-cartflows-thankyou-meta.php:211
753
- msgid "Heading"
754
- msgstr ""
755
-
756
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:415
757
- msgid "Heading Color"
758
- msgstr ""
759
-
760
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:433
761
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:479
762
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:571
763
- #: modules/thankyou/classes/class-cartflows-thankyou-meta.php:235
764
- msgid "Font Weight"
765
- msgstr ""
766
-
767
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:441
768
- msgid "Input Fields"
769
- msgstr ""
770
-
771
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:449
772
- msgid "Floating Labels (Available in CartFlows Pro)"
773
- msgstr ""
774
-
775
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:455
776
- msgid "Style"
777
- msgstr ""
778
-
779
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:460
780
- msgid "Floating Labels"
781
- msgstr ""
782
-
783
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:487
784
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:579
785
- msgid "Size"
786
- msgstr ""
787
-
788
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:491
789
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:583
790
- msgid "Extra Small"
791
- msgstr ""
792
-
793
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:492
794
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:584
795
- msgid "Small"
796
- msgstr ""
797
-
798
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:493
799
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:585
800
- msgid "Medium"
801
- msgstr ""
802
-
803
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:494
804
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:586
805
- msgid "Large"
806
- msgstr ""
807
-
808
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:495
809
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:587
810
- msgid "Extra Large"
811
- msgstr ""
812
-
813
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:496
814
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:588
815
- msgid "Custom"
816
- msgstr ""
817
-
818
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:503
819
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:595
820
- msgid "Top Bottom Spacing"
821
- msgstr ""
822
-
823
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:511
824
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:603
825
- msgid "Left Right Spacing"
826
- msgstr ""
827
-
828
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:519
829
- msgid "Text / Placeholder Color"
830
- msgstr ""
831
-
832
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:527
833
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:627
834
- msgid "Background Color"
835
- msgstr ""
836
-
837
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:535
838
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:643
839
- msgid "Border Color"
840
- msgstr ""
841
-
842
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:542
843
- msgid "Label Color"
844
- msgstr ""
845
-
846
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:555
847
- msgid "Buttons"
848
- msgstr ""
849
-
850
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:611
851
- msgid "Text Color"
852
- msgstr ""
853
-
854
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:619
855
- msgid "Text Hover Color"
856
- msgstr ""
857
-
858
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:635
859
- msgid "Background Hover Color"
860
- msgstr ""
861
-
862
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:651
863
- msgid "Border Hover Color"
864
- msgstr ""
865
-
866
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:664
867
- msgid "Sections"
868
- msgstr ""
869
-
870
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:670
871
- msgid "Highlight Area Background Color"
872
- msgstr ""
873
-
874
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:709
875
- msgid "Header Logo"
876
- msgstr ""
877
-
878
- #: modules/checkout/classes/class-cartflows-checkout-meta.php:717
879
- msgid "Logo Width (In px)"
880
- msgstr ""
881
-
882
- #: modules/checkout/templates/embed/checkout-template-simple.php:25
883
- #: modules/checkout/templates/wcf-template.php:36
884
- msgid "Your cart is currently empty."
885
- msgstr ""
886
-
887
- #: modules/checkout/templates/wcf-template.php:46
888
- msgid "Copyright &copy;"
889
- msgstr ""
890
-
891
- #: modules/checkout/templates/wcf-template.php:50
892
- msgid "All Rights Reserved"
893
- msgstr ""
894
-
895
- #: modules/flow/classes/class-cartflows-flow-meta.php:199
896
- #. translators: %s flow id
897
- msgid "Steps not created for flow - %s"
898
- msgstr ""
899
-
900
- #: modules/flow/classes/class-cartflows-flow-meta.php:213
901
- #. translators: %s flow id
902
- msgid "Steps already exists. Flow - %s"
903
- msgstr ""
904
-
905
- #: modules/flow/classes/class-cartflows-flow-meta.php:262
906
- #. translators: %s flow id
907
- msgid "Steps created for flow - %s"
908
- msgstr ""
909
-
910
- #: modules/flow/classes/class-cartflows-flow-meta.php:333
911
- #. translators: %s flow id
912
- msgid "Step not deleted for flow - %s"
913
- msgstr ""
914
-
915
- #: modules/flow/classes/class-cartflows-flow-meta.php:364
916
- #. translators: %s flow id
917
- msgid "Step deleted for flow - %s"
918
- msgstr ""
919
-
920
- #: modules/flow/classes/class-cartflows-flow-meta.php:387
921
- #. translators: %s flow id
922
- msgid "Steps not sorted for flow - %s"
923
- msgstr ""
924
-
925
- #: modules/flow/classes/class-cartflows-flow-meta.php:410
926
- #. translators: %s flow id
927
- msgid "Steps sorted for flow - %s"
928
- msgstr ""
929
-
930
- #: modules/flow/classes/class-cartflows-flow-meta.php:521
931
- msgid "Flow Settings"
932
- msgstr ""
933
-
934
- #: modules/flow/classes/class-cartflows-flow-meta.php:606
935
- msgid "Enable Test Mode"
936
- msgstr ""
937
-
938
- #: modules/flow/classes/class-cartflows-flow-meta.php:613
939
- msgid ""
940
- "Test mode adds random products in your flow, so you can preview it easily "
941
- "while testing."
942
- msgstr ""
943
-
944
- #: modules/flow/classes/class-cartflows-flow-post-type.php:57
945
- msgid "Search Flows"
946
- msgstr ""
947
-
948
- #: modules/flow/classes/class-cartflows-flow-post-type.php:58
949
- msgid "All Flows"
950
- msgstr ""
951
-
952
- #: modules/flow/classes/class-cartflows-flow-post-type.php:59
953
- msgid "Edit Flow"
954
- msgstr ""
955
-
956
- #: modules/flow/classes/class-cartflows-flow-post-type.php:60
957
- msgid "View Flow"
958
- msgstr ""
959
-
960
- #: modules/flow/classes/class-cartflows-flow-post-type.php:61
961
- #: modules/flow/classes/class-cartflows-flow-post-type.php:63
962
- #: modules/flow/classes/class-cartflows-step-post-type.php:150
963
- #: modules/flow/classes/class-cartflows-step-post-type.php:152
964
- msgid "Add New"
965
- msgstr ""
966
-
967
- #: modules/flow/classes/class-cartflows-flow-post-type.php:62
968
- msgid "Update Flow"
969
- msgstr ""
970
-
971
- #: modules/flow/classes/class-cartflows-flow-post-type.php:64
972
- msgid "New Flow Name"
973
- msgstr ""
974
-
975
- #: modules/flow/classes/class-cartflows-flow-post-type.php:123
976
- msgid "View"
977
- msgstr ""
978
-
979
- #: modules/flow/classes/class-cartflows-flow-post-type.php:230
980
- msgid "Flows"
981
- msgstr ""
982
-
983
- #: modules/flow/classes/class-cartflows-flow-post-type.php:252
984
- #: modules/flow/classes/class-cartflows-flow-post-type.php:258
985
- #: modules/flow/classes/class-cartflows-step-post-type.php:413
986
- #: modules/flow/classes/class-cartflows-step-post-type.php:419
987
- #. translators: %s: singular custom post type name
988
- msgid "%s updated."
989
- msgstr ""
990
-
991
- #: modules/flow/classes/class-cartflows-flow-post-type.php:254
992
- #: modules/flow/classes/class-cartflows-step-post-type.php:415
993
- #. translators: %s: singular custom post type name
994
- msgid "Custom %s updated."
995
- msgstr ""
996
-
997
- #: modules/flow/classes/class-cartflows-flow-post-type.php:256
998
- #: modules/flow/classes/class-cartflows-step-post-type.php:417
999
- #. translators: %s: singular custom post type name
1000
- msgid "Custom %s deleted."
1001
- msgstr ""
1002
-
1003
- #: modules/flow/classes/class-cartflows-flow-post-type.php:260
1004
- #: modules/flow/classes/class-cartflows-step-post-type.php:421
1005
- #. translators: %1$s: singular custom post type name ,%2$s: date and time of
1006
- #. the revision
1007
- msgid "%1$s restored to revision from %2$s"
1008
- msgstr ""
1009
-
1010
- #: modules/flow/classes/class-cartflows-flow-post-type.php:262
1011
- #: modules/flow/classes/class-cartflows-step-post-type.php:423
1012
- #. translators: %s: singular custom post type name
1013
- msgid "%s published."
1014
- msgstr ""
1015
-
1016
- #: modules/flow/classes/class-cartflows-flow-post-type.php:264
1017
- #: modules/flow/classes/class-cartflows-step-post-type.php:425
1018
- #. translators: %s: singular custom post type name
1019
- msgid "%s saved."
1020
- msgstr ""
1021
-
1022
- #: modules/flow/classes/class-cartflows-flow-post-type.php:266
1023
- #: modules/flow/classes/class-cartflows-step-post-type.php:427
1024
- #. translators: %s: singular custom post type name
1025
- msgid "%s submitted."
1026
- msgstr ""
1027
-
1028
- #: modules/flow/classes/class-cartflows-flow-post-type.php:268
1029
- #: modules/flow/classes/class-cartflows-step-post-type.php:429
1030
- #. translators: %s: singular custom post type name
1031
- msgid "%s scheduled for."
1032
- msgstr ""
1033
-
1034
- #: modules/flow/classes/class-cartflows-flow-post-type.php:270
1035
- #: modules/flow/classes/class-cartflows-step-post-type.php:431
1036
- #. translators: %s: singular custom post type name
1037
- msgid "%s draft updated."
1038
- msgstr ""
1039
-
1040
- #: modules/flow/classes/class-cartflows-flow-shortcodes.php:148
1041
- #: modules/widgets/class-cartflows-next-step.php:79
1042
- msgid "Next Step"
1043
- msgstr ""
1044
-
1045
- #: modules/flow/classes/class-cartflows-step-post-type.php:146
1046
- msgid "Search Steps"
1047
- msgstr ""
1048
-
1049
- #: modules/flow/classes/class-cartflows-step-post-type.php:147
1050
- msgid "All Steps"
1051
- msgstr ""
1052
-
1053
- #: modules/flow/classes/class-cartflows-step-post-type.php:148
1054
- #: modules/flow/view/meta-flow-steps.php:99
1055
- msgid "Edit Step"
1056
- msgstr ""
1057
-
1058
- #: modules/flow/classes/class-cartflows-step-post-type.php:149
1059
- #: modules/flow/view/meta-flow-steps.php:95
1060
- msgid "View Step"
1061
- msgstr ""
1062
-
1063
- #: modules/flow/classes/class-cartflows-step-post-type.php:151
1064
- msgid "Update Step"
1065
- msgstr ""
1066
-
1067
- #: modules/flow/classes/class-cartflows-step-post-type.php:153
1068
- msgid "New Step Name"
1069
- msgstr ""
1070
-
1071
- #: modules/flow/classes/class-cartflows-step-post-type.php:176
1072
- msgid "Step Type"
1073
- msgstr ""
1074
-
1075
- #: modules/flow/classes/class-cartflows-step-post-type.php:185
1076
- msgid "Step Flow"
1077
- msgstr ""
1078
-
1079
- #: modules/flow/classes/class-cartflows-step-post-type.php:202
1080
- #: modules/flow/view/meta-flow-steps.php:11
1081
- msgid "Landing"
1082
- msgstr ""
1083
-
1084
- #: modules/flow/classes/class-cartflows-step-post-type.php:208
1085
- #: modules/flow/view/meta-flow-steps.php:12
1086
- msgid "Checkout"
1087
- msgstr ""
1088
-
1089
- #: modules/flow/classes/class-cartflows-step-post-type.php:214
1090
- #: modules/flow/view/meta-flow-steps.php:13
1091
- msgid "Thank You"
1092
- msgstr ""
1093
-
1094
- #: modules/flow/classes/class-cartflows-step-post-type.php:220
1095
- #: modules/flow/view/meta-flow-steps.php:14
1096
- msgid "Upsell"
1097
- msgstr ""
1098
-
1099
- #: modules/flow/classes/class-cartflows-step-post-type.php:226
1100
- #: modules/flow/view/meta-flow-steps.php:15
1101
- msgid "Downsell"
1102
- msgstr ""
1103
-
1104
- #: modules/flow/view/meta-flow-steps.php:79
1105
- msgid "No Product Assigned"
1106
- msgstr ""
1107
-
1108
- #: modules/flow/view/meta-flow-steps.php:83
1109
- msgid "Global Checkout - Remove selected checkout product"
1110
- msgstr ""
1111
-
1112
- #: modules/flow/view/meta-flow-steps.php:103
1113
- msgid "Clone Step"
1114
- msgstr ""
1115
-
1116
- #: modules/flow/view/meta-flow-steps.php:107
1117
- msgid "Delete Step"
1118
- msgstr ""
1119
-
1120
- #: modules/flow/view/meta-flow-steps.php:122
1121
- msgid "Add New Step"
1122
- msgstr ""
1123
-
1124
- #: modules/flow/view/meta-flow-steps.php:138
1125
- msgid "Steps Library"
1126
- msgstr ""
1127
-
1128
- #: modules/flow/view/meta-flow-steps.php:188
1129
- msgid "Create Step"
1130
- msgstr ""
1131
-
1132
- #: modules/flow/view/meta-flow-steps.php:190
1133
- msgid "You need a Cartflows Pro version to import Upsell / Downsell"
1134
- msgstr ""
1135
-
1136
- #: modules/landing/classes/class-cartflows-landing-meta.php:66
1137
- msgid "Landing Page Settings"
1138
- msgstr ""
1139
-
1140
- #: modules/landing/classes/class-cartflows-landing-meta.php:169
1141
- msgid "Next Step Link"
1142
- msgstr ""
1143
-
1144
- #: modules/thankyou/classes/class-cartflows-thankyou-meta.php:65
1145
- msgid "Thank You Page Settings"
1146
- msgstr ""
1147
-
1148
- #: modules/thankyou/classes/class-cartflows-thankyou-meta.php:136
1149
- msgid "Thank You Design"
1150
- msgstr ""
1151
-
1152
- #: modules/thankyou/classes/class-cartflows-thankyou-meta.php:142
1153
- msgid "Thank You Fields"
1154
- msgstr ""
1155
-
1156
- #: modules/thankyou/classes/class-cartflows-thankyou-meta.php:176
1157
- msgid "Order Details"
1158
- msgstr ""
1159
-
1160
- #: modules/thankyou/classes/class-cartflows-thankyou-meta.php:188
1161
- msgid "Text"
1162
- msgstr ""
1163
-
1164
- #: modules/thankyou/classes/class-cartflows-thankyou-meta.php:194
1165
- #: modules/thankyou/classes/class-cartflows-thankyou-meta.php:217
1166
- msgid "Color"
1167
- msgstr ""
1168
-
1169
- #: modules/thankyou/classes/class-cartflows-thankyou-meta.php:243
1170
- msgid "Advanced Options"
1171
- msgstr ""
1172
-
1173
- #: modules/thankyou/classes/class-cartflows-thankyou-meta.php:253
1174
- msgid "Container Width (In px)"
1175
- msgstr ""
1176
-
1177
- #: modules/thankyou/classes/class-cartflows-thankyou-meta.php:261
1178
- msgid "Section Background Color"
1179
- msgstr ""
1180
-
1181
- #: modules/thankyou/classes/class-cartflows-thankyou-meta.php:275
1182
- msgid "Enable Order Overview "
1183
- msgstr ""
1184
-
1185
- #: modules/thankyou/classes/class-cartflows-thankyou-meta.php:283
1186
- msgid "Enable Order Details "
1187
- msgstr ""
1188
-
1189
- #: modules/thankyou/classes/class-cartflows-thankyou-meta.php:291
1190
- msgid "Enable Billing Details "
1191
- msgstr ""
1192
-
1193
- #: modules/thankyou/classes/class-cartflows-thankyou-meta.php:299
1194
- msgid "Enable Shipping Details "
1195
- msgstr ""
1196
-
1197
- #: modules/widgets/class-cartflows-next-step.php:25
1198
- msgid "CartFlows Next Step"
1199
- msgstr ""
1200
-
1201
- #: modules/widgets/class-cartflows-next-step.php:27
1202
- msgid "Next Step Widgets"
1203
- msgstr ""
1204
-
1205
- #: modules/widgets/class-cartflows-next-step.php:107
1206
- msgid "New title"
1207
- msgstr ""
1208
-
1209
- #: modules/widgets/class-cartflows-next-step.php:124
1210
- msgid "Title:"
1211
- msgstr ""
1212
-
1213
- #: modules/widgets/class-cartflows-next-step.php:128
1214
- msgid "Flow ID:"
1215
- msgstr ""
1216
-
1217
- #: modules/widgets/class-cartflows-next-step.php:132
1218
- msgid "Step ID:"
1219
- msgstr ""
1220
-
1221
- #: woocommerce/template/cart/cart-shipping.php:51
1222
- #. Translators: $s shipping destination.
1223
- msgid "Estimate for %s."
1224
- msgstr ""
1225
-
1226
- #: woocommerce/template/cart/cart-shipping.php:52
1227
- msgid "Change address"
1228
- msgstr ""
1229
-
1230
- #: woocommerce/template/cart/cart-shipping.php:54
1231
- msgid "This is only an estimate. Prices will be updated during checkout."
1232
- msgstr ""
1233
-
1234
- #: woocommerce/template/cart/cart-shipping.php:61
1235
- msgid "Enter your address to view shipping options."
1236
- msgstr ""
1237
-
1238
- #: woocommerce/template/cart/cart-shipping.php:63
1239
- msgid ""
1240
- "There are no shipping methods available. Please ensure that your address "
1241
- "has been entered correctly, or contact us if you need any help."
1242
- msgstr ""
1243
-
1244
- #: woocommerce/template/cart/cart-shipping.php:66
1245
- #. Translators: $s shipping destination.
1246
- msgid "No shipping options were found for %s."
1247
- msgstr ""
1248
-
1249
- #: woocommerce/template/cart/cart-shipping.php:67
1250
- msgid "Enter a different address"
1251
- msgstr ""
1252
-
1253
- #: woocommerce/template/checkout/form-billing.php:27
1254
- msgid "Billing &amp; Shipping"
1255
- msgstr ""
1256
-
1257
- #: woocommerce/template/checkout/form-billing.php:31
1258
- msgid "Billing details"
1259
- msgstr ""
1260
-
1261
- #: woocommerce/template/checkout/form-billing.php:59
1262
- msgid "Create an account?"
1263
- msgstr ""
1264
-
1265
- #: woocommerce/template/checkout/form-checkout.php:26
1266
- msgid "You must be logged in to checkout."
1267
- msgstr ""
1268
-
1269
- #: woocommerce/template/checkout/form-checkout.php:52
1270
- msgid "Your order"
1271
- msgstr ""
1272
-
1273
- #: woocommerce/template/checkout/form-coupon.php:26
1274
- msgid "Have a coupon?"
1275
- msgstr ""
1276
-
1277
- #: woocommerce/template/checkout/form-coupon.php:26
1278
- msgid "Click here to enter your code"
1279
- msgstr ""
1280
-
1281
- #: woocommerce/template/checkout/form-coupon.php:31
1282
- msgid "If you have a coupon code, please apply it below."
1283
- msgstr ""
1284
-
1285
- #: woocommerce/template/checkout/form-coupon.php:34
1286
- msgid "Coupon code"
1287
- msgstr ""
1288
-
1289
- #: woocommerce/template/checkout/form-coupon.php:38
1290
- msgid "Apply coupon"
1291
- msgstr ""
1292
-
1293
- #: woocommerce/template/checkout/form-login.php:26
1294
- msgid "Returning customer?"
1295
- msgstr ""
1296
-
1297
- #: woocommerce/template/checkout/form-login.php:26
1298
- msgid "Click here to login"
1299
- msgstr ""
1300
-
1301
- #: woocommerce/template/checkout/form-login.php:32
1302
- msgid ""
1303
- "If you have shopped with us before, please enter your details below. If you "
1304
- "are a new customer, please proceed to the Billing &amp; Shipping section."
1305
- msgstr ""
1306
-
1307
- #: woocommerce/template/checkout/payment.php:33
1308
- msgid ""
1309
- "Sorry, it seems that there are no available payment methods for your state. "
1310
- "Please contact us if you require assistance or wish to make alternate "
1311
- "arrangements."
1312
- msgstr ""
1313
-
1314
- #: woocommerce/template/checkout/payment.php:33
1315
- msgid "Please fill in your details above to see available payment methods."
1316
- msgstr ""
1317
-
1318
- #: woocommerce/template/checkout/payment.php:42
1319
- #. translators: $1 and $2 opening and closing emphasis tags respectively
1320
- msgid ""
1321
- "Since your browser does not support JavaScript, or it is disabled, please "
1322
- "ensure you click the %1$sUpdate Totals%2$s button before placing your "
1323
- "order. You may be charged more than the amount stated above if you fail to "
1324
- "do so."
1325
- msgstr ""
1326
-
1327
- #: woocommerce/template/checkout/payment.php:44
1328
- msgid "Update totals"
1329
- msgstr ""
1330
-
1331
- #: woocommerce/template/checkout/review-order.php:26
1332
- msgid "Product"
1333
- msgstr ""
1334
-
1335
- #: woocommerce/template/checkout/review-order.php:27
1336
- #: woocommerce/template/checkout/review-order.php:106
1337
- msgid "Total"
1338
- msgstr ""
1339
-
1340
- #: woocommerce/template/checkout/review-order.php:59
1341
- msgid "Subtotal"
1342
- msgstr ""
1343
-
1344
- #: woocommerce/template/checkout/thankyou.php:30
1345
- msgid ""
1346
- "Unfortunately your order cannot be processed as the originating "
1347
- "bank/merchant has declined your transaction. Please attempt your purchase "
1348
- "again."
1349
- msgstr ""
1350
-
1351
- #: woocommerce/template/checkout/thankyou.php:33
1352
- msgid "Pay"
1353
- msgstr ""
1354
-
1355
- #: woocommerce/template/checkout/thankyou.php:35
1356
- msgid "My account"
1357
- msgstr ""
1358
-
1359
- #: woocommerce/template/checkout/thankyou.php:41
1360
- #: woocommerce/template/checkout/thankyou.php:83
1361
- msgid "Thank you. Your order has been received."
1362
- msgstr ""
1363
-
1364
- #: woocommerce/template/checkout/thankyou.php:46
1365
- msgid "Order number:"
1366
- msgstr ""
1367
-
1368
- #: woocommerce/template/checkout/thankyou.php:51
1369
- msgid "Date:"
1370
- msgstr ""
1371
-
1372
- #: woocommerce/template/checkout/thankyou.php:57
1373
- msgid "Email:"
1374
- msgstr ""
1375
-
1376
- #: woocommerce/template/checkout/thankyou.php:63
1377
- msgid "Total:"
1378
- msgstr ""
1379
-
1380
- #: woocommerce/template/checkout/thankyou.php:69
1381
- msgid "Payment method:"
1382
- msgstr ""
1383
-
1384
- #: woocommerce/template/global/form-login.php:34
1385
- msgid "Username or email"
1386
- msgstr ""
1387
-
1388
- #: woocommerce/template/global/form-login.php:38
1389
- msgid "Password"
1390
- msgstr ""
1391
-
1392
- #: woocommerce/template/global/form-login.php:48
1393
- msgid "Login"
1394
- msgstr ""
1395
-
1396
- #: woocommerce/template/global/form-login.php:53
1397
- msgid "Remember me"
1398
- msgstr ""
1399
-
1400
- #: woocommerce/template/global/form-login.php:57
1401
- msgid "Lost your password?"
1402
- msgstr ""
1403
-
1404
- #. Plugin Name of the plugin/theme
1405
- msgid "CartFlows"
1406
- msgstr ""
1407
-
1408
- #. Author URI of the plugin/theme
1409
- msgid "https://cartflows.com/"
1410
- msgstr ""
1411
-
1412
- #. Description of the plugin/theme
1413
- msgid "Create beautiful checkout pages & sales flows for WooCommerce."
1414
- msgstr ""
1415
-
1416
- #. Author of the plugin/theme
1417
- msgid "CartFlows Inc"
1418
- msgstr ""
1419
-
1420
- #: modules/flow/classes/class-cartflows-flow-post-type.php:55
1421
- msgctxt "flow general name"
1422
- msgid "Flows"
1423
- msgstr ""
1424
-
1425
- #: modules/flow/classes/class-cartflows-flow-post-type.php:56
1426
- msgctxt "flow singular name"
1427
- msgid "Flow"
1428
- msgstr ""
1429
-
1430
- #: modules/flow/classes/class-cartflows-step-post-type.php:144
1431
- msgctxt "flow step general name"
1432
- msgid "Steps"
1433
- msgstr ""
1434
-
1435
- #: modules/flow/classes/class-cartflows-step-post-type.php:145
1436
- msgctxt "flow step singular name"
1437
- msgid "Step"
1438
- msgstr ""
1439
-
1440
- #: modules/flow/classes/class-cartflows-step-post-type.php:264
1441
- msgctxt "cartflows"
1442
- msgid "Template for Page Builders"
1443
  msgstr ""
1
+ # Copyright (C) 2019 CartFlows Inc
2
+ # This file is distributed under the same license as the CartFlows package.
3
+ msgid ""
4
+ msgstr ""
5
+ "Project-Id-Version: CartFlows 1.1.18\n"
6
+ "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/cartflows\n"
7
+ "POT-Creation-Date: 2019-05-10 10:29:04+00:00\n"
8
+ "MIME-Version: 1.0\n"
9
+ "Content-Type: text/plain; charset=utf-8\n"
10
+ "Content-Transfer-Encoding: 8bit\n"
11
+ "PO-Revision-Date: 2019-MO-DA HO:MI+ZONE\n"
12
+ "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13
+ "Language-Team: LANGUAGE <LL@li.org>\n"
14
+ "Language: en\n"
15
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
16
+ "X-Poedit-Country: United States\n"
17
+ "X-Poedit-SourceCharset: UTF-8\n"
18
+ "X-Poedit-KeywordsList: "
19
+ "__;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_"
20
+ "attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c;\n"
21
+ "X-Poedit-Basepath: ../\n"
22
+ "X-Poedit-SearchPath-0: .\n"
23
+ "X-Poedit-Bookmarks: \n"
24
+ "X-Textdomain-Support: yes\n"
25
+ "X-Generator: grunt-wp-i18n 1.0.3\n"
26
+
27
+ #: classes/batch-process/class-cartflows-importer-elementor.php:44
28
+ msgid "Invalid content."
29
+ msgstr ""
30
+
31
+ #: classes/batch-process/class-cartflows-importer-elementor.php:52
32
+ msgid "Invalid content. Expected an array."
33
+ msgstr ""
34
+
35
+ #: classes/batch-process/helpers/class-wp-background-process.php:435
36
+ msgid "Every %d Minutes"
37
+ msgstr ""
38
+
39
+ #: classes/class-cartflows-admin-fields.php:162
40
+ msgid "Select"
41
+ msgstr ""
42
+
43
+ #: classes/class-cartflows-admin-fields.php:165
44
+ msgid "No Checkout Steps"
45
+ msgstr ""
46
+
47
+ #: classes/class-cartflows-admin-fields.php:191
48
+ #. translators: %s: link
49
+ msgid ""
50
+ "Be sure not to add any product in above selected Global Checkout step. "
51
+ "Please read information about how to set up Global Checkout %1$shere%2$s."
52
+ msgstr ""
53
+
54
+ #: classes/class-cartflows-admin.php:136 classes/class-cartflows-admin.php:137
55
+ #: includes/admin/cartflows-general-bck.php:34
56
+ msgid "Settings"
57
+ msgstr ""
58
+
59
+ #: classes/class-cartflows-admin.php:380
60
+ msgid "Flows Library"
61
+ msgstr ""
62
+
63
+ #: classes/class-cartflows-admin.php:387
64
+ #: modules/flow/view/meta-flow-steps.php:145
65
+ msgid "Ready Templates"
66
+ msgstr ""
67
+
68
+ #: classes/class-cartflows-admin.php:390
69
+ #: modules/flow/view/meta-flow-steps.php:148
70
+ msgid "Create Your Own"
71
+ msgstr ""
72
+
73
+ #: classes/class-cartflows-admin.php:401
74
+ #: modules/flow/view/meta-flow-steps.php:160
75
+ msgid "Search Sites"
76
+ msgstr ""
77
+
78
+ #: classes/class-cartflows-admin.php:402
79
+ #: modules/flow/view/meta-flow-steps.php:161
80
+ msgid "Search Flow..."
81
+ msgstr ""
82
+
83
+ #: classes/class-cartflows-admin.php:419
84
+ msgid "Design Your Flow"
85
+ msgstr ""
86
+
87
+ #: classes/class-cartflows-admin.php:420
88
+ #: modules/flow/view/meta-flow-steps.php:192
89
+ msgid "Learn How"
90
+ msgstr ""
91
+
92
+ #: classes/class-cartflows-api.php:368
93
+ msgid "Request successfully processed!"
94
+ msgstr ""
95
+
96
+ #: classes/class-cartflows-cloning.php:423
97
+ msgid "Clone this flow"
98
+ msgstr ""
99
+
100
+ #: classes/class-cartflows-cloning.php:423
101
+ msgid "Clone"
102
+ msgstr ""
103
+
104
+ #: classes/class-cartflows-flow-frontend.php:52
105
+ msgid ""
106
+ "Test mode is active — which displays random products for previewing. It can "
107
+ "be deactivated from the flow settings in the admin dashboard."
108
+ msgstr ""
109
+
110
+ #: classes/class-cartflows-importer.php:80
111
+ msgid "Export this flow"
112
+ msgstr ""
113
+
114
+ #: classes/class-cartflows-importer.php:80 includes/exporter.php:18
115
+ msgid "Export"
116
+ msgstr ""
117
+
118
+ #: classes/class-cartflows-importer.php:91
119
+ msgid "Flow Export"
120
+ msgstr ""
121
+
122
+ #: classes/class-cartflows-importer.php:92
123
+ msgid "Flow Import"
124
+ msgstr ""
125
+
126
+ #: classes/class-cartflows-importer.php:103
127
+ msgid "No post to export has been supplied!"
128
+ msgstr ""
129
+
130
+ #: classes/class-cartflows-importer.php:294
131
+ msgid "Please upload a valid .json file"
132
+ msgstr ""
133
+
134
+ #: classes/class-cartflows-importer.php:300
135
+ msgid "Please upload a file to import"
136
+ msgstr ""
137
+
138
+ #: classes/class-cartflows-importer.php:438
139
+ msgid "Successfully imported flows."
140
+ msgstr ""
141
+
142
+ #: classes/class-cartflows-importer.php:470
143
+ msgid "Loading Steps"
144
+ msgstr ""
145
+
146
+ #: classes/class-cartflows-importer.php:472
147
+ msgid "Getting steps from the cloud. Please wait for the moment."
148
+ msgstr ""
149
+
150
+ #: classes/class-cartflows-importer.php:483
151
+ msgid "Searching Template.."
152
+ msgstr ""
153
+
154
+ #: classes/class-cartflows-importer.php:485
155
+ msgid "Getting templates from the cloud. Please wait for the moment."
156
+ msgstr ""
157
+
158
+ #: classes/class-cartflows-importer.php:494
159
+ msgid "Importing.."
160
+ msgstr ""
161
+
162
+ #: classes/class-cartflows-importer.php:503
163
+ #: classes/class-cartflows-importer.php:543
164
+ msgid "Imported"
165
+ msgstr ""
166
+
167
+ #: classes/class-cartflows-importer.php:504
168
+ #: classes/class-cartflows-importer.php:544
169
+ msgid "Thanks for patience"
170
+ msgstr ""
171
+
172
+ #: classes/class-cartflows-importer.php:513
173
+ #: classes/class-cartflows-importer.php:525
174
+ msgid "Coming Soon!"
175
+ msgstr ""
176
+
177
+ #: classes/class-cartflows-importer.php:544
178
+ msgid "Redirecting to the Elementor edit window."
179
+ msgstr ""
180
+
181
+ #: classes/class-cartflows-importer.php:591
182
+ #: classes/class-cartflows-importer.php:675
183
+ msgid "Pro"
184
+ msgstr ""
185
+
186
+ #: classes/class-cartflows-importer.php:614
187
+ #: classes/class-cartflows-importer.php:701
188
+ msgid "Activate License"
189
+ msgstr ""
190
+
191
+ #: classes/class-cartflows-importer.php:616
192
+ #: classes/class-cartflows-importer.php:703
193
+ msgid "Get Pro"
194
+ msgstr ""
195
+
196
+ #: classes/class-cartflows-importer.php:641
197
+ msgid "Create"
198
+ msgstr ""
199
+
200
+ #: classes/class-cartflows-importer.php:720
201
+ msgid "Under Maintenance.."
202
+ msgstr ""
203
+
204
+ #: classes/class-cartflows-importer.php:721
205
+ msgid ""
206
+ "If you are seeing this message, most likely our servers are under routine "
207
+ "maintenance and we will be back shortly."
208
+ msgstr ""
209
+
210
+ #: classes/class-cartflows-importer.php:722
211
+ msgid ""
212
+ "In rare case, it is possible your website is having trouble connecting with "
213
+ "ours. If you need help, please feel free to get in touch with us from our "
214
+ "website.."
215
+ msgstr ""
216
+
217
+ #: classes/class-cartflows-importer.php:752
218
+ #. translators: %s: Plugin string
219
+ msgid ""
220
+ "%1$s to see CartFlows templates. If you prefer another page builder tool, "
221
+ "you can <a href=\"%2$s\" target=\"blank\">select it here</a>."
222
+ msgstr ""
223
+
224
+ #: classes/class-cartflows-importer.php:767
225
+ msgid "All"
226
+ msgstr ""
227
+
228
+ #: classes/class-cartflows-importer.php:770
229
+ msgid "Select Step Type"
230
+ msgstr ""
231
+
232
+ #: classes/class-cartflows-importer.php:847
233
+ msgid "Import from Cloud"
234
+ msgstr ""
235
+
236
+ #: classes/class-cartflows-importer.php:1149
237
+ #: modules/flow/classes/class-cartflows-flow-meta.php:224
238
+ msgid "Landing Page"
239
+ msgstr ""
240
+
241
+ #: classes/class-cartflows-importer.php:1150
242
+ #: modules/flow/classes/class-cartflows-flow-meta.php:225
243
+ msgid "Checkout Page"
244
+ msgstr ""
245
+
246
+ #: classes/class-cartflows-importer.php:1151
247
+ #: modules/flow/classes/class-cartflows-flow-meta.php:226
248
+ msgid "Thank You Page"
249
+ msgstr ""
250
+
251
+ #: classes/class-cartflows-importer.php:1259
252
+ #. translators: %s: template ID
253
+ msgid "Invalid template id %1$s or post id %2$s."
254
+ msgstr ""
255
+
256
+ #: classes/class-cartflows-importer.php:1317
257
+ #. translators: %s: flow ID
258
+ msgid "Invalid flow id %1$s OR step type %2$s."
259
+ msgstr ""
260
+
261
+ #: classes/class-cartflows-importer.php:1438
262
+ msgid ""
263
+ "Elementor is not activated. Please activate plugin Elementor Page Builder "
264
+ "to import the step."
265
+ msgstr ""
266
+
267
+ #: classes/class-cartflows-importer.php:1556
268
+ msgid "Plugin Successfully Activated"
269
+ msgstr ""
270
+
271
+ #: classes/class-cartflows-loader.php:368
272
+ #. translators: %s: html tags
273
+ msgid ""
274
+ "The %1$sCartFlows%2$s plugin requires %1$sWooCommerce%2$s plugin installed "
275
+ "& activated."
276
+ msgstr ""
277
+
278
+ #: classes/class-cartflows-loader.php:378
279
+ msgid "Activate WooCommerce"
280
+ msgstr ""
281
+
282
+ #: classes/class-cartflows-loader.php:386
283
+ msgid "Install WooCommerce"
284
+ msgstr ""
285
+
286
+ #: classes/class-cartflows-meta-fields.php:86
287
+ msgid "Thin 100"
288
+ msgstr ""
289
+
290
+ #: classes/class-cartflows-meta-fields.php:87
291
+ msgid "Extra-Light 200"
292
+ msgstr ""
293
+
294
+ #: classes/class-cartflows-meta-fields.php:88
295
+ msgid "Light 300"
296
+ msgstr ""
297
+
298
+ #: classes/class-cartflows-meta-fields.php:89
299
+ msgid "Normal 400"
300
+ msgstr ""
301
+
302
+ #: classes/class-cartflows-meta-fields.php:90
303
+ msgid "Medium 500"
304
+ msgstr ""
305
+
306
+ #: classes/class-cartflows-meta-fields.php:91
307
+ msgid "Semi-Bold 600"
308
+ msgstr ""
309
+
310
+ #: classes/class-cartflows-meta-fields.php:92
311
+ msgid "Bold 700"
312
+ msgstr ""
313
+
314
+ #: classes/class-cartflows-meta-fields.php:93
315
+ msgid "Extra-Bold 800"
316
+ msgstr ""
317
+
318
+ #: classes/class-cartflows-meta-fields.php:94
319
+ msgid "Ultra-Bold 900"
320
+ msgstr ""
321
+
322
+ #: classes/class-cartflows-meta-fields.php:217
323
+ #: classes/class-cartflows-meta-fields.php:325
324
+ #: classes/class-cartflows-meta-fields.php:1417
325
+ msgid "Remove"
326
+ msgstr ""
327
+
328
+ #: classes/class-cartflows-meta-fields.php:446
329
+ msgid "Field Width"
330
+ msgstr ""
331
+
332
+ #: classes/class-cartflows-meta-fields.php:450
333
+ msgid "33%"
334
+ msgstr ""
335
+
336
+ #: classes/class-cartflows-meta-fields.php:451
337
+ msgid "50%"
338
+ msgstr ""
339
+
340
+ #: classes/class-cartflows-meta-fields.php:452
341
+ msgid "100%"
342
+ msgstr ""
343
+
344
+ #: classes/class-cartflows-meta-fields.php:463
345
+ msgid "Field Label"
346
+ msgstr ""
347
+
348
+ #: classes/class-cartflows-meta-fields.php:477
349
+ msgid "Options"
350
+ msgstr ""
351
+
352
+ #: classes/class-cartflows-meta-fields.php:492
353
+ #: classes/class-cartflows-meta-fields.php:505
354
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:459
355
+ msgid "Default"
356
+ msgstr ""
357
+
358
+ #: classes/class-cartflows-meta-fields.php:496
359
+ msgid "Checked"
360
+ msgstr ""
361
+
362
+ #: classes/class-cartflows-meta-fields.php:497
363
+ msgid "Un-Checked"
364
+ msgstr ""
365
+
366
+ #: classes/class-cartflows-meta-fields.php:518
367
+ msgid "Placeholder"
368
+ msgstr ""
369
+
370
+ #: classes/class-cartflows-meta-fields.php:530
371
+ msgid "Required"
372
+ msgstr ""
373
+
374
+ #: classes/class-cartflows-meta-fields.php:542
375
+ msgid "Enable this field"
376
+ msgstr ""
377
+
378
+ #: classes/class-cartflows-meta-fields.php:562
379
+ msgid "Label"
380
+ msgstr ""
381
+
382
+ #: classes/class-cartflows-meta-fields.php:990
383
+ #: classes/class-cartflows-meta-fields.php:1409
384
+ msgid "Search for a product&hellip;"
385
+ msgstr ""
386
+
387
+ #: classes/class-cartflows-meta-fields.php:1031
388
+ msgid "Search for a coupon&hellip;"
389
+ msgstr ""
390
+
391
+ #: classes/class-cartflows-meta.php:34
392
+ msgid "Update"
393
+ msgstr ""
394
+
395
+ #: classes/class-cartflows-meta.php:42
396
+ #: modules/flow/classes/class-cartflows-flow-meta.php:84
397
+ msgid "Back to edit Flow"
398
+ msgstr ""
399
+
400
+ #: classes/class-cartflows-meta.php:63
401
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:191
402
+ #: modules/landing/classes/class-cartflows-landing-meta.php:136
403
+ #: modules/thankyou/classes/class-cartflows-thankyou-meta.php:148
404
+ msgid "Custom Script"
405
+ msgstr ""
406
+
407
+ #: classes/class-cartflows-meta.php:66
408
+ msgid ""
409
+ "Custom script lets you add your own custom script on front end of this flow "
410
+ "page."
411
+ msgstr ""
412
+
413
+ #: classes/class-cartflows-wizard.php:45
414
+ msgid "Thanks for installing and using CartFlows!"
415
+ msgstr ""
416
+
417
+ #: classes/class-cartflows-wizard.php:46
418
+ msgid ""
419
+ "It is easy to use the CartFlows. Please use the setup wizard to quick start "
420
+ "setup."
421
+ msgstr ""
422
+
423
+ #: classes/class-cartflows-wizard.php:71
424
+ #: includes/admin/cartflows-general-bck.php:24
425
+ msgid "Welcome"
426
+ msgstr ""
427
+
428
+ #: classes/class-cartflows-wizard.php:76 classes/class-cartflows-wizard.php:259
429
+ msgid "Page Builder"
430
+ msgstr ""
431
+
432
+ #: classes/class-cartflows-wizard.php:81
433
+ msgid "Ready!"
434
+ msgstr ""
435
+
436
+ #: classes/class-cartflows-wizard.php:150
437
+ msgid "CartFlows Setup"
438
+ msgstr ""
439
+
440
+ #: classes/class-cartflows-wizard.php:176
441
+ msgid "Exit Setup Wizard"
442
+ msgstr ""
443
+
444
+ #: classes/class-cartflows-wizard.php:225
445
+ msgid "Thank you for choosing CartFlows!"
446
+ msgstr ""
447
+
448
+ #: classes/class-cartflows-wizard.php:232
449
+ msgid "Lets Go »"
450
+ msgstr ""
451
+
452
+ #: classes/class-cartflows-wizard.php:260
453
+ msgid "Select a page builder which you want to use for creating your new flows."
454
+ msgstr ""
455
+
456
+ #: classes/class-cartflows-wizard.php:265
457
+ msgid "Select Page Builder"
458
+ msgstr ""
459
+
460
+ #: classes/class-cartflows-wizard.php:266
461
+ msgid "Add locations for where this Schema should appear."
462
+ msgstr ""
463
+
464
+ #: classes/class-cartflows-wizard.php:273
465
+ #: includes/admin/cartflows-general.php:76
466
+ msgid "Elementor"
467
+ msgstr ""
468
+
469
+ #: classes/class-cartflows-wizard.php:294
470
+ msgid "The above plugin will be installed and activated for you!"
471
+ msgstr ""
472
+
473
+ #: classes/class-cartflows-wizard.php:297
474
+ msgid "« Previous"
475
+ msgstr ""
476
+
477
+ #: classes/class-cartflows-wizard.php:300
478
+ #: classes/class-cartflows-wizard.php:301
479
+ msgid "Next »"
480
+ msgstr ""
481
+
482
+ #: classes/class-cartflows-wizard.php:393
483
+ msgid "Congratulations!"
484
+ msgstr ""
485
+
486
+ #: classes/class-cartflows-wizard.php:400
487
+ msgid ""
488
+ "You've successfully completed the setup before you begin setting now you "
489
+ "can use it."
490
+ msgstr ""
491
+
492
+ #: classes/class-cartflows-wizard.php:414
493
+ msgid "Create a flow"
494
+ msgstr ""
495
+
496
+ #: includes/admin/cartflows-admin.php:19
497
+ #: includes/admin/cartflows-general.php:33
498
+ msgid "Modernizing WordPress eCommerce!"
499
+ msgstr ""
500
+
501
+ #: includes/admin/cartflows-admin.php:29
502
+ msgid "Settings saved successfully."
503
+ msgstr ""
504
+
505
+ #: includes/admin/cartflows-general-bck.php:10
506
+ msgid "Selec"
507
+ msgstr ""
508
+
509
+ #: includes/admin/cartflows-general-bck.php:22
510
+ msgid "General"
511
+ msgstr ""
512
+
513
+ #: includes/admin/cartflows-general.php:18
514
+ #: includes/admin/cartflows-general.php:41
515
+ msgid "General Settings"
516
+ msgstr ""
517
+
518
+ #: includes/admin/cartflows-general.php:25
519
+ msgid "Getting Started"
520
+ msgstr ""
521
+
522
+ #: includes/admin/cartflows-general.php:54
523
+ msgid "Disallow search engines from indexing flows"
524
+ msgstr ""
525
+
526
+ #: includes/admin/cartflows-general.php:63
527
+ #: modules/flow/view/meta-flow-steps.php:87
528
+ msgid "Global Checkout"
529
+ msgstr ""
530
+
531
+ #: includes/admin/cartflows-general.php:72
532
+ msgid "Show Templates designed with"
533
+ msgstr ""
534
+
535
+ #: includes/admin/cartflows-general.php:73
536
+ msgid ""
537
+ "CartFlows offers flow templates that can be imported in one click. These "
538
+ "templates are available in few different page builders. Please choose your "
539
+ "preferred page builder from the list so you will only see templates that "
540
+ "are made using that page builder.."
541
+ msgstr ""
542
+
543
+ #: includes/admin/cartflows-general.php:77
544
+ msgid "Beaver Builder"
545
+ msgstr ""
546
+
547
+ #: includes/admin/cartflows-general.php:78
548
+ msgid "Divi"
549
+ msgstr ""
550
+
551
+ #: includes/admin/cartflows-general.php:79
552
+ msgid "Other"
553
+ msgstr ""
554
+
555
+ #: includes/admin/cartflows-general.php:88
556
+ msgid "Save Changes"
557
+ msgstr ""
558
+
559
+ #: includes/admin/cartflows-general.php:100
560
+ msgid "Knowledge Base"
561
+ msgstr ""
562
+
563
+ #: includes/admin/cartflows-general.php:104
564
+ msgid "Not sure how something works? Take a peek at the knowledge base and learn."
565
+ msgstr ""
566
+
567
+ #: includes/admin/cartflows-general.php:107
568
+ msgid "Visit Knowledge Base »"
569
+ msgstr ""
570
+
571
+ #: includes/admin/cartflows-general.php:115
572
+ msgid "Community"
573
+ msgstr ""
574
+
575
+ #: includes/admin/cartflows-general.php:119
576
+ msgid ""
577
+ "Join the community of super helpful CartFlows users. Say hello, ask "
578
+ "questions, give feedback and help each other!"
579
+ msgstr ""
580
+
581
+ #: includes/admin/cartflows-general.php:122
582
+ msgid "Join Our Facebook Group »"
583
+ msgstr ""
584
+
585
+ #: includes/admin/cartflows-general.php:130
586
+ msgid "Five Star Support"
587
+ msgstr ""
588
+
589
+ #: includes/admin/cartflows-general.php:134
590
+ msgid "Got a question? Get in touch with CartFlows developers. We're happy to help!"
591
+ msgstr ""
592
+
593
+ #: includes/admin/cartflows-general.php:137
594
+ msgid "Submit a Ticket »"
595
+ msgstr ""
596
+
597
+ #: includes/admin/cartflows-general.php:147
598
+ msgid "Load Minified CSS"
599
+ msgstr ""
600
+
601
+ #: includes/admin/cartflows-general.php:152
602
+ msgid ""
603
+ "Load the Minified CSS from here. Just Enable it by checking the below given "
604
+ "checkbox."
605
+ msgstr ""
606
+
607
+ #: includes/admin/cartflows-general.php:159
608
+ msgid "Load minified CSS & JS Files"
609
+ msgstr ""
610
+
611
+ #: includes/admin/cartflows-general.php:164
612
+ msgid "Save"
613
+ msgstr ""
614
+
615
+ #: includes/exporter.php:12
616
+ msgid "Export Flows to a JSON file"
617
+ msgstr ""
618
+
619
+ #: includes/exporter.php:13
620
+ msgid ""
621
+ "This tool allows you to generate and download a JSON file containing a list "
622
+ "of all flows."
623
+ msgstr ""
624
+
625
+ #: includes/importer.php:12
626
+ msgid "Import Flows to a JSON file"
627
+ msgstr ""
628
+
629
+ #: includes/importer.php:13
630
+ msgid "This tool allows you to import the flows from the JSON file."
631
+ msgstr ""
632
+
633
+ #: includes/importer.php:21
634
+ msgid "Import"
635
+ msgstr ""
636
+
637
+ #: modules/checkout/classes/class-cartflows-checkout-markup.php:161
638
+ #: modules/thankyou/classes/class-cartflows-thankyou-markup.php:62
639
+ msgid ""
640
+ "WooCommerce functions not exists. If you are in iframe, please reload the "
641
+ "iframe"
642
+ msgstr ""
643
+
644
+ #: modules/checkout/classes/class-cartflows-checkout-markup.php:177
645
+ msgid "Checkout ID not found"
646
+ msgstr ""
647
+
648
+ #: modules/checkout/classes/class-cartflows-checkout-markup.php:343
649
+ msgid "Variations Not set"
650
+ msgstr ""
651
+
652
+ #: modules/checkout/classes/class-cartflows-checkout-markup.php:352
653
+ msgid "This product can't be purcahsed"
654
+ msgstr ""
655
+
656
+ #: modules/checkout/classes/class-cartflows-checkout-markup.php:948
657
+ #: modules/checkout/classes/class-cartflows-checkout-markup.php:979
658
+ msgid "Coupon Code"
659
+ msgstr ""
660
+
661
+ #: modules/checkout/classes/class-cartflows-checkout-markup.php:953
662
+ #: modules/checkout/classes/class-cartflows-checkout-markup.php:988
663
+ msgid "Apply"
664
+ msgstr ""
665
+
666
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:68
667
+ msgid "Checkout Layout"
668
+ msgstr ""
669
+
670
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:155
671
+ #: modules/landing/classes/class-cartflows-landing-meta.php:130
672
+ #: modules/thankyou/classes/class-cartflows-thankyou-meta.php:130
673
+ msgid "Shortcodes"
674
+ msgstr ""
675
+
676
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:161
677
+ msgid "Select Product"
678
+ msgstr ""
679
+
680
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:167
681
+ msgid "Order Bump"
682
+ msgstr ""
683
+
684
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:173
685
+ msgid "Checkout Design"
686
+ msgstr ""
687
+
688
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:179
689
+ msgid "Checkout Fields"
690
+ msgstr ""
691
+
692
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:185
693
+ msgid "Logo (Optional)"
694
+ msgstr ""
695
+
696
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:250
697
+ msgid "Add this shortcode to your checkout page"
698
+ msgstr ""
699
+
700
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:302
701
+ #. translators: %s: link
702
+ msgid "Upgrade to %1$sCartFlows Pro%2$s for Order Bump feature"
703
+ msgstr ""
704
+
705
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:330
706
+ #. translators: %s: link
707
+ msgid "Upgrade to %1$sCartFlows Pro%2$s for Custom Fields feature"
708
+ msgstr ""
709
+
710
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:358
711
+ msgid "One Column (Available in CartFlows Pro) "
712
+ msgstr ""
713
+
714
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:359
715
+ msgid "Two Step (Available in CartFlows Pro) "
716
+ msgstr ""
717
+
718
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:365
719
+ msgid "Checkout Skin"
720
+ msgstr ""
721
+
722
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:369
723
+ msgid "One Column"
724
+ msgstr ""
725
+
726
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:370
727
+ msgid "Two Column"
728
+ msgstr ""
729
+
730
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:371
731
+ msgid "Two Step"
732
+ msgstr ""
733
+
734
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:380
735
+ msgid "Primary Color"
736
+ msgstr ""
737
+
738
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:389
739
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:424
740
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:470
741
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:562
742
+ #: modules/thankyou/classes/class-cartflows-thankyou-meta.php:203
743
+ #: modules/thankyou/classes/class-cartflows-thankyou-meta.php:226
744
+ msgid "Font Family"
745
+ msgstr ""
746
+
747
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:397
748
+ msgid "Advance Options"
749
+ msgstr ""
750
+
751
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:409
752
+ #: modules/thankyou/classes/class-cartflows-thankyou-meta.php:211
753
+ msgid "Heading"
754
+ msgstr ""
755
+
756
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:415
757
+ msgid "Heading Color"
758
+ msgstr ""
759
+
760
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:433
761
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:479
762
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:571
763
+ #: modules/thankyou/classes/class-cartflows-thankyou-meta.php:235
764
+ msgid "Font Weight"
765
+ msgstr ""
766
+
767
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:441
768
+ msgid "Input Fields"
769
+ msgstr ""
770
+
771
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:449
772
+ msgid "Floating Labels (Available in CartFlows Pro)"
773
+ msgstr ""
774
+
775
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:455
776
+ msgid "Style"
777
+ msgstr ""
778
+
779
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:460
780
+ msgid "Floating Labels"
781
+ msgstr ""
782
+
783
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:487
784
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:579
785
+ msgid "Size"
786
+ msgstr ""
787
+
788
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:491
789
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:583
790
+ msgid "Extra Small"
791
+ msgstr ""
792
+
793
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:492
794
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:584
795
+ msgid "Small"
796
+ msgstr ""
797
+
798
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:493
799
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:585
800
+ msgid "Medium"
801
+ msgstr ""
802
+
803
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:494
804
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:586
805
+ msgid "Large"
806
+ msgstr ""
807
+
808
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:495
809
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:587
810
+ msgid "Extra Large"
811
+ msgstr ""
812
+
813
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:496
814
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:588
815
+ msgid "Custom"
816
+ msgstr ""
817
+
818
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:503
819
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:595
820
+ msgid "Top Bottom Spacing"
821
+ msgstr ""
822
+
823
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:511
824
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:603
825
+ msgid "Left Right Spacing"
826
+ msgstr ""
827
+
828
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:519
829
+ msgid "Text / Placeholder Color"
830
+ msgstr ""
831
+
832
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:527
833
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:627
834
+ msgid "Background Color"
835
+ msgstr ""
836
+
837
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:535
838
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:643
839
+ msgid "Border Color"
840
+ msgstr ""
841
+
842
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:542
843
+ msgid "Label Color"
844
+ msgstr ""
845
+
846
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:555
847
+ msgid "Buttons"
848
+ msgstr ""
849
+
850
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:611
851
+ msgid "Text Color"
852
+ msgstr ""
853
+
854
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:619
855
+ msgid "Text Hover Color"
856
+ msgstr ""
857
+
858
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:635
859
+ msgid "Background Hover Color"
860
+ msgstr ""
861
+
862
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:651
863
+ msgid "Border Hover Color"
864
+ msgstr ""
865
+
866
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:664
867
+ msgid "Sections"
868
+ msgstr ""
869
+
870
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:670
871
+ msgid "Highlight Area Background Color"
872
+ msgstr ""
873
+
874
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:709
875
+ msgid "Header Logo"
876
+ msgstr ""
877
+
878
+ #: modules/checkout/classes/class-cartflows-checkout-meta.php:717
879
+ msgid "Logo Width (In px)"
880
+ msgstr ""
881
+
882
+ #: modules/checkout/templates/embed/checkout-template-simple.php:25
883
+ #: modules/checkout/templates/wcf-template.php:36
884
+ msgid "Your cart is currently empty."
885
+ msgstr ""
886
+
887
+ #: modules/checkout/templates/wcf-template.php:46
888
+ msgid "Copyright &copy;"
889
+ msgstr ""
890
+
891
+ #: modules/checkout/templates/wcf-template.php:50
892
+ msgid "All Rights Reserved"
893
+ msgstr ""
894
+
895
+ #: modules/flow/classes/class-cartflows-flow-meta.php:199
896
+ #. translators: %s flow id
897
+ msgid "Steps not created for flow - %s"
898
+ msgstr ""
899
+
900
+ #: modules/flow/classes/class-cartflows-flow-meta.php:213
901
+ #. translators: %s flow id
902
+ msgid "Steps already exists. Flow - %s"
903
+ msgstr ""
904
+
905
+ #: modules/flow/classes/class-cartflows-flow-meta.php:262
906
+ #. translators: %s flow id
907
+ msgid "Steps created for flow - %s"
908
+ msgstr ""
909
+
910
+ #: modules/flow/classes/class-cartflows-flow-meta.php:333
911
+ #. translators: %s flow id
912
+ msgid "Step not deleted for flow - %s"
913
+ msgstr ""
914
+
915
+ #: modules/flow/classes/class-cartflows-flow-meta.php:364
916
+ #. translators: %s flow id
917
+ msgid "Step deleted for flow - %s"
918
+ msgstr ""
919
+
920
+ #: modules/flow/classes/class-cartflows-flow-meta.php:387
921
+ #. translators: %s flow id
922
+ msgid "Steps not sorted for flow - %s"
923
+ msgstr ""
924
+
925
+ #: modules/flow/classes/class-cartflows-flow-meta.php:410
926
+ #. translators: %s flow id
927
+ msgid "Steps sorted for flow - %s"
928
+ msgstr ""
929
+
930
+ #: modules/flow/classes/class-cartflows-flow-meta.php:521
931
+ msgid "Flow Settings"
932
+ msgstr ""
933
+
934
+ #: modules/flow/classes/class-cartflows-flow-meta.php:606
935
+ msgid "Enable Test Mode"
936
+ msgstr ""
937
+
938
+ #: modules/flow/classes/class-cartflows-flow-meta.php:613
939
+ msgid ""
940
+ "Test mode adds random products in your flow, so you can preview it easily "
941
+ "while testing."
942
+ msgstr ""
943
+
944
+ #: modules/flow/classes/class-cartflows-flow-post-type.php:57
945
+ msgid "Search Flows"
946
+ msgstr ""
947
+
948
+ #: modules/flow/classes/class-cartflows-flow-post-type.php:58
949
+ msgid "All Flows"
950
+ msgstr ""
951
+
952
+ #: modules/flow/classes/class-cartflows-flow-post-type.php:59
953
+ msgid "Edit Flow"
954
+ msgstr ""
955
+
956
+ #: modules/flow/classes/class-cartflows-flow-post-type.php:60
957
+ msgid "View Flow"
958
+ msgstr ""
959
+
960
+ #: modules/flow/classes/class-cartflows-flow-post-type.php:61
961
+ #: modules/flow/classes/class-cartflows-flow-post-type.php:63
962
+ #: modules/flow/classes/class-cartflows-step-post-type.php:150
963
+ #: modules/flow/classes/class-cartflows-step-post-type.php:152
964
+ msgid "Add New"
965
+ msgstr ""
966
+
967
+ #: modules/flow/classes/class-cartflows-flow-post-type.php:62
968
+ msgid "Update Flow"
969
+ msgstr ""
970
+
971
+ #: modules/flow/classes/class-cartflows-flow-post-type.php:64
972
+ msgid "New Flow Name"
973
+ msgstr ""
974
+
975
+ #: modules/flow/classes/class-cartflows-flow-post-type.php:123
976
+ msgid "View"
977
+ msgstr ""
978
+
979
+ #: modules/flow/classes/class-cartflows-flow-post-type.php:230
980
+ msgid "Flows"
981
+ msgstr ""
982
+
983
+ #: modules/flow/classes/class-cartflows-flow-post-type.php:252
984
+ #: modules/flow/classes/class-cartflows-flow-post-type.php:258
985
+ #: modules/flow/classes/class-cartflows-step-post-type.php:413
986
+ #: modules/flow/classes/class-cartflows-step-post-type.php:419
987
+ #. translators: %s: singular custom post type name
988
+ msgid "%s updated."
989
+ msgstr ""
990
+
991
+ #: modules/flow/classes/class-cartflows-flow-post-type.php:254
992
+ #: modules/flow/classes/class-cartflows-step-post-type.php:415
993
+ #. translators: %s: singular custom post type name
994
+ msgid "Custom %s updated."
995
+ msgstr ""
996
+
997
+ #: modules/flow/classes/class-cartflows-flow-post-type.php:256
998
+ #: modules/flow/classes/class-cartflows-step-post-type.php:417
999
+ #. translators: %s: singular custom post type name
1000
+ msgid "Custom %s deleted."
1001
+ msgstr ""
1002
+
1003
+ #: modules/flow/classes/class-cartflows-flow-post-type.php:260
1004
+ #: modules/flow/classes/class-cartflows-step-post-type.php:421
1005
+ #. translators: %1$s: singular custom post type name ,%2$s: date and time of
1006
+ #. the revision
1007
+ msgid "%1$s restored to revision from %2$s"
1008
+ msgstr ""
1009
+
1010
+ #: modules/flow/classes/class-cartflows-flow-post-type.php:262
1011
+ #: modules/flow/classes/class-cartflows-step-post-type.php:423
1012
+ #. translators: %s: singular custom post type name
1013
+ msgid "%s published."
1014
+ msgstr ""
1015
+
1016
+ #: modules/flow/classes/class-cartflows-flow-post-type.php:264
1017
+ #: modules/flow/classes/class-cartflows-step-post-type.php:425
1018
+ #. translators: %s: singular custom post type name
1019
+ msgid "%s saved."
1020
+ msgstr ""
1021
+
1022
+ #: modules/flow/classes/class-cartflows-flow-post-type.php:266
1023
+ #: modules/flow/classes/class-cartflows-step-post-type.php:427
1024
+ #. translators: %s: singular custom post type name
1025
+ msgid "%s submitted."
1026
+ msgstr ""
1027
+
1028
+ #: modules/flow/classes/class-cartflows-flow-post-type.php:268
1029
+ #: modules/flow/classes/class-cartflows-step-post-type.php:429
1030
+ #. translators: %s: singular custom post type name
1031
+ msgid "%s scheduled for."
1032
+ msgstr ""
1033
+
1034
+ #: modules/flow/classes/class-cartflows-flow-post-type.php:270
1035
+ #: modules/flow/classes/class-cartflows-step-post-type.php:431
1036
+ #. translators: %s: singular custom post type name
1037
+ msgid "%s draft updated."
1038
+ msgstr ""
1039
+
1040
+ #: modules/flow/classes/class-cartflows-flow-shortcodes.php:148
1041
+ #: modules/widgets/class-cartflows-next-step.php:79
1042
+ msgid "Next Step"
1043
+ msgstr ""
1044
+
1045
+ #: modules/flow/classes/class-cartflows-step-post-type.php:146
1046
+ msgid "Search Steps"
1047
+ msgstr ""
1048
+
1049
+ #: modules/flow/classes/class-cartflows-step-post-type.php:147
1050
+ msgid "All Steps"
1051
+ msgstr ""
1052
+
1053
+ #: modules/flow/classes/class-cartflows-step-post-type.php:148
1054
+ #: modules/flow/view/meta-flow-steps.php:99
1055
+ msgid "Edit Step"
1056
+ msgstr ""
1057
+
1058
+ #: modules/flow/classes/class-cartflows-step-post-type.php:149
1059
+ #: modules/flow/view/meta-flow-steps.php:95
1060
+ msgid "View Step"
1061
+ msgstr ""
1062
+
1063
+ #: modules/flow/classes/class-cartflows-step-post-type.php:151
1064
+ msgid "Update Step"
1065
+ msgstr ""
1066
+
1067
+ #: modules/flow/classes/class-cartflows-step-post-type.php:153
1068
+ msgid "New Step Name"
1069
+ msgstr ""
1070
+
1071
+ #: modules/flow/classes/class-cartflows-step-post-type.php:176
1072
+ msgid "Step Type"
1073
+ msgstr ""
1074
+
1075
+ #: modules/flow/classes/class-cartflows-step-post-type.php:185
1076
+ msgid "Step Flow"
1077
+ msgstr ""
1078
+
1079
+ #: modules/flow/classes/class-cartflows-step-post-type.php:202
1080
+ #: modules/flow/view/meta-flow-steps.php:11
1081
+ msgid "Landing"
1082
+ msgstr ""
1083
+
1084
+ #: modules/flow/classes/class-cartflows-step-post-type.php:208
1085
+ #: modules/flow/view/meta-flow-steps.php:12
1086
+ msgid "Checkout"
1087
+ msgstr ""
1088
+
1089
+ #: modules/flow/classes/class-cartflows-step-post-type.php:214
1090
+ #: modules/flow/view/meta-flow-steps.php:13
1091
+ msgid "Thank You"
1092
+ msgstr ""
1093
+
1094
+ #: modules/flow/classes/class-cartflows-step-post-type.php:220
1095
+ #: modules/flow/view/meta-flow-steps.php:14
1096
+ msgid "Upsell"
1097
+ msgstr ""
1098
+
1099
+ #: modules/flow/classes/class-cartflows-step-post-type.php:226
1100
+ #: modules/flow/view/meta-flow-steps.php:15
1101
+ msgid "Downsell"
1102
+ msgstr ""
1103
+
1104
+ #: modules/flow/view/meta-flow-steps.php:79
1105
+ msgid "No Product Assigned"
1106
+ msgstr ""
1107
+
1108
+ #: modules/flow/view/meta-flow-steps.php:83
1109
+ msgid "Global Checkout - Remove selected checkout product"
1110
+ msgstr ""
1111
+
1112
+ #: modules/flow/view/meta-flow-steps.php:103
1113
+ msgid "Clone Step"
1114
+ msgstr ""
1115
+
1116
+ #: modules/flow/view/meta-flow-steps.php:107
1117
+ msgid "Delete Step"
1118
+ msgstr ""
1119
+
1120
+ #: modules/flow/view/meta-flow-steps.php:122
1121
+ msgid "Add New Step"
1122
+ msgstr ""
1123
+
1124
+ #: modules/flow/view/meta-flow-steps.php:138
1125
+ msgid "Steps Library"
1126
+ msgstr ""
1127
+
1128
+ #: modules/flow/view/meta-flow-steps.php:188
1129
+ msgid "Create Step"
1130
+ msgstr ""
1131
+
1132
+ #: modules/flow/view/meta-flow-steps.php:190
1133
+ msgid "You need a Cartflows Pro version to import Upsell / Downsell"
1134
+ msgstr ""
1135
+
1136
+ #: modules/landing/classes/class-cartflows-landing-meta.php:66
1137
+ msgid "Landing Page Settings"
1138
+ msgstr ""
1139
+
1140
+ #: modules/landing/classes/class-cartflows-landing-meta.php:169
1141
+ msgid "Next Step Link"
1142
+ msgstr ""
1143
+
1144
+ #: modules/thankyou/classes/class-cartflows-thankyou-meta.php:65
1145
+ msgid "Thank You Page Settings"
1146
+ msgstr ""
1147
+
1148
+ #: modules/thankyou/classes/class-cartflows-thankyou-meta.php:136
1149
+ msgid "Thank You Design"
1150
+ msgstr ""
1151
+
1152
+ #: modules/thankyou/classes/class-cartflows-thankyou-meta.php:142
1153
+ msgid "Thank You Fields"
1154
+ msgstr ""
1155
+
1156
+ #: modules/thankyou/classes/class-cartflows-thankyou-meta.php:176
1157
+ msgid "Order Details"
1158
+ msgstr ""
1159
+
1160
+ #: modules/thankyou/classes/class-cartflows-thankyou-meta.php:188
1161
+ msgid "Text"
1162
+ msgstr ""
1163
+
1164
+ #: modules/thankyou/classes/class-cartflows-thankyou-meta.php:194
1165
+ #: modules/thankyou/classes/class-cartflows-thankyou-meta.php:217
1166
+ msgid "Color"
1167
+ msgstr ""
1168
+
1169
+ #: modules/thankyou/classes/class-cartflows-thankyou-meta.php:243
1170
+ msgid "Advanced Options"
1171
+ msgstr ""
1172
+
1173
+ #: modules/thankyou/classes/class-cartflows-thankyou-meta.php:253
1174
+ msgid "Container Width (In px)"
1175
+ msgstr ""
1176
+
1177
+ #: modules/thankyou/classes/class-cartflows-thankyou-meta.php:261
1178
+ msgid "Section Background Color"
1179
+ msgstr ""
1180
+
1181
+ #: modules/thankyou/classes/class-cartflows-thankyou-meta.php:275
1182
+ msgid "Enable Order Overview "
1183
+ msgstr ""
1184
+
1185
+ #: modules/thankyou/classes/class-cartflows-thankyou-meta.php:283
1186
+ msgid "Enable Order Details "
1187
+ msgstr ""
1188
+
1189
+ #: modules/thankyou/classes/class-cartflows-thankyou-meta.php:291
1190
+ msgid "Enable Billing Details "
1191
+ msgstr ""
1192
+
1193
+ #: modules/thankyou/classes/class-cartflows-thankyou-meta.php:299
1194
+ msgid "Enable Shipping Details "
1195
+ msgstr ""
1196
+
1197
+ #: modules/widgets/class-cartflows-next-step.php:25
1198
+ msgid "CartFlows Next Step"
1199
+ msgstr ""
1200
+
1201
+ #: modules/widgets/class-cartflows-next-step.php:27
1202
+ msgid "Next Step Widgets"
1203
+ msgstr ""
1204
+
1205
+ #: modules/widgets/class-cartflows-next-step.php:107
1206
+ msgid "New title"
1207
+ msgstr ""
1208
+
1209
+ #: modules/widgets/class-cartflows-next-step.php:124
1210
+ msgid "Title:"
1211
+ msgstr ""
1212
+
1213
+ #: modules/widgets/class-cartflows-next-step.php:128
1214
+ msgid "Flow ID:"
1215
+ msgstr ""
1216
+
1217
+ #: modules/widgets/class-cartflows-next-step.php:132
1218
+ msgid "Step ID:"
1219
+ msgstr ""
1220
+
1221
+ #: woocommerce/template/cart/cart-shipping.php:51
1222
+ #. Translators: $s shipping destination.
1223
+ msgid "Estimate for %s."
1224
+ msgstr ""
1225
+
1226
+ #: woocommerce/template/cart/cart-shipping.php:52
1227
+ msgid "Change address"
1228
+ msgstr ""
1229
+
1230
+ #: woocommerce/template/cart/cart-shipping.php:54
1231
+ msgid "This is only an estimate. Prices will be updated during checkout."
1232
+ msgstr ""
1233
+
1234
+ #: woocommerce/template/cart/cart-shipping.php:61
1235
+ msgid "Enter your address to view shipping options."
1236
+ msgstr ""
1237
+
1238
+ #: woocommerce/template/cart/cart-shipping.php:63
1239
+ msgid ""
1240
+ "There are no shipping methods available. Please ensure that your address "
1241
+ "has been entered correctly, or contact us if you need any help."
1242
+ msgstr ""
1243
+
1244
+ #: woocommerce/template/cart/cart-shipping.php:66
1245
+ #. Translators: $s shipping destination.
1246
+ msgid "No shipping options were found for %s."
1247
+ msgstr ""
1248
+
1249
+ #: woocommerce/template/cart/cart-shipping.php:67
1250
+ msgid "Enter a different address"
1251
+ msgstr ""
1252
+
1253
+ #: woocommerce/template/checkout/form-billing.php:27
1254
+ msgid "Billing &amp; Shipping"
1255
+ msgstr ""
1256
+
1257
+ #: woocommerce/template/checkout/form-billing.php:31
1258
+ msgid "Billing details"
1259
+ msgstr ""
1260
+
1261
+ #: woocommerce/template/checkout/form-billing.php:59
1262
+ msgid "Create an account?"
1263
+ msgstr ""
1264
+
1265
+ #: woocommerce/template/checkout/form-checkout.php:26
1266
+ msgid "You must be logged in to checkout."
1267
+ msgstr ""
1268
+
1269
+ #: woocommerce/template/checkout/form-checkout.php:52
1270
+ msgid "Your order"
1271
+ msgstr ""
1272
+
1273
+ #: woocommerce/template/checkout/form-coupon.php:26
1274
+ msgid "Have a coupon?"
1275
+ msgstr ""
1276
+
1277
+ #: woocommerce/template/checkout/form-coupon.php:26
1278
+ msgid "Click here to enter your code"
1279
+ msgstr ""
1280
+
1281
+ #: woocommerce/template/checkout/form-coupon.php:31
1282
+ msgid "If you have a coupon code, please apply it below."
1283
+ msgstr ""
1284
+
1285
+ #: woocommerce/template/checkout/form-coupon.php:34
1286
+ msgid "Coupon code"
1287
+ msgstr ""
1288
+
1289
+ #: woocommerce/template/checkout/form-coupon.php:38
1290
+ msgid "Apply coupon"
1291
+ msgstr ""
1292
+
1293
+ #: woocommerce/template/checkout/form-login.php:26
1294
+ msgid "Returning customer?"
1295
+ msgstr ""
1296
+
1297
+ #: woocommerce/template/checkout/form-login.php:26
1298
+ msgid "Click here to login"
1299
+ msgstr ""
1300
+
1301
+ #: woocommerce/template/checkout/form-login.php:32
1302
+ msgid ""
1303
+ "If you have shopped with us before, please enter your details below. If you "
1304
+ "are a new customer, please proceed to the Billing &amp; Shipping section."
1305
+ msgstr ""
1306
+
1307
+ #: woocommerce/template/checkout/payment.php:33
1308
+ msgid ""
1309
+ "Sorry, it seems that there are no available payment methods for your state. "
1310
+ "Please contact us if you require assistance or wish to make alternate "
1311
+ "arrangements."
1312
+ msgstr ""
1313
+
1314
+ #: woocommerce/template/checkout/payment.php:33
1315
+ msgid "Please fill in your details above to see available payment methods."
1316
+ msgstr ""
1317
+
1318
+ #: woocommerce/template/checkout/payment.php:42
1319
+ #. translators: $1 and $2 opening and closing emphasis tags respectively
1320
+ msgid ""
1321
+ "Since your browser does not support JavaScript, or it is disabled, please "
1322
+ "ensure you click the %1$sUpdate Totals%2$s button before placing your "
1323
+ "order. You may be charged more than the amount stated above if you fail to "
1324
+ "do so."
1325
+ msgstr ""
1326
+
1327
+ #: woocommerce/template/checkout/payment.php:44
1328
+ msgid "Update totals"
1329
+ msgstr ""
1330
+
1331
+ #: woocommerce/template/checkout/review-order.php:26
1332
+ msgid "Product"
1333
+ msgstr ""
1334
+
1335
+ #: woocommerce/template/checkout/review-order.php:27
1336
+ #: woocommerce/template/checkout/review-order.php:106
1337
+ msgid "Total"
1338
+ msgstr ""
1339
+
1340
+ #: woocommerce/template/checkout/review-order.php:59
1341
+ msgid "Subtotal"
1342
+ msgstr ""
1343
+
1344
+ #: woocommerce/template/checkout/thankyou.php:30
1345
+ msgid ""
1346
+ "Unfortunately your order cannot be processed as the originating "
1347
+ "bank/merchant has declined your transaction. Please attempt your purchase "
1348
+ "again."
1349
+ msgstr ""
1350
+
1351
+ #: woocommerce/template/checkout/thankyou.php:33
1352
+ msgid "Pay"
1353
+ msgstr ""
1354
+
1355
+ #: woocommerce/template/checkout/thankyou.php:35
1356
+ msgid "My account"
1357
+ msgstr ""
1358
+
1359
+ #: woocommerce/template/checkout/thankyou.php:41
1360
+ #: woocommerce/template/checkout/thankyou.php:83
1361
+ msgid "Thank you. Your order has been received."
1362
+ msgstr ""
1363
+
1364
+ #: woocommerce/template/checkout/thankyou.php:46
1365
+ msgid "Order number:"
1366
+ msgstr ""
1367
+
1368
+ #: woocommerce/template/checkout/thankyou.php:51
1369
+ msgid "Date:"
1370
+ msgstr ""
1371
+
1372
+ #: woocommerce/template/checkout/thankyou.php:57
1373
+ msgid "Email:"
1374
+ msgstr ""
1375
+
1376
+ #: woocommerce/template/checkout/thankyou.php:63
1377
+ msgid "Total:"
1378
+ msgstr ""
1379
+
1380
+ #: woocommerce/template/checkout/thankyou.php:69
1381
+ msgid "Payment method:"
1382
+ msgstr ""
1383
+
1384
+ #: woocommerce/template/global/form-login.php:34
1385
+ msgid "Username or email"
1386
+ msgstr ""
1387
+
1388
+ #: woocommerce/template/global/form-login.php:38
1389
+ msgid "Password"
1390
+ msgstr ""
1391
+
1392
+ #: woocommerce/template/global/form-login.php:48
1393
+ msgid "Login"
1394
+ msgstr ""
1395
+
1396
+ #: woocommerce/template/global/form-login.php:53
1397
+ msgid "Remember me"
1398
+ msgstr ""
1399
+
1400
+ #: woocommerce/template/global/form-login.php:57
1401
+ msgid "Lost your password?"
1402
+ msgstr ""
1403
+
1404
+ #. Plugin Name of the plugin/theme
1405
+ msgid "CartFlows"
1406
+ msgstr ""
1407
+
1408
+ #. Author URI of the plugin/theme
1409
+ msgid "https://cartflows.com/"
1410
+ msgstr ""
1411
+
1412
+ #. Description of the plugin/theme
1413
+ msgid "Create beautiful checkout pages & sales flows for WooCommerce."
1414
+ msgstr ""
1415
+
1416
+ #. Author of the plugin/theme
1417
+ msgid "CartFlows Inc"
1418
+ msgstr ""
1419
+
1420
+ #: modules/flow/classes/class-cartflows-flow-post-type.php:55
1421
+ msgctxt "flow general name"
1422
+ msgid "Flows"
1423
+ msgstr ""
1424
+
1425
+ #: modules/flow/classes/class-cartflows-flow-post-type.php:56
1426
+ msgctxt "flow singular name"
1427
+ msgid "Flow"
1428
+ msgstr ""
1429
+
1430
+ #: modules/flow/classes/class-cartflows-step-post-type.php:144
1431
+ msgctxt "flow step general name"
1432
+ msgid "Steps"
1433
+ msgstr ""
1434
+
1435
+ #: modules/flow/classes/class-cartflows-step-post-type.php:145
1436
+ msgctxt "flow step singular name"
1437
+ msgid "Step"
1438
+ msgstr ""
1439
+
1440
+ #: modules/flow/classes/class-cartflows-step-post-type.php:264
1441
+ msgctxt "cartflows"
1442
+ msgid "Template for Page Builders"
1443
  msgstr ""
modules/checkout/classes/class-cartflows-checkout-markup.php CHANGED
@@ -1,1157 +1,1157 @@
1
- <?php
2
- /**
3
- * Checkout markup.
4
- *
5
- * @package CartFlows
6
- */
7
-
8
- /**
9
- * Checkout Markup
10
- *
11
- * @since 1.0.0
12
- */
13
- class Cartflows_Checkout_Markup {
14
-
15
- /**
16
- * Member Variable
17
- *
18
- * @var object instance
19
- */
20
- private static $instance;
21
-
22
- /**
23
- * Initiator
24
- */
25
- public static function get_instance() {
26
- if ( ! isset( self::$instance ) ) {
27
- self::$instance = new self;
28
- }
29
- return self::$instance;
30
- }
31
-
32
- /**
33
- * Constructor
34
- */
35
- public function __construct() {
36
-
37
- /* Set is checkout flag */
38
- add_filter( 'woocommerce_is_checkout', array( $this, 'woo_checkout_flag' ), 9999 );
39
-
40
- add_action( 'woocommerce_checkout_update_order_meta', array( $this, 'save_checkout_fields' ), 10, 2 );
41
-
42
- /* Show notice if cart is empty */
43
- add_action( 'cartflows_checkout_cart_empty', array( $this, 'display_woo_notices' ) );
44
-
45
- /* Checkout Shortcode */
46
- add_shortcode( 'cartflows_checkout', array( $this, 'checkout_shortcode_markup' ) );
47
-
48
- /* Preconfigured cart data */
49
- add_action( 'wp', array( $this, 'preconfigured_cart_data' ), 1 );
50
-
51
- /* Embed Checkout */
52
- add_action( 'wp', array( $this, 'shortcode_load_data' ), 999 );
53
-
54
- /* Ajax Endpoint */
55
- add_filter( 'woocommerce_ajax_get_endpoint', array( $this, 'get_ajax_endpoint' ) );
56
-
57
- add_filter( 'cartflows_add_before_main_section', array( $this, 'enable_logo_in_header' ) );
58
-
59
- add_filter( 'cartflows_primary_container_bottom', array( $this, 'show_cartflows_copyright_message' ) );
60
-
61
- add_filter( 'woocommerce_login_redirect', array( $this, 'after_login_redirect' ), 10, 2 );
62
-
63
- add_action( 'wp_ajax_wcf_woo_apply_coupon', array( $this, 'apply_coupon' ) );
64
- add_action( 'wp_ajax_nopriv_wcf_woo_apply_coupon', array( $this, 'apply_coupon' ) );
65
-
66
- add_filter( 'global_cartflows_js_localize', array( $this, 'add_localize_vars' ) );
67
-
68
- /* Global Checkout */
69
- add_action( 'template_redirect', array( $this, 'global_checkout_template_redirect' ), 1 );
70
-
71
- add_action( 'wp_ajax_wcf_woo_remove_coupon', array( $this, 'remove_coupon' ) );
72
- add_action( 'wp_ajax_nopriv_wcf_woo_remove_coupon', array( $this, 'remove_coupon' ) );
73
-
74
- }
75
-
76
- /**
77
- * Display all WooCommerce notices.
78
- *
79
- * @since 1.1.5
80
- */
81
- function display_woo_notices() {
82
-
83
- if ( null != WC()->session && function_exists( 'woocommerce_output_all_notices' ) ) {
84
- woocommerce_output_all_notices();
85
- }
86
- }
87
-
88
-
89
- /**
90
- * Redirect from default to the global checkout page
91
- *
92
- * @since 1.0.0
93
- */
94
- function global_checkout_template_redirect() {
95
-
96
- if ( ! is_checkout() ) {
97
- return;
98
- }
99
-
100
- if ( _is_wcf_checkout_type() || _is_wcf_checkout_shortcode() ) {
101
- return;
102
- }
103
-
104
- // redirect only for cartflows checkout pages.
105
- $order_pay_endpoint = get_option( 'woocommerce_checkout_pay_endpoint', 'order-pay' );
106
- $order_received_endpoint = get_option( 'woocommerce_checkout_order_received_endpoint', 'order-received' );
107
-
108
- $common = Cartflows_Helper::get_common_settings();
109
-
110
- $global_checkout = $common['global_checkout'];
111
-
112
- if (
113
- // ignore on order-pay.
114
- false === mb_strpos( $_SERVER['REQUEST_URI'], '/' . $order_pay_endpoint . '/' ) &&
115
- // ignore on TY page.
116
- false === mb_strpos( $_SERVER['REQUEST_URI'], '/' . $order_received_endpoint . '/' )
117
- ) {
118
-
119
- if ( '' !== $global_checkout ) {
120
-
121
- $link = get_permalink( $global_checkout );
122
-
123
- if ( ! empty( $link ) ) {
124
-
125
- wp_redirect( $link );
126
- die();
127
- }
128
- }
129
- }
130
- }
131
-
132
- /**
133
- * Check for checkout flag
134
- *
135
- * @param bool $is_checkout is checkout.
136
- *
137
- * @return bool
138
- */
139
- function woo_checkout_flag( $is_checkout ) {
140
-
141
- if ( ! is_admin() ) {
142
-
143
- if ( _is_wcf_checkout_type() || _is_wcf_checkout_shortcode() ) {
144
-
145
- $is_checkout = true;
146
- }
147
- }
148
-
149
- return $is_checkout;
150
- }
151
-
152
- /**
153
- * Render checkout shortcode markup.
154
- *
155
- * @param array $atts attributes.
156
- * @return string
157
- */
158
- function checkout_shortcode_markup( $atts ) {
159
-
160
- if ( ! function_exists( 'wc_print_notices' ) ) {
161
- return '<p class="woocommerce-notice">' . __( 'WooCommerce functions not exists. If you are in iframe, please reload the iframe', 'cartflows' ) . '</p>';
162
- }
163
-
164
- $atts = shortcode_atts(
165
- array(
166
- 'id' => 0,
167
- ),
168
- $atts
169
- );
170
-
171
- $checkout_id = intval( $atts['id'] );
172
-
173
- if ( empty( $checkout_id ) ) {
174
-
175
- if ( ! _is_wcf_checkout_type() ) {
176
-
177
- return '<h4>' . __( 'Checkout ID not found', 'cartflows' ) . '</h4>';
178
- }
179
-
180
- global $post;
181
-
182
- $checkout_id = intval( $post->ID );
183
- }
184
-
185
- $output = '';
186
-
187
- ob_start();
188
-
189
- do_action( 'cartflows_checkout_form_before', $checkout_id );
190
-
191
- $checkout_layout = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-checkout-layout' );
192
-
193
- $template_default = CARTFLOWS_CHECKOUT_DIR . 'templates/embed/checkout-template-simple.php';
194
-
195
- $template_layout = apply_filters( 'cartflows_checkout_layout_template', $checkout_layout );
196
-
197
- if ( file_exists( $template_layout ) ) {
198
- include $template_layout;
199
- } else {
200
- include $template_default;
201
- }
202
-
203
- $output .= ob_get_clean();
204
-
205
- return $output;
206
- }
207
-
208
- /**
209
- * Configure Cart Data.
210
- *
211
- * @since 1.0.0
212
- *
213
- * @return void
214
- */
215
- function preconfigured_cart_data() {
216
-
217
- if ( is_admin() ) {
218
- return;
219
- }
220
-
221
- global $post;
222
-
223
- if ( _is_wcf_checkout_type() || _is_wcf_checkout_shortcode() ) {
224
-
225
- if ( wp_doing_ajax() ) {
226
-
227
- return;
228
- } else {
229
-
230
- if ( _is_wcf_checkout_type() ) {
231
- $checkout_id = $post->ID;
232
- } else {
233
- $checkout_id = _get_wcf_checkout_id_from_shortcode( $post->post_content );
234
- }
235
-
236
- do_action( 'cartflows_checkout_before_configure_cart', $checkout_id );
237
-
238
- $flow_id = wcf()->utils->get_flow_id_from_step_id( $checkout_id );
239
-
240
- if ( wcf()->flow->is_flow_testmode( $flow_id ) ) {
241
- $products = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-checkout-products', 'dummy' );
242
- } else {
243
- $products = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-checkout-products' );
244
- }
245
-
246
- if ( ! is_array( $products ) ) {
247
-
248
- if ( 'dummy' === $products ) {
249
-
250
- $args = array(
251
- 'posts_per_page' => 1,
252
- 'orderby' => 'rand',
253
- 'post_type' => 'product',
254
- 'meta_query' => array(
255
- // Exclude out of stock products.
256
- array(
257
- 'key' => '_stock_status',
258
- 'value' => 'outofstock',
259
- 'compare' => 'NOT IN',
260
- ),
261
- ),
262
- 'tax_query' => array(
263
- array(
264
- 'taxonomy' => 'product_type',
265
- 'field' => 'slug',
266
- 'terms' => 'simple',
267
- ),
268
- ),
269
- );
270
-
271
- $random_product = get_posts( $args );
272
-
273
- if ( isset( $random_product[0]->ID ) ) {
274
- $products = array(
275
- array(
276
- 'product' => $random_product[0]->ID,
277
- ),
278
- );
279
- } else {
280
- return;
281
- }
282
- } else {
283
- return;
284
- }
285
- }
286
-
287
- if ( is_array( $products ) && count( $products ) < 1 ) {
288
-
289
- return;
290
- }
291
- /* Empty the current cart */
292
- WC()->cart->empty_cart();
293
-
294
- /* Set customer session if not set */
295
- if ( ! is_user_logged_in() && WC()->cart->is_empty() ) {
296
- WC()->session->set_customer_session_cookie( true );
297
- }
298
-
299
- $cart_product_count = 0;
300
-
301
- foreach ( $products as $index => $data ) {
302
-
303
- if ( ! isset( $data['product'] ) ) {
304
- return;
305
- }
306
-
307
- if ( apply_filters( 'cartflows_skip_other_products', false, $cart_product_count ) ) {
308
- break;
309
- }
310
-
311
- $product_id = $data['product'];
312
- $_product = wc_get_product( $product_id );
313
-
314
- if ( ! empty( $_product ) ) {
315
-
316
- $quantity = 1;
317
-
318
- if ( ! $_product->is_type( 'grouped' ) && ! $_product->is_type( 'external' ) ) {
319
-
320
- if ( $_product->is_type( 'variable' ) ) {
321
-
322
- $default_attributes = $_product->get_default_attributes();
323
-
324
- if ( ! empty( $default_attributes ) ) {
325
-
326
- foreach ( $_product->get_children() as $variation_id ) {
327
-
328
- $single_variation = new WC_Product_Variation( $variation_id );
329
-
330
- if ( $default_attributes == $single_variation->get_attributes() ) {
331
- WC()->cart->add_to_cart( $variation_id, $quantity );
332
- $cart_product_count++;
333
- }
334
- }
335
- } else {
336
-
337
- $product_childrens = $_product->get_children();
338
-
339
- if ( isset( $product_childrens[0] ) ) {
340
- WC()->cart->add_to_cart( $product_childrens[0], $quantity );
341
- $cart_product_count++;
342
- } else {
343
- echo '<p>' . __( 'Variations Not set', 'cartflows' ) . '</p>';
344
- }
345
- }
346
- } else {
347
- WC()->cart->add_to_cart( $product_id, $quantity );
348
- $cart_product_count++;
349
- }
350
- } else {
351
-
352
- echo '<p>' . __( 'This product can\'t be purcahsed', 'cartflows' ) . '</p>';
353
- // WC()->cart->add_to_cart( $product_id, $quantity );.
354
- }
355
- }
356
- }
357
-
358
- do_action( 'cartflows_checkout_aftet_configure_cart', $checkout_id );
359
- do_action( 'cartflows_checkout_after_configure_cart', $checkout_id );
360
- }
361
- }
362
- }
363
-
364
- /**
365
- * Load shortcode data.
366
- *
367
- * @return void
368
- */
369
- function shortcode_load_data() {
370
-
371
- if ( _is_wcf_checkout_type() || _is_wcf_checkout_shortcode() ) {
372
-
373
- add_action( 'wp_enqueue_scripts', array( $this, 'shortcode_scripts' ), 21 );
374
-
375
- add_action( 'wp_enqueue_scripts', array( $this, 'compatibility_scripts' ), 101 );
376
-
377
- /* Show notices if cart has errors */
378
- add_action( 'woocommerce_cart_has_errors', 'woocommerce_output_all_notices' );
379
-
380
- add_action( 'woocommerce_checkout_after_customer_details', array( $this, 'order_wrap_div_start' ), 99 );
381
-
382
- add_action( 'woocommerce_checkout_after_order_review', array( $this, 'order_wrap_div_end' ), 99 );
383
-
384
- // Outputting the hidden field in checkout page.
385
- add_action( 'woocommerce_after_order_notes', array( $this, 'checkout_shortcode_post_id' ), 99 );
386
- add_action( 'woocommerce_login_form_end', array( $this, 'checkout_shortcode_post_id' ), 99 );
387
-
388
- remove_all_actions( 'woocommerce_checkout_billing' );
389
- remove_all_actions( 'woocommerce_checkout_shipping' );
390
-
391
- // Hook in actions once.
392
- add_action( 'woocommerce_checkout_billing', array( WC()->checkout, 'checkout_form_billing' ) );
393
- add_action( 'woocommerce_checkout_shipping', array( WC()->checkout, 'checkout_form_shipping' ) );
394
-
395
- remove_action( 'woocommerce_before_checkout_form', 'woocommerce_checkout_coupon_form' );
396
-
397
- add_action( 'woocommerce_checkout_order_review', array( $this, 'display_custom_coupon_field' ) );
398
-
399
- add_filter( 'woocommerce_checkout_fields', array( $this, 'add_three_column_layout_fields' ) );
400
-
401
- add_filter( 'woocommerce_cart_totals_coupon_html', array( $this, 'remove_coupon_text' ) );
402
- global $post;
403
-
404
- if ( _is_wcf_checkout_type() ) {
405
- $checkout_id = $post->ID;
406
- } else {
407
- $checkout_id = _get_wcf_checkout_id_from_shortcode( $post->post_content );
408
- }
409
-
410
- do_action( 'cartflows_checkout_before_shortcode', $checkout_id );
411
- }
412
- }
413
-
414
- /**
415
- * Render checkout ID hidden field.
416
- *
417
- * @param array $checkout checkout session data.
418
- * @return void
419
- */
420
- function checkout_shortcode_post_id( $checkout ) {
421
-
422
- global $post;
423
-
424
- if ( _is_wcf_checkout_type() ) {
425
- $checkout_id = $post->ID;
426
- } else {
427
- $checkout_id = _get_wcf_checkout_id_from_shortcode( $post->post_content );
428
- }
429
-
430
- $flow_id = get_post_meta( $checkout_id, 'wcf-flow-id', true );
431
-
432
- echo '<input type="hidden" class="input-hidden _wcf_flow_id" name="_wcf_flow_id" value="' . intval( $flow_id ) . '">';
433
- echo '<input type="hidden" class="input-hidden _wcf_checkout_id" name="_wcf_checkout_id" value="' . intval( $checkout_id ) . '">';
434
- }
435
-
436
- /**
437
- * Load shortcode scripts.
438
- *
439
- * @return void
440
- */
441
- function shortcode_scripts() {
442
-
443
- wp_enqueue_style( 'wcf-checkout-template', wcf()->utils->get_css_url( 'checkout-template' ), '', CARTFLOWS_VER );
444
-
445
- wp_enqueue_script(
446
- 'wcf-checkout-template',
447
- wcf()->utils->get_js_url( 'checkout-template' ),
448
- array( 'jquery' ),
449
- CARTFLOWS_VER,
450
- true
451
- );
452
-
453
- do_action( 'cartflows_checkout_scripts' );
454
-
455
- $style = $this->generate_style();
456
-
457
- wp_add_inline_style( 'wcf-checkout-template', $style );
458
-
459
- }
460
-
461
- /**
462
- * Load compatibility scripts.
463
- *
464
- * @return void
465
- */
466
- function compatibility_scripts() {
467
-
468
- global $post;
469
-
470
- if ( _is_wcf_checkout_type() ) {
471
- $checkout_id = $post->ID;
472
- } else {
473
- $checkout_id = _get_wcf_checkout_id_from_shortcode( $post->post_content );
474
- }
475
-
476
- // Add DIVI Compatibility css if DIVI theme is enabled.
477
- if ( Cartflows_Compatibility::get_instance()->is_divi_enabled() ||
478
- Cartflows_Compatibility::get_instance()->is_divi_builder_enabled( $checkout_id )
479
- ) {
480
- wp_enqueue_style( 'wcf-checkout-template-divi', wcf()->utils->get_css_url( 'checkout-template-divi' ), '', CARTFLOWS_VER );
481
- }
482
-
483
- // Add Flatsome Compatibility css if Flatsome theme is enabled.
484
- if ( Cartflows_Compatibility::get_instance()->is_flatsome_enabled() ) {
485
- wp_enqueue_style( 'wcf-checkout-template-flatsome', wcf()->utils->get_css_url( 'checkout-template-flatsome' ), '', CARTFLOWS_VER );
486
- }
487
-
488
- // Add The7 Compatibility css if The7 theme is enabled.
489
- if ( Cartflows_Compatibility::get_instance()->is_the_seven_enabled() ) {
490
- wp_enqueue_style( 'wcf-checkout-template-the-seven', wcf()->utils->get_css_url( 'checkout-template-the-seven' ), '', CARTFLOWS_VER );
491
- }
492
- }
493
-
494
- /**
495
- * Generate styles.
496
- *
497
- * @return string
498
- */
499
- function generate_style() {
500
-
501
- global $post;
502
-
503
- if ( _is_wcf_checkout_type() ) {
504
- $checkout_id = $post->ID;
505
- } else {
506
- $checkout_id = _get_wcf_checkout_id_from_shortcode( $post->post_content );
507
- }
508
-
509
- CartFlows_Font_Families::render_fonts( $checkout_id );
510
-
511
- $primary_color = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-primary-color' );
512
-
513
- $base_font_family = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-base-font-family' );
514
-
515
- $header_logo_width = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-header-logo-width' );
516
-
517
- /*$base_font_weight = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-base-font-weight' );*/
518
- $r = '';
519
- $g = '';
520
- $b = '';
521
-
522
- $field_tb_padding = '';
523
- $field_lr_padding = '';
524
-
525
- $field_heading_color = '';
526
- $field_color = '';
527
- $field_bg_color = '';
528
- $field_border_color = '';
529
- $field_label_color = '';
530
- $submit_tb_padding = '';
531
- $submit_lr_padding = '';
532
- $hl_bg_color = '';
533
- $field_input_size = '';
534
- $box_border_color = '';
535
- $section_bg_color = '';
536
- $submit_button_height = '';
537
- $submit_color = '';
538
- $submit_bg_color = $primary_color;
539
- $submit_border_color = $primary_color;
540
-
541
- $submit_hover_color = '';
542
- $submit_bg_hover_color = $primary_color;
543
- $submit_border_hover_color = $primary_color;
544
-
545
- $section_heading_color = '';
546
-
547
- $is_advance_option = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-advance-options-fields' );
548
-
549
- $button_font_family = '';
550
- $button_font_weight = '';
551
- $input_font_family = '';
552
- $input_font_weight = '';
553
- $heading_font_family = '';
554
- $heading_font_weight = '';
555
- $base_font_family = $base_font_family;
556
- /*$base_font_weight = $base_font_weight;*/
557
-
558
- if ( 'yes' == $is_advance_option ) {
559
-
560
- /**
561
- * Get Font Family and Font Weight weight values
562
- */
563
- $section_bg_color = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-section-bg-color' );
564
-
565
- $heading_font_family = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-heading-font-family' );
566
- $heading_font_weight = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-heading-font-weight' );
567
- $section_heading_color = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-heading-color' );
568
- $button_font_family = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-button-font-family' );
569
- $button_font_weight = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-button-font-weight' );
570
- $input_font_family = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-input-font-family' );
571
- $input_font_weight = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-input-font-weight' );
572
- $field_tb_padding = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-field-tb-padding' );
573
- $field_lr_padding = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-field-lr-padding' );
574
- $field_input_size = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-input-field-size' );
575
-
576
- $field_heading_color = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-field-heading-color' );
577
-
578
- $field_color = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-field-color' );
579
-
580
- $field_bg_color = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-field-bg-color' );
581
-
582
- $field_border_color = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-field-border-color' );
583
-
584
- $field_label_color = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-field-label-color' );
585
-
586
- $submit_tb_padding = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-submit-tb-padding' );
587
-
588
- $submit_lr_padding = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-submit-lr-padding' );
589
-
590
- $submit_color = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-submit-color' );
591
-
592
- $submit_bg_color = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-submit-bg-color', $primary_color );
593
-
594
- $submit_border_color = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-submit-border-color', $primary_color );
595
-
596
- $submit_border_hover_color = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-submit-border-hover-color', $primary_color );
597
-
598
- $submit_hover_color = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-submit-hover-color' );
599
-
600
- $submit_bg_hover_color = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-submit-bg-hover-color', $primary_color );
601
-
602
- $hl_bg_color = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-hl-bg-color' );
603
-
604
- $box_border_color = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-box-border-color' );
605
-
606
- $submit_button_height = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-input-button-size' );
607
-
608
- /**
609
- * Get font values
610
- */
611
-
612
- if ( 'custom' == $submit_button_height ) {
613
- $submit_button_height = '38px';
614
- }
615
-
616
- if ( 'custom' == $field_input_size ) {
617
- $field_input_size = '38px';
618
- }
619
- }
620
- if ( isset( $primary_color ) ) {
621
-
622
- list($r, $g, $b) = sscanf( $primary_color, '#%02x%02x%02x' );
623
- }
624
- $output = "
625
- .wcf-embed-checkout-form .wcf-checkout-header-image img{
626
- width: {$header_logo_width}px;
627
- }
628
- .wcf-embed-checkout-form .woocommerce #payment input[type=checkbox]:checked:before,
629
- .wcf-embed-checkout-form .woocommerce .woocommerce-shipping-fields [type='checkbox']:checked:before{
630
- color: {$primary_color};
631
- }
632
- .wcf-embed-checkout-form .woocommerce #payment input[type=radio]:checked:before{
633
- background-color: {$primary_color};
634
- }
635
- .wcf-embed-checkout-form .woocommerce #payment input[type=checkbox]:focus,
636
- .wcf-embed-checkout-form .woocommerce .woocommerce-shipping-fields [type='checkbox']:focus,
637
- .wcf-embed-checkout-form .woocommerce #payment input[type=radio]:checked:focus,
638
- .wcf-embed-checkout-form .woocommerce #payment input[type=radio]:not(:checked):focus{
639
- border-color: {$primary_color};
640
- box-shadow: 0 0 2px rgba( " . $r . ',' . $g . ',' . $b . ", .8);
641
- }
642
- .wcf-embed-checkout-form .woocommerce-checkout label{
643
- color: {$field_label_color};
644
- }
645
- .wcf-embed-checkout-form .woocommerce-checkout #payment div.payment_box{
646
- background-color: {$hl_bg_color};
647
- font-family: {$input_font_family};
648
- font-weight: {$input_font_weight};
649
- }
650
-
651
- .wcf-embed-checkout-form #add_payment_method #payment div.payment_box::before,
652
- .wcf-embed-checkout-form .woocommerce-cart #payment div.payment_box::before,
653
- .wcf-embed-checkout-form .woocommerce-checkout #payment div.payment_box::before
654
- {
655
- border-bottom-color: {$hl_bg_color};
656
- border-right-color: transparent;
657
- border-left-color: transparent;
658
- border-top-color: transparent;
659
- position: absolute;
660
- }
661
-
662
- .wcf-embed-checkout-form .woocommerce #payment [type='radio']:checked + label,
663
- .wcf-embed-checkout-form .woocommerce #payment [type='radio']:not(:checked) + label{
664
- font-family: {$input_font_family};
665
- font-weight: {$input_font_weight};
666
- }
667
-
668
- .wcf-embed-checkout-form #order_review .wcf-custom-coupon-field input[type='text'],
669
- .wcf-embed-checkout-form .woocommerce form .form-row input.input-text,
670
- .wcf-embed-checkout-form .woocommerce form .form-row textarea,
671
- .wcf-embed-checkout-form .select2-container--default .select2-selection--single {
672
- color: {$field_color};
673
- background: {$field_bg_color};
674
- border-color: {$field_border_color};
675
- padding-top: {$field_tb_padding}px;
676
- padding-bottom: {$field_tb_padding}px;
677
- padding-left: {$field_lr_padding}px;
678
- padding-right: {$field_lr_padding}px;
679
- min-height: {$field_input_size};
680
- font-family: {$input_font_family};
681
- font-weight: {$input_font_weight};
682
- }
683
-
684
- .wcf-embed-checkout-form .woocommerce .col2-set .col-1,
685
- .wcf-embed-checkout-form .woocommerce .col2-set .col-2,
686
- .wcf-embed-checkout-form .woocommerce-checkout .shop_table,
687
- .wcf-embed-checkout-form .woocommerce-checkout #order_review_heading,
688
- .wcf-embed-checkout-form .woocommerce-checkout #payment,
689
- .wcf-embed-checkout-form .woocommerce form.checkout_coupon
690
- {
691
- background-color: {$section_bg_color};
692
- border-color: {$box_border_color};
693
- font-family: {$input_font_family};
694
- font-weight: {$input_font_weight};
695
- }
696
-
697
- .woocommerce table.shop_table th{
698
- color: {$field_label_color};
699
- }
700
- /*.wcf-embed-checkout-form .woocommerce .woocommerce-info,
701
- .wcf-embed-checkout-form .woocommerce-message{
702
- border-top-color: {$primary_color};
703
- background-color: {$hl_bg_color};
704
- }*/
705
- .wcf-embed-checkout-form .woocommerce a{
706
- color: {$primary_color};
707
- }
708
- .wcf-embed-checkout-form .select2-container--default .select2-selection--single .select2-selection__rendered {
709
- color: {$field_color};
710
- }
711
- .wcf-embed-checkout-form ::-webkit-input-placeholder { /* Chrome/Opera/Safari */
712
- color: {$field_color};
713
- }
714
- .wcf-embed-checkout-form ::-moz-placeholder { /* Firefox 19+ */
715
- color: {$field_color};
716
- }
717
- .wcf-embed-checkout-form :-ms-input-placeholder { /* IE 10+ */
718
- color: {$field_color};
719
- }
720
- .wcf-embed-checkout-form :-moz-placeholder { /* Firefox 18- */
721
- color: {$field_color};
722
- }
723
- .wcf-embed-checkout-form .woocommerce form p.form-row label {
724
- color: {$field_label_color};
725
- font-family: {$input_font_family};
726
- font-weight: {$input_font_weight};
727
- }
728
- .wcf-embed-checkout-form .woocommerce #order_review button,
729
- .wcf-embed-checkout-form .woocommerce form.woocommerce-form-login .form-row button,
730
- .wcf-embed-checkout-form .woocommerce #order_review button.wcf-btn-small {
731
- color: {$submit_color};
732
- background: {$submit_bg_color};
733
- padding-top: {$submit_tb_padding}px;
734
- padding-bottom: {$submit_tb_padding}px;
735
- padding-left: {$submit_lr_padding}px;
736
- padding-right: {$submit_lr_padding}px;
737
- border-color: {$submit_border_color};
738
- min-height: {$submit_button_height};
739
- font-family: {$button_font_family};
740
- font-weight: {$button_font_weight};
741
- }
742
- .wcf-embed-checkout-form .woocommerce-checkout form.woocommerce-form-login .button,
743
- .wcf-embed-checkout-form .woocommerce-checkout form.checkout_coupon .button{
744
- background: {$submit_bg_color};
745
- border: 1px {$submit_border_color} solid;
746
- color: {$submit_color};
747
- min-height: {$submit_button_height};
748
- font-family: {$button_font_family};
749
- font-weight: {$button_font_weight};
750
- }
751
- .wcf-embed-checkout-form .woocommerce-checkout form.login .button:hover,
752
- .wcf-embed-checkout-form .woocommerce-checkout form.checkout_coupon .button:hover,
753
- .wcf-embed-checkout-form .woocommerce #payment #place_order:hover,
754
- .wcf-embed-checkout-form .woocommerce #order_review button.wcf-btn-small:hover{
755
- color: {$submit_hover_color};
756
- background-color: {$submit_bg_hover_color};
757
- border-color: {$submit_border_hover_color};
758
- }
759
- .wcf-embed-checkout-form .woocommerce h3,
760
- .wcf-embed-checkout-form .woocommerce h3 span,
761
- .wcf-embed-checkout-form .woocommerce-checkout #order_review_heading{
762
- color: {$section_heading_color};
763
- font-family: {$heading_font_family};
764
- font-weight: {$heading_font_weight};
765
- }
766
- .wcf-embed-checkout-form .woocommerce-info::before,
767
- .wcf-embed-checkout-form .woocommerce-message::before{
768
- color: {$primary_color};
769
- }
770
- .wcf-embed-checkout-form{
771
- font-family: {$base_font_family};
772
- }
773
- img.emoji, img.wp-smiley {}";
774
-
775
- return $output;
776
- }
777
-
778
- /**
779
- * Get ajax end points.
780
- *
781
- * @param string $endpoint_url end point URL.
782
- * @return string
783
- */
784
- function get_ajax_endpoint( $endpoint_url ) {
785
-
786
- global $post;
787
-
788
- if ( ! empty( $post ) && ! empty( $_SERVER['REQUEST_URI'] ) ) {
789
-
790
- if ( _is_wcf_checkout_type() || _is_wcf_checkout_shortcode() ) {
791
-
792
- if ( mb_strpos( $endpoint_url, 'checkout' ) === false ) {
793
-
794
- $query_args = array(
795
- 'wc-ajax' => '%%endpoint%%',
796
- );
797
-
798
- $uri = explode( '?', $_SERVER['REQUEST_URI'], 2 );
799
- $uri = $uri[0];
800
-
801
- $endpoint_url = esc_url( add_query_arg( $query_args, $uri ) );
802
- }
803
- }
804
- }
805
-
806
- return $endpoint_url;
807
- }
808
-
809
-
810
- /**
811
- * Save checkout fields.
812
- *
813
- * @param int $order_id order id.
814
- * @param array $posted posted data.
815
- * @return void
816
- */
817
- function save_checkout_fields( $order_id, $posted ) {
818
-
819
- if ( isset( $_POST['_wcf_checkout_id'] ) ) {
820
-
821
- $checkout_id = wc_clean( $_POST['_wcf_checkout_id'] );
822
-
823
- update_post_meta( $order_id, '_wcf_checkout_id', $checkout_id );
824
-
825
- /*
826
- Custom Field To Do
827
- $custom_fields = get_post_meta( $checkout_id, 'wcf-custom-checkout-fields', true );
828
-
829
- if ( 'yes' === $custom_fields ) {
830
-
831
- $billing_fields = get_post_meta( $checkout_id, 'wcf_fields_billing', true );
832
-
833
- foreach ( $billing_fields as $field => $data ) {
834
-
835
- if ( isset( $data['custom'] ) && $data['custom'] ) {
836
-
837
- if ( isset( $_POST[ $field ] ) ) {
838
- update_post_meta( $order_id, $field, wc_clean( $_POST[ $field ] ) );
839
- }
840
- }
841
- }
842
-
843
- $shipping_fields = get_post_meta( $checkout_id, 'wcf_fields_shipping', true );
844
-
845
- foreach ( $shipping_fields as $field => $data ) {
846
-
847
- if ( isset( $data['custom'] ) && $data['custom'] ) {
848
-
849
- if ( isset( $_POST[ $field ] ) ) {
850
- update_post_meta( $order_id, $field, wc_clean( $_POST[ $field ] ) );
851
- }
852
- }
853
- }
854
- }
855
- */
856
- if ( isset( $_POST['_wcf_flow_id'] ) ) {
857
-
858
- $checkout_id = wc_clean( $_POST['_wcf_flow_id'] );
859
-
860
- update_post_meta( $order_id, '_wcf_flow_id', $checkout_id );
861
- }
862
- }
863
-
864
- }
865
-
866
- /**
867
- * Enable Logo In Header Of Checkout Page
868
- *
869
- * @return void
870
- */
871
- function enable_logo_in_header() {
872
- global $post;
873
-
874
- if ( _is_wcf_checkout_type() ) {
875
- $checkout_id = $post->ID;
876
- } else {
877
- $checkout_id = _get_wcf_checkout_id_from_shortcode( $post->post_content );
878
- }
879
-
880
- $header_logo_image = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-header-logo-image' );
881
- $add_image_markup = '';
882
-
883
- if ( isset( $header_logo_image ) && ! empty( $header_logo_image ) ) {
884
- $add_image_markup = '<div class="wcf-checkout-header-image">';
885
- $add_image_markup .= '<img src="' . $header_logo_image . '" />';
886
- $add_image_markup .= '</div>';
887
- }
888
-
889
- echo $add_image_markup;
890
- }
891
-
892
- /**
893
- * Add text to the bootom of the checkout page.
894
- *
895
- * @return void
896
- */
897
- function show_cartflows_copyright_message() {
898
- $output_string = '';
899
-
900
- $output_string .= '<div class="wcf-footer-primary">';
901
- $output_string .= '<div class="wcf-footer-content">';
902
- $output_string .= '<p class="wcf-footer-message">';
903
- $output_string .= 'Checkout powered by CartFlows';
904
- $output_string .= '</p>';
905
- $output_string .= '</div>';
906
- $output_string .= '</div>';
907
-
908
- echo $output_string;
909
- }
910
-
911
- /**
912
- * Redirect users to our checkout if hidden param
913
- *
914
- * @param string $redirect redirect url.
915
- * @param object $user user.
916
- * @return string
917
- */
918
- function after_login_redirect( $redirect, $user ) {
919
-
920
- if ( isset( $_POST['_wcf_checkout_id'] ) ) {
921
-
922
- $checkout_id = intval( $_POST['_wcf_checkout_id'] );
923
-
924
- $redirect = get_permalink( $checkout_id );
925
- }
926
-
927
- return $redirect;
928
- }
929
-
930
- /**
931
- * Display coupon code field after review order fields.
932
- */
933
- function display_custom_coupon_field() {
934
-
935
- $coupon_enabled = apply_filters( 'woocommerce_coupons_enabled', true );
936
- $show_coupon = apply_filters( 'cartflows_show_coupon_field', true );
937
-
938
- if ( ! ( $coupon_enabled && $show_coupon ) ) {
939
- return;
940
-
941
- }
942
-
943
- ob_start();
944
- ?>
945
- <div class="wcf-custom-coupon-field">
946
- <div class="wcf-coupon-col-1">
947
- <span>
948
- <input type="text" name="coupon_code" class="input-text wcf-coupon-code-input" placeholder="<?php _e( 'Coupon Code', 'cartflows' ); ?>" id="coupon_code" value="">
949
- </span>
950
- </div>
951
- <div class="wcf-coupon-col-2">
952
- <span>
953
- <button type="button" class="button wcf-submit-coupon wcf-btn-small" name="apply_coupon" value="Apply"><?php _e( 'Apply', 'cartflows' ); ?></button>
954
- </span>
955
- </div>
956
- </div>
957
- <?php
958
- echo ob_get_clean();
959
- }
960
-
961
- /**
962
- * Apply filter to change class of remove coupon field.
963
- *
964
- * @param string $coupon coupon.
965
- * @return string
966
- */
967
- function remove_coupon_text( $coupon ) {
968
-
969
- $coupon = str_replace( 'woocommerce-remove-coupon', 'wcf-remove-coupon', $coupon );
970
- return $coupon;
971
-
972
- }
973
- /**
974
- * Apply filter to change the placeholder text of coupon field.
975
- *
976
- * @return string
977
- */
978
- function coupon_field_placeholder() {
979
- return apply_filters( 'cartflows_coupon_field_placeholder', __( 'Coupon Code', 'cartflows' ) );
980
- }
981
-
982
- /**
983
- * Apply filter to change the button text of coupon field.
984
- *
985
- * @return string
986
- */
987
- function coupon_button_text() {
988
- return apply_filters( 'cartflows_coupon_button_text', __( 'Apply', 'cartflows' ) );
989
- }
990
-
991
- /**
992
- * Apply coupon on submit of custom coupon form.
993
- */
994
- function apply_coupon() {
995
-
996
- $response = '';
997
-
998
- check_ajax_referer( 'wcf-apply-coupon', 'security' );
999
- if ( ! empty( $_POST['coupon_code'] ) ) {
1000
- $result = WC()->cart->add_discount( sanitize_text_field( $_POST['coupon_code'] ) );
1001
- } else {
1002
- wc_add_notice( WC_Coupon::get_generic_coupon_error( WC_Coupon::E_WC_COUPON_PLEASE_ENTER ), 'error' );
1003
- }
1004
-
1005
- $response = array(
1006
- 'status' => $result,
1007
- 'msg' => wc_print_notices( true ),
1008
- );
1009
-
1010
- echo json_encode( $response );
1011
-
1012
- die();
1013
- }
1014
-
1015
-
1016
- /**
1017
- * Added ajax nonce to localize variable.
1018
- *
1019
- * @param array $vars localize variables.
1020
- */
1021
- function add_localize_vars( $vars ) {
1022
-
1023
- $vars['wcf_validate_coupon_nonce'] = wp_create_nonce( 'wcf-apply-coupon' );
1024
-
1025
- $vars['wcf_validate_remove_coupon_nonce'] = wp_create_nonce( 'wcf-remove-coupon' );
1026
-
1027
- $vars['allow_persistance'] = apply_filters( 'cartflows_allow_persistace', 'yes' );
1028
-
1029
- return $vars;
1030
- }
1031
-
1032
- /**
1033
- * Add custom class to the fields to change the UI to three column.
1034
- *
1035
- * @param array $fields fields.
1036
- */
1037
- function add_three_column_layout_fields( $fields ) {
1038
-
1039
- if ( empty( $fields['billing']['billing_address_2'] ) ) {
1040
-
1041
- if ( isset( $fields['billing']['billing_address_1'] ) && is_array( $fields['billing']['billing_address_1'] ) ) {
1042
- $fields['billing']['billing_address_1']['class'][] = 'form-row-full';
1043
- }
1044
- }
1045
-
1046
- if ( ! empty( $fields['billing']['billing_company'] ) ) {
1047
-
1048
- if ( isset( $fields['billing']['billing_company'] ) && is_array( $fields['billing']['billing_company'] ) ) {
1049
- $fields['billing']['billing_company']['class'][] = 'form-row-full';
1050
- }
1051
- }
1052
-
1053
- if ( ! empty( $fields['shipping']['shipping_company'] ) ) {
1054
-
1055
- if ( isset( $fields['shipping']['shipping_company'] ) && is_array( $fields['shipping']['shipping_company'] ) ) {
1056
- $fields['shipping']['shipping_company']['class'][] = 'form-row-full';
1057
- }
1058
- }
1059
-
1060
- if ( ! empty( $fields['billing']['billing_country'] ) ) {
1061
-
1062
- if ( isset( $fields['billing']['billing_country'] ) && is_array( $fields['billing']['billing_country'] ) ) {
1063
- $fields['billing']['billing_country']['class'][] = 'form-row-full';
1064
- }
1065
- }
1066
-
1067
- if ( ! empty( $fields['shipping']['shipping_country'] ) ) {
1068
-
1069
- if ( isset( $fields['shipping']['shipping_country'] ) && is_array( $fields['shipping']['shipping_country'] ) ) {
1070
- $fields['shipping']['shipping_country']['class'][] = 'form-row-full';
1071
- }
1072
- }
1073
-
1074
- if ( ! empty( $fields['billing']['billing_phone'] ) ) {
1075
-
1076
- if ( isset( $fields['billing']['billing_phone'] ) && is_array( $fields['billing']['billing_phone'] ) ) {
1077
- $fields['billing']['billing_phone']['class'][] = 'form-row-full';
1078
- }
1079
- }
1080
-
1081
- if ( ! empty( $fields['billing']['billing_email'] ) ) {
1082
-
1083
- if ( isset( $fields['billing']['billing_email'] ) && is_array( $fields['billing']['billing_email'] ) ) {
1084
- $fields['billing']['billing_email']['class'][] = 'form-row-full';
1085
- }
1086
- }
1087
-
1088
- if ( empty( $fields['shipping']['shipping_address_2'] ) ) {
1089
-
1090
- if ( isset( $fields['shipping']['shipping_address_1'] ) && is_array( $fields['shipping']['shipping_address_1'] ) ) {
1091
- $fields['shipping']['shipping_address_1']['class'][] = 'form-row-full';
1092
- }
1093
- }
1094
-
1095
- if ( isset( $fields['billing']['billing_city'] ) &&
1096
- isset( $fields['billing']['billing_state'] ) && isset( $fields['billing']['billing_postcode'] ) ) {
1097
-
1098
- $fields['billing']['billing_city']['class'][] = 'wcf-column-33';
1099
- $fields['billing']['billing_state']['class'][] = 'wcf-column-33';
1100
- $fields['billing']['billing_postcode']['class'][] = 'wcf-column-33';
1101
- }
1102
-
1103
- if ( isset( $fields['shipping']['shipping_city'] ) &&
1104
- isset( $fields['shipping']['shipping_state'] ) && isset( $fields['shipping']['shipping_postcode'] ) ) {
1105
-
1106
- $fields['shipping']['shipping_city']['class'][] = 'wcf-column-33';
1107
- $fields['shipping']['shipping_state']['class'][] = 'wcf-column-33';
1108
- $fields['shipping']['shipping_postcode']['class'][] = 'wcf-column-33';
1109
- }
1110
-
1111
- return $fields;
1112
- }
1113
-
1114
- /**
1115
- * Add opening dev
1116
- *
1117
- * @since 1.0.0
1118
- */
1119
- function order_wrap_div_start() {
1120
-
1121
- echo "<div class='wcf-order-wrap'> ";
1122
- }
1123
-
1124
- /**
1125
- * Add closing dev
1126
- *
1127
- * @since 1.0.0
1128
- */
1129
- function order_wrap_div_end() {
1130
-
1131
- echo '</div> ';
1132
- }
1133
-
1134
- /**
1135
- * Remove coupon.
1136
- */
1137
- function remove_coupon() {
1138
-
1139
- check_ajax_referer( 'wcf-remove-coupon', 'security' );
1140
- $coupon = isset( $_POST['coupon_code'] ) ? wc_clean( $_POST['coupon_code'] ) : false;
1141
-
1142
- if ( empty( $coupon ) ) {
1143
- echo "<div class='woocommerce-error'>Sorry there was a problem removing this coupon.";
1144
- } else {
1145
- WC()->cart->remove_coupon( $coupon );
1146
- echo "<div class='woocommerce-error'>Coupon has been removed.</div>";
1147
- }
1148
- wc_print_notices();
1149
- wp_die();
1150
- }
1151
-
1152
- }
1153
-
1154
- /**
1155
- * Kicking this off by calling 'get_instance()' method
1156
- */
1157
- Cartflows_Checkout_Markup::get_instance();
1
+ <?php
2
+ /**
3
+ * Checkout markup.
4
+ *
5
+ * @package CartFlows
6
+ */
7
+
8
+ /**
9
+ * Checkout Markup
10
+ *
11
+ * @since 1.0.0
12
+ */
13
+ class Cartflows_Checkout_Markup {
14
+
15
+ /**
16
+ * Member Variable
17
+ *
18
+ * @var object instance
19
+ */
20
+ private static $instance;
21
+
22
+ /**
23
+ * Initiator
24
+ */
25
+ public static function get_instance() {
26
+ if ( ! isset( self::$instance ) ) {
27
+ self::$instance = new self;
28
+ }
29
+ return self::$instance;
30
+ }
31
+
32
+ /**
33
+ * Constructor
34
+ */
35
+ public function __construct() {
36
+
37
+ /* Set is checkout flag */
38
+ add_filter( 'woocommerce_is_checkout', array( $this, 'woo_checkout_flag' ), 9999 );
39
+
40
+ add_action( 'woocommerce_checkout_update_order_meta', array( $this, 'save_checkout_fields' ), 10, 2 );
41
+
42
+ /* Show notice if cart is empty */
43
+ add_action( 'cartflows_checkout_cart_empty', array( $this, 'display_woo_notices' ) );
44
+
45
+ /* Checkout Shortcode */
46
+ add_shortcode( 'cartflows_checkout', array( $this, 'checkout_shortcode_markup' ) );
47
+
48
+ /* Preconfigured cart data */
49
+ add_action( 'wp', array( $this, 'preconfigured_cart_data' ), 1 );
50
+
51
+ /* Embed Checkout */
52
+ add_action( 'wp', array( $this, 'shortcode_load_data' ), 999 );
53
+
54
+ /* Ajax Endpoint */
55
+ add_filter( 'woocommerce_ajax_get_endpoint', array( $this, 'get_ajax_endpoint' ) );
56
+
57
+ add_filter( 'cartflows_add_before_main_section', array( $this, 'enable_logo_in_header' ) );
58
+
59
+ add_filter( 'cartflows_primary_container_bottom', array( $this, 'show_cartflows_copyright_message' ) );
60
+
61
+ add_filter( 'woocommerce_login_redirect', array( $this, 'after_login_redirect' ), 10, 2 );
62
+
63
+ add_action( 'wp_ajax_wcf_woo_apply_coupon', array( $this, 'apply_coupon' ) );
64
+ add_action( 'wp_ajax_nopriv_wcf_woo_apply_coupon', array( $this, 'apply_coupon' ) );
65
+
66
+ add_filter( 'global_cartflows_js_localize', array( $this, 'add_localize_vars' ) );
67
+
68
+ /* Global Checkout */
69
+ add_action( 'template_redirect', array( $this, 'global_checkout_template_redirect' ), 1 );
70
+
71
+ add_action( 'wp_ajax_wcf_woo_remove_coupon', array( $this, 'remove_coupon' ) );
72
+ add_action( 'wp_ajax_nopriv_wcf_woo_remove_coupon', array( $this, 'remove_coupon' ) );
73
+
74
+ }
75
+
76
+ /**
77
+ * Display all WooCommerce notices.
78
+ *
79
+ * @since 1.1.5
80
+ */
81
+ function display_woo_notices() {
82
+
83
+ if ( null != WC()->session && function_exists( 'woocommerce_output_all_notices' ) ) {
84
+ woocommerce_output_all_notices();
85
+ }
86
+ }
87
+
88
+
89
+ /**
90
+ * Redirect from default to the global checkout page
91
+ *
92
+ * @since 1.0.0
93
+ */
94
+ function global_checkout_template_redirect() {
95
+
96
+ if ( ! is_checkout() ) {
97
+ return;
98
+ }
99
+
100
+ if ( _is_wcf_checkout_type() || _is_wcf_checkout_shortcode() ) {
101
+ return;
102
+ }
103
+
104
+ // redirect only for cartflows checkout pages.
105
+ $order_pay_endpoint = get_option( 'woocommerce_checkout_pay_endpoint', 'order-pay' );
106
+ $order_received_endpoint = get_option( 'woocommerce_checkout_order_received_endpoint', 'order-received' );
107
+
108
+ $common = Cartflows_Helper::get_common_settings();
109
+
110
+ $global_checkout = $common['global_checkout'];
111
+
112
+ if (
113
+ // ignore on order-pay.
114
+ false === mb_strpos( $_SERVER['REQUEST_URI'], '/' . $order_pay_endpoint . '/' ) &&
115
+ // ignore on TY page.
116
+ false === mb_strpos( $_SERVER['REQUEST_URI'], '/' . $order_received_endpoint . '/' )
117
+ ) {
118
+
119
+ if ( '' !== $global_checkout ) {
120
+
121
+ $link = get_permalink( $global_checkout );
122
+
123
+ if ( ! empty( $link ) ) {
124
+
125
+ wp_redirect( $link );
126
+ die();
127
+ }
128
+ }
129
+ }
130
+ }
131
+
132
+ /**
133
+ * Check for checkout flag
134
+ *
135
+ * @param bool $is_checkout is checkout.
136
+ *
137
+ * @return bool
138
+ */
139
+ function woo_checkout_flag( $is_checkout ) {
140
+
141
+ if ( ! is_admin() ) {
142
+
143
+ if ( _is_wcf_checkout_type() || _is_wcf_checkout_shortcode() ) {
144
+
145
+ $is_checkout = true;
146
+ }
147
+ }
148
+
149
+ return $is_checkout;
150
+ }
151
+
152
+ /**
153
+ * Render checkout shortcode markup.
154
+ *
155
+ * @param array $atts attributes.
156
+ * @return string
157
+ */
158
+ function checkout_shortcode_markup( $atts ) {
159
+
160
+ if ( ! function_exists( 'wc_print_notices' ) ) {
161
+ return '<p class="woocommerce-notice">' . __( 'WooCommerce functions not exists. If you are in iframe, please reload the iframe', 'cartflows' ) . '</p>';
162
+ }
163
+
164
+ $atts = shortcode_atts(
165
+ array(
166
+ 'id' => 0,
167
+ ),
168
+ $atts
169
+ );
170
+
171
+ $checkout_id = intval( $atts['id'] );
172
+
173
+ if ( empty( $checkout_id ) ) {
174
+
175
+ if ( ! _is_wcf_checkout_type() ) {
176
+
177
+ return '<h4>' . __( 'Checkout ID not found', 'cartflows' ) . '</h4>';
178
+ }
179
+
180
+ global $post;
181
+
182
+ $checkout_id = intval( $post->ID );
183
+ }
184
+
185
+ $output = '';
186
+
187
+ ob_start();
188
+
189
+ do_action( 'cartflows_checkout_form_before', $checkout_id );
190
+
191
+ $checkout_layout = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-checkout-layout' );
192
+
193
+ $template_default = CARTFLOWS_CHECKOUT_DIR . 'templates/embed/checkout-template-simple.php';
194
+
195
+ $template_layout = apply_filters( 'cartflows_checkout_layout_template', $checkout_layout );
196
+
197
+ if ( file_exists( $template_layout ) ) {
198
+ include $template_layout;
199
+ } else {
200
+ include $template_default;
201
+ }
202
+
203
+ $output .= ob_get_clean();
204
+
205
+ return $output;
206
+ }
207
+
208
+ /**
209
+ * Configure Cart Data.
210
+ *
211
+ * @since 1.0.0
212
+ *
213
+ * @return void
214
+ */
215
+ function preconfigured_cart_data() {
216
+
217
+ if ( is_admin() ) {
218
+ return;
219
+ }
220
+
221
+ global $post;
222
+
223
+ if ( _is_wcf_checkout_type() || _is_wcf_checkout_shortcode() ) {
224
+
225
+ if ( wp_doing_ajax() ) {
226
+
227
+ return;
228
+ } else {
229
+
230
+ if ( _is_wcf_checkout_type() ) {
231
+ $checkout_id = $post->ID;
232
+ } else {
233
+ $checkout_id = _get_wcf_checkout_id_from_shortcode( $post->post_content );
234
+ }
235
+
236
+ do_action( 'cartflows_checkout_before_configure_cart', $checkout_id );
237
+
238
+ $flow_id = wcf()->utils->get_flow_id_from_step_id( $checkout_id );
239
+
240
+ if ( wcf()->flow->is_flow_testmode( $flow_id ) ) {
241
+ $products = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-checkout-products', 'dummy' );
242
+ } else {
243
+ $products = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-checkout-products' );
244
+ }
245
+
246
+ if ( ! is_array( $products ) ) {
247
+
248
+ if ( 'dummy' === $products ) {
249
+
250
+ $args = array(
251
+ 'posts_per_page' => 1,
252
+ 'orderby' => 'rand',
253
+ 'post_type' => 'product',
254
+ 'meta_query' => array(
255
+ // Exclude out of stock products.
256
+ array(
257
+ 'key' => '_stock_status',
258
+ 'value' => 'outofstock',
259
+ 'compare' => 'NOT IN',
260
+ ),
261
+ ),
262
+ 'tax_query' => array(
263
+ array(
264
+ 'taxonomy' => 'product_type',
265
+ 'field' => 'slug',
266
+ 'terms' => 'simple',
267
+ ),
268
+ ),
269
+ );
270
+
271
+ $random_product = get_posts( $args );
272
+
273
+ if ( isset( $random_product[0]->ID ) ) {
274
+ $products = array(
275
+ array(
276
+ 'product' => $random_product[0]->ID,
277
+ ),
278
+ );
279
+ } else {
280
+ return;
281
+ }
282
+ } else {
283
+ return;
284
+ }
285
+ }
286
+
287
+ if ( is_array( $products ) && count( $products ) < 1 ) {
288
+
289
+ return;
290
+ }
291
+ /* Empty the current cart */
292
+ WC()->cart->empty_cart();
293
+
294
+ /* Set customer session if not set */
295
+ if ( ! is_user_logged_in() && WC()->cart->is_empty() ) {
296
+ WC()->session->set_customer_session_cookie( true );
297
+ }
298
+
299
+ $cart_product_count = 0;
300
+
301
+ foreach ( $products as $index => $data ) {
302
+
303
+ if ( ! isset( $data['product'] ) ) {
304
+ return;
305
+ }
306
+
307
+ if ( apply_filters( 'cartflows_skip_other_products', false, $cart_product_count ) ) {
308
+ break;
309
+ }
310
+
311
+ $product_id = $data['product'];
312
+ $_product = wc_get_product( $product_id );
313
+
314
+ if ( ! empty( $_product ) ) {
315
+
316
+ $quantity = 1;
317
+
318
+ if ( ! $_product->is_type( 'grouped' ) && ! $_product->is_type( 'external' ) ) {
319
+
320
+ if ( $_product->is_type( 'variable' ) ) {
321
+
322
+ $default_attributes = $_product->get_default_attributes();
323
+
324
+ if ( ! empty( $default_attributes ) ) {
325
+
326
+ foreach ( $_product->get_children() as $variation_id ) {
327
+
328
+ $single_variation = new WC_Product_Variation( $variation_id );
329
+
330
+ if ( $default_attributes == $single_variation->get_attributes() ) {
331
+ WC()->cart->add_to_cart( $variation_id, $quantity );
332
+ $cart_product_count++;
333
+ }
334
+ }
335
+ } else {
336
+
337
+ $product_childrens = $_product->get_children();
338
+
339
+ if ( isset( $product_childrens[0] ) ) {
340
+ WC()->cart->add_to_cart( $product_childrens[0], $quantity );
341
+ $cart_product_count++;
342
+ } else {
343
+ echo '<p>' . __( 'Variations Not set', 'cartflows' ) . '</p>';
344
+ }
345
+ }
346
+ } else {
347
+ WC()->cart->add_to_cart( $product_id, $quantity );
348
+ $cart_product_count++;
349
+ }
350
+ } else {
351
+
352
+ echo '<p>' . __( 'This product can\'t be purcahsed', 'cartflows' ) . '</p>';
353
+ // WC()->cart->add_to_cart( $product_id, $quantity );.
354
+ }
355
+ }
356
+ }
357
+
358
+ do_action( 'cartflows_checkout_aftet_configure_cart', $checkout_id );
359
+ do_action( 'cartflows_checkout_after_configure_cart', $checkout_id );
360
+ }
361
+ }
362
+ }
363
+
364
+ /**
365
+ * Load shortcode data.
366
+ *
367
+ * @return void
368
+ */
369
+ function shortcode_load_data() {
370
+
371
+ if ( _is_wcf_checkout_type() || _is_wcf_checkout_shortcode() ) {
372
+
373
+ add_action( 'wp_enqueue_scripts', array( $this, 'shortcode_scripts' ), 21 );
374
+
375
+ add_action( 'wp_enqueue_scripts', array( $this, 'compatibility_scripts' ), 101 );
376
+
377
+ /* Show notices if cart has errors */
378
+ add_action( 'woocommerce_cart_has_errors', 'woocommerce_output_all_notices' );
379
+
380
+ add_action( 'woocommerce_checkout_after_customer_details', array( $this, 'order_wrap_div_start' ), 99 );
381
+
382
+ add_action( 'woocommerce_checkout_after_order_review', array( $this, 'order_wrap_div_end' ), 99 );
383
+
384
+ // Outputting the hidden field in checkout page.
385
+ add_action( 'woocommerce_after_order_notes', array( $this, 'checkout_shortcode_post_id' ), 99 );
386
+ add_action( 'woocommerce_login_form_end', array( $this, 'checkout_shortcode_post_id' ), 99 );
387
+
388
+ remove_all_actions( 'woocommerce_checkout_billing' );
389
+ remove_all_actions( 'woocommerce_checkout_shipping' );
390
+
391
+ // Hook in actions once.
392
+ add_action( 'woocommerce_checkout_billing', array( WC()->checkout, 'checkout_form_billing' ) );
393
+ add_action( 'woocommerce_checkout_shipping', array( WC()->checkout, 'checkout_form_shipping' ) );
394
+
395
+ remove_action( 'woocommerce_before_checkout_form', 'woocommerce_checkout_coupon_form' );
396
+
397
+ add_action( 'woocommerce_checkout_order_review', array( $this, 'display_custom_coupon_field' ) );
398
+
399
+ add_filter( 'woocommerce_checkout_fields', array( $this, 'add_three_column_layout_fields' ) );
400
+
401
+ add_filter( 'woocommerce_cart_totals_coupon_html', array( $this, 'remove_coupon_text' ) );
402
+ global $post;
403
+
404
+ if ( _is_wcf_checkout_type() ) {
405
+ $checkout_id = $post->ID;
406
+ } else {
407
+ $checkout_id = _get_wcf_checkout_id_from_shortcode( $post->post_content );
408
+ }
409
+
410
+ do_action( 'cartflows_checkout_before_shortcode', $checkout_id );
411
+ }
412
+ }
413
+
414
+ /**
415
+ * Render checkout ID hidden field.
416
+ *
417
+ * @param array $checkout checkout session data.
418
+ * @return void
419
+ */
420
+ function checkout_shortcode_post_id( $checkout ) {
421
+
422
+ global $post;
423
+
424
+ if ( _is_wcf_checkout_type() ) {
425
+ $checkout_id = $post->ID;
426
+ } else {
427
+ $checkout_id = _get_wcf_checkout_id_from_shortcode( $post->post_content );
428
+ }
429
+
430
+ $flow_id = get_post_meta( $checkout_id, 'wcf-flow-id', true );
431
+
432
+ echo '<input type="hidden" class="input-hidden _wcf_flow_id" name="_wcf_flow_id" value="' . intval( $flow_id ) . '">';
433
+ echo '<input type="hidden" class="input-hidden _wcf_checkout_id" name="_wcf_checkout_id" value="' . intval( $checkout_id ) . '">';
434
+ }
435
+
436
+ /**
437
+ * Load shortcode scripts.
438
+ *
439
+ * @return void
440
+ */
441
+ function shortcode_scripts() {
442
+
443
+ wp_enqueue_style( 'wcf-checkout-template', wcf()->utils->get_css_url( 'checkout-template' ), '', CARTFLOWS_VER );
444
+
445
+ wp_enqueue_script(
446
+ 'wcf-checkout-template',
447
+ wcf()->utils->get_js_url( 'checkout-template' ),
448
+ array( 'jquery' ),
449
+ CARTFLOWS_VER,
450
+ true
451
+ );
452
+
453
+ do_action( 'cartflows_checkout_scripts' );
454
+
455
+ $style = $this->generate_style();
456
+
457
+ wp_add_inline_style( 'wcf-checkout-template', $style );
458
+
459
+ }
460
+
461
+ /**
462
+ * Load compatibility scripts.
463
+ *
464
+ * @return void
465
+ */
466
+ function compatibility_scripts() {
467
+
468
+ global $post;
469
+
470
+ if ( _is_wcf_checkout_type() ) {
471
+ $checkout_id = $post->ID;
472
+ } else {
473
+ $checkout_id = _get_wcf_checkout_id_from_shortcode( $post->post_content );
474
+ }
475
+
476
+ // Add DIVI Compatibility css if DIVI theme is enabled.
477
+ if ( Cartflows_Compatibility::get_instance()->is_divi_enabled() ||
478
+ Cartflows_Compatibility::get_instance()->is_divi_builder_enabled( $checkout_id )
479
+ ) {
480
+ wp_enqueue_style( 'wcf-checkout-template-divi', wcf()->utils->get_css_url( 'checkout-template-divi' ), '', CARTFLOWS_VER );
481
+ }
482
+
483
+ // Add Flatsome Compatibility css if Flatsome theme is enabled.
484
+ if ( Cartflows_Compatibility::get_instance()->is_flatsome_enabled() ) {
485
+ wp_enqueue_style( 'wcf-checkout-template-flatsome', wcf()->utils->get_css_url( 'checkout-template-flatsome' ), '', CARTFLOWS_VER );
486
+ }
487
+
488
+ // Add The7 Compatibility css if The7 theme is enabled.
489
+ if ( Cartflows_Compatibility::get_instance()->is_the_seven_enabled() ) {
490
+ wp_enqueue_style( 'wcf-checkout-template-the-seven', wcf()->utils->get_css_url( 'checkout-template-the-seven' ), '', CARTFLOWS_VER );
491
+ }
492
+ }
493
+
494
+ /**
495
+ * Generate styles.
496
+ *
497
+ * @return string
498
+ */
499
+ function generate_style() {
500
+
501
+ global $post;
502
+
503
+ if ( _is_wcf_checkout_type() ) {
504
+ $checkout_id = $post->ID;
505
+ } else {
506
+ $checkout_id = _get_wcf_checkout_id_from_shortcode( $post->post_content );
507
+ }
508
+
509
+ CartFlows_Font_Families::render_fonts( $checkout_id );
510
+
511
+ $primary_color = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-primary-color' );
512
+
513
+ $base_font_family = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-base-font-family' );
514
+
515
+ $header_logo_width = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-header-logo-width' );
516
+
517
+ /*$base_font_weight = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-base-font-weight' );*/
518
+ $r = '';
519
+ $g = '';
520
+ $b = '';
521
+
522
+ $field_tb_padding = '';
523
+ $field_lr_padding = '';
524
+
525
+ $field_heading_color = '';
526
+ $field_color = '';
527
+ $field_bg_color = '';
528
+ $field_border_color = '';
529
+ $field_label_color = '';
530
+ $submit_tb_padding = '';
531
+ $submit_lr_padding = '';
532
+ $hl_bg_color = '';
533
+ $field_input_size = '';
534
+ $box_border_color = '';
535
+ $section_bg_color = '';
536
+ $submit_button_height = '';
537
+ $submit_color = '';
538
+ $submit_bg_color = $primary_color;
539
+ $submit_border_color = $primary_color;
540
+
541
+ $submit_hover_color = '';
542
+ $submit_bg_hover_color = $primary_color;
543
+ $submit_border_hover_color = $primary_color;
544
+
545
+ $section_heading_color = '';
546
+
547
+ $is_advance_option = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-advance-options-fields' );
548
+
549
+ $button_font_family = '';
550
+ $button_font_weight = '';
551
+ $input_font_family = '';
552
+ $input_font_weight = '';
553
+ $heading_font_family = '';
554
+ $heading_font_weight = '';
555
+ $base_font_family = $base_font_family;
556
+ /*$base_font_weight = $base_font_weight;*/
557
+
558
+ if ( 'yes' == $is_advance_option ) {
559
+
560
+ /**
561
+ * Get Font Family and Font Weight weight values
562
+ */
563
+ $section_bg_color = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-section-bg-color' );
564
+
565
+ $heading_font_family = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-heading-font-family' );
566
+ $heading_font_weight = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-heading-font-weight' );
567
+ $section_heading_color = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-heading-color' );
568
+ $button_font_family = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-button-font-family' );
569
+ $button_font_weight = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-button-font-weight' );
570
+ $input_font_family = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-input-font-family' );
571
+ $input_font_weight = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-input-font-weight' );
572
+ $field_tb_padding = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-field-tb-padding' );
573
+ $field_lr_padding = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-field-lr-padding' );
574
+ $field_input_size = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-input-field-size' );
575
+
576
+ $field_heading_color = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-field-heading-color' );
577
+
578
+ $field_color = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-field-color' );
579
+
580
+ $field_bg_color = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-field-bg-color' );
581
+
582
+ $field_border_color = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-field-border-color' );
583
+
584
+ $field_label_color = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-field-label-color' );
585
+
586
+ $submit_tb_padding = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-submit-tb-padding' );
587
+
588
+ $submit_lr_padding = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-submit-lr-padding' );
589
+
590
+ $submit_color = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-submit-color' );
591
+
592
+ $submit_bg_color = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-submit-bg-color', $primary_color );
593
+
594
+ $submit_border_color = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-submit-border-color', $primary_color );
595
+
596
+ $submit_border_hover_color = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-submit-border-hover-color', $primary_color );
597
+
598
+ $submit_hover_color = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-submit-hover-color' );
599
+
600
+ $submit_bg_hover_color = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-submit-bg-hover-color', $primary_color );
601
+
602
+ $hl_bg_color = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-hl-bg-color' );
603
+
604
+ $box_border_color = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-box-border-color' );
605
+
606
+ $submit_button_height = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-input-button-size' );
607
+
608
+ /**
609
+ * Get font values
610
+ */
611
+
612
+ if ( 'custom' == $submit_button_height ) {
613
+ $submit_button_height = '38px';
614
+ }
615
+
616
+ if ( 'custom' == $field_input_size ) {
617
+ $field_input_size = '38px';
618
+ }
619
+ }
620
+ if ( isset( $primary_color ) ) {
621
+
622
+ list($r, $g, $b) = sscanf( $primary_color, '#%02x%02x%02x' );
623
+ }
624
+ $output = "
625
+ .wcf-embed-checkout-form .wcf-checkout-header-image img{
626
+ width: {$header_logo_width}px;
627
+ }
628
+ .wcf-embed-checkout-form .woocommerce #payment input[type=checkbox]:checked:before,
629
+ .wcf-embed-checkout-form .woocommerce .woocommerce-shipping-fields [type='checkbox']:checked:before{
630
+ color: {$primary_color};
631
+ }
632
+ .wcf-embed-checkout-form .woocommerce #payment input[type=radio]:checked:before{
633
+ background-color: {$primary_color};
634
+ }
635
+ .wcf-embed-checkout-form .woocommerce #payment input[type=checkbox]:focus,
636
+ .wcf-embed-checkout-form .woocommerce .woocommerce-shipping-fields [type='checkbox']:focus,
637
+ .wcf-embed-checkout-form .woocommerce #payment input[type=radio]:checked:focus,
638
+ .wcf-embed-checkout-form .woocommerce #payment input[type=radio]:not(:checked):focus{
639
+ border-color: {$primary_color};
640
+ box-shadow: 0 0 2px rgba( " . $r . ',' . $g . ',' . $b . ", .8);
641
+ }
642
+ .wcf-embed-checkout-form .woocommerce-checkout label{
643
+ color: {$field_label_color};
644
+ }
645
+ .wcf-embed-checkout-form .woocommerce-checkout #payment div.payment_box{
646
+ background-color: {$hl_bg_color};
647
+ font-family: {$input_font_family};
648
+ font-weight: {$input_font_weight};
649
+ }
650
+
651
+ .wcf-embed-checkout-form #add_payment_method #payment div.payment_box::before,
652
+ .wcf-embed-checkout-form .woocommerce-cart #payment div.payment_box::before,
653
+ .wcf-embed-checkout-form .woocommerce-checkout #payment div.payment_box::before
654
+ {
655
+ border-bottom-color: {$hl_bg_color};
656
+ border-right-color: transparent;
657
+ border-left-color: transparent;
658
+ border-top-color: transparent;
659
+ position: absolute;
660
+ }
661
+
662
+ .wcf-embed-checkout-form .woocommerce #payment [type='radio']:checked + label,
663
+ .wcf-embed-checkout-form .woocommerce #payment [type='radio']:not(:checked) + label{
664
+ font-family: {$input_font_family};
665
+ font-weight: {$input_font_weight};
666
+ }
667
+
668
+ .wcf-embed-checkout-form #order_review .wcf-custom-coupon-field input[type='text'],
669
+ .wcf-embed-checkout-form .woocommerce form .form-row input.input-text,
670
+ .wcf-embed-checkout-form .woocommerce form .form-row textarea,
671
+ .wcf-embed-checkout-form .select2-container--default .select2-selection--single {
672
+ color: {$field_color};
673
+ background: {$field_bg_color};
674
+ border-color: {$field_border_color};
675
+ padding-top: {$field_tb_padding}px;
676
+ padding-bottom: {$field_tb_padding}px;
677
+ padding-left: {$field_lr_padding}px;
678
+ padding-right: {$field_lr_padding}px;
679
+ min-height: {$field_input_size};
680
+ font-family: {$input_font_family};
681
+ font-weight: {$input_font_weight};
682
+ }
683
+
684
+ .wcf-embed-checkout-form .woocommerce .col2-set .col-1,
685
+ .wcf-embed-checkout-form .woocommerce .col2-set .col-2,
686
+ .wcf-embed-checkout-form .woocommerce-checkout .shop_table,
687
+ .wcf-embed-checkout-form .woocommerce-checkout #order_review_heading,
688
+ .wcf-embed-checkout-form .woocommerce-checkout #payment,
689
+ .wcf-embed-checkout-form .woocommerce form.checkout_coupon
690
+ {
691
+ background-color: {$section_bg_color};
692
+ border-color: {$box_border_color};
693
+ font-family: {$input_font_family};
694
+ font-weight: {$input_font_weight};
695
+ }
696
+
697
+ .woocommerce table.shop_table th{
698
+ color: {$field_label_color};
699
+ }
700
+ /*.wcf-embed-checkout-form .woocommerce .woocommerce-info,
701
+ .wcf-embed-checkout-form .woocommerce-message{
702
+ border-top-color: {$primary_color};
703
+ background-color: {$hl_bg_color};
704
+ }*/
705
+ .wcf-embed-checkout-form .woocommerce a{
706
+ color: {$primary_color};
707
+ }
708
+ .wcf-embed-checkout-form .select2-container--default .select2-selection--single .select2-selection__rendered {
709
+ color: {$field_color};
710
+ }
711
+ .wcf-embed-checkout-form ::-webkit-input-placeholder { /* Chrome/Opera/Safari */
712
+ color: {$field_color};
713
+ }
714
+ .wcf-embed-checkout-form ::-moz-placeholder { /* Firefox 19+ */
715
+ color: {$field_color};
716
+ }
717
+ .wcf-embed-checkout-form :-ms-input-placeholder { /* IE 10+ */
718
+ color: {$field_color};
719
+ }
720
+ .wcf-embed-checkout-form :-moz-placeholder { /* Firefox 18- */
721
+ color: {$field_color};
722
+ }
723
+ .wcf-embed-checkout-form .woocommerce form p.form-row label {
724
+ color: {$field_label_color};
725
+ font-family: {$input_font_family};
726
+ font-weight: {$input_font_weight};
727
+ }
728
+ .wcf-embed-checkout-form .woocommerce #order_review button,
729
+ .wcf-embed-checkout-form .woocommerce form.woocommerce-form-login .form-row button,
730
+ .wcf-embed-checkout-form .woocommerce #order_review button.wcf-btn-small {
731
+ color: {$submit_color};
732
+ background: {$submit_bg_color};
733
+ padding-top: {$submit_tb_padding}px;
734
+ padding-bottom: {$submit_tb_padding}px;
735
+ padding-left: {$submit_lr_padding}px;
736
+ padding-right: {$submit_lr_padding}px;
737
+ border-color: {$submit_border_color};
738
+ min-height: {$submit_button_height};
739
+ font-family: {$button_font_family};
740
+ font-weight: {$button_font_weight};
741
+ }
742
+ .wcf-embed-checkout-form .woocommerce-checkout form.woocommerce-form-login .button,
743
+ .wcf-embed-checkout-form .woocommerce-checkout form.checkout_coupon .button{
744
+ background: {$submit_bg_color};
745
+ border: 1px {$submit_border_color} solid;
746
+ color: {$submit_color};
747
+ min-height: {$submit_button_height};
748
+ font-family: {$button_font_family};
749
+ font-weight: {$button_font_weight};
750
+ }
751
+ .wcf-embed-checkout-form .woocommerce-checkout form.login .button:hover,
752
+ .wcf-embed-checkout-form .woocommerce-checkout form.checkout_coupon .button:hover,
753
+ .wcf-embed-checkout-form .woocommerce #payment #place_order:hover,
754
+ .wcf-embed-checkout-form .woocommerce #order_review button.wcf-btn-small:hover{
755
+ color: {$submit_hover_color};
756
+ background-color: {$submit_bg_hover_color};
757
+ border-color: {$submit_border_hover_color};
758
+ }
759
+ .wcf-embed-checkout-form .woocommerce h3,
760
+ .wcf-embed-checkout-form .woocommerce h3 span,
761
+ .wcf-embed-checkout-form .woocommerce-checkout #order_review_heading{
762
+ color: {$section_heading_color};
763
+ font-family: {$heading_font_family};
764
+ font-weight: {$heading_font_weight};
765
+ }
766
+ .wcf-embed-checkout-form .woocommerce-info::before,
767
+ .wcf-embed-checkout-form .woocommerce-message::before{
768
+ color: {$primary_color};
769
+ }
770
+ .wcf-embed-checkout-form{
771
+ font-family: {$base_font_family};
772
+ }
773
+ img.emoji, img.wp-smiley {}";
774
+
775
+ return $output;
776
+ }
777
+
778
+ /**
779
+ * Get ajax end points.
780
+ *
781
+ * @param string $endpoint_url end point URL.
782
+ * @return string
783
+ */
784
+ function get_ajax_endpoint( $endpoint_url ) {
785
+
786
+ global $post;
787
+
788
+ if ( ! empty( $post ) && ! empty( $_SERVER['REQUEST_URI'] ) ) {
789
+
790
+ if ( _is_wcf_checkout_type() || _is_wcf_checkout_shortcode() ) {
791
+
792
+ if ( mb_strpos( $endpoint_url, 'checkout' ) === false ) {
793
+
794
+ $query_args = array(
795
+ 'wc-ajax' => '%%endpoint%%',
796
+ );
797
+
798
+ $uri = explode( '?', $_SERVER['REQUEST_URI'], 2 );
799
+ $uri = $uri[0];
800
+
801
+ $endpoint_url = esc_url( add_query_arg( $query_args, $uri ) );
802
+ }
803
+ }
804
+ }
805
+
806
+ return $endpoint_url;
807
+ }
808
+
809
+
810
+ /**
811
+ * Save checkout fields.
812
+ *
813
+ * @param int $order_id order id.
814
+ * @param array $posted posted data.
815
+ * @return void
816
+ */
817
+ function save_checkout_fields( $order_id, $posted ) {
818
+
819
+ if ( isset( $_POST['_wcf_checkout_id'] ) ) {
820
+
821
+ $checkout_id = wc_clean( $_POST['_wcf_checkout_id'] );
822
+
823
+ update_post_meta( $order_id, '_wcf_checkout_id', $checkout_id );
824
+
825
+ /*
826
+ Custom Field To Do
827
+ $custom_fields = get_post_meta( $checkout_id, 'wcf-custom-checkout-fields', true );
828
+
829
+ if ( 'yes' === $custom_fields ) {
830
+
831
+ $billing_fields = get_post_meta( $checkout_id, 'wcf_fields_billing', true );
832
+
833
+ foreach ( $billing_fields as $field => $data ) {
834
+
835
+ if ( isset( $data['custom'] ) && $data['custom'] ) {
836
+
837
+ if ( isset( $_POST[ $field ] ) ) {
838
+ update_post_meta( $order_id, $field, wc_clean( $_POST[ $field ] ) );
839
+ }
840
+ }
841
+ }
842
+
843
+ $shipping_fields = get_post_meta( $checkout_id, 'wcf_fields_shipping', true );
844
+
845
+ foreach ( $shipping_fields as $field => $data ) {
846
+
847
+ if ( isset( $data['custom'] ) && $data['custom'] ) {
848
+
849
+ if ( isset( $_POST[ $field ] ) ) {
850
+ update_post_meta( $order_id, $field, wc_clean( $_POST[ $field ] ) );
851
+ }
852
+ }
853
+ }
854
+ }
855
+ */
856
+ if ( isset( $_POST['_wcf_flow_id'] ) ) {
857
+
858
+ $checkout_id = wc_clean( $_POST['_wcf_flow_id'] );
859
+
860
+ update_post_meta( $order_id, '_wcf_flow_id', $checkout_id );
861
+ }
862
+ }
863
+
864
+ }
865
+
866
+ /**
867
+ * Enable Logo In Header Of Checkout Page
868
+ *
869
+ * @return void
870
+ */
871
+ function enable_logo_in_header() {
872
+ global $post;
873
+
874
+ if ( _is_wcf_checkout_type() ) {
875
+ $checkout_id = $post->ID;
876
+ } else {
877
+ $checkout_id = _get_wcf_checkout_id_from_shortcode( $post->post_content );
878
+ }
879
+
880
+ $header_logo_image = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-header-logo-image' );
881
+ $add_image_markup = '';
882
+
883
+ if ( isset( $header_logo_image ) && ! empty( $header_logo_image ) ) {
884
+ $add_image_markup = '<div class="wcf-checkout-header-image">';
885
+ $add_image_markup .= '<img src="' . $header_logo_image . '" />';
886
+ $add_image_markup .= '</div>';
887
+ }
888
+
889
+ echo $add_image_markup;
890
+ }
891
+
892
+ /**
893
+ * Add text to the bootom of the checkout page.
894
+ *
895
+ * @return void
896
+ */
897
+ function show_cartflows_copyright_message() {
898
+ $output_string = '';
899
+
900
+ $output_string .= '<div class="wcf-footer-primary">';
901
+ $output_string .= '<div class="wcf-footer-content">';
902
+ $output_string .= '<p class="wcf-footer-message">';
903
+ $output_string .= 'Checkout powered by CartFlows';
904
+ $output_string .= '</p>';
905
+ $output_string .= '</div>';
906
+ $output_string .= '</div>';
907
+
908
+ echo $output_string;
909
+ }
910
+
911
+ /**
912
+ * Redirect users to our checkout if hidden param
913
+ *
914
+ * @param string $redirect redirect url.
915
+ * @param object $user user.
916
+ * @return string
917
+ */
918
+ function after_login_redirect( $redirect, $user ) {
919
+
920
+ if ( isset( $_POST['_wcf_checkout_id'] ) ) {
921
+
922
+ $checkout_id = intval( $_POST['_wcf_checkout_id'] );
923
+
924
+ $redirect = get_permalink( $checkout_id );
925
+ }
926
+
927
+ return $redirect;
928
+ }
929
+
930
+ /**
931
+ * Display coupon code field after review order fields.
932
+ */
933
+ function display_custom_coupon_field() {
934
+
935
+ $coupon_enabled = apply_filters( 'woocommerce_coupons_enabled', true );
936
+ $show_coupon = apply_filters( 'cartflows_show_coupon_field', true );
937
+
938
+ if ( ! ( $coupon_enabled && $show_coupon ) ) {
939
+ return;
940
+
941
+ }
942
+
943
+ ob_start();
944
+ ?>
945
+ <div class="wcf-custom-coupon-field">
946
+ <div class="wcf-coupon-col-1">
947
+ <span>
948
+ <input type="text" name="coupon_code" class="input-text wcf-coupon-code-input" placeholder="<?php _e( 'Coupon Code', 'cartflows' ); ?>" id="coupon_code" value="">
949
+ </span>
950
+ </div>
951
+ <div class="wcf-coupon-col-2">
952
+ <span>
953
+ <button type="button" class="button wcf-submit-coupon wcf-btn-small" name="apply_coupon" value="Apply"><?php _e( 'Apply', 'cartflows' ); ?></button>
954
+ </span>
955
+ </div>
956
+ </div>
957
+ <?php
958
+ echo ob_get_clean();
959
+ }
960
+
961
+ /**
962
+ * Apply filter to change class of remove coupon field.
963
+ *
964
+ * @param string $coupon coupon.
965
+ * @return string
966
+ */
967
+ function remove_coupon_text( $coupon ) {
968
+
969
+ $coupon = str_replace( 'woocommerce-remove-coupon', 'wcf-remove-coupon', $coupon );
970
+ return $coupon;
971
+
972
+ }
973
+ /**
974
+ * Apply filter to change the placeholder text of coupon field.
975
+ *
976
+ * @return string
977
+ */
978
+ function coupon_field_placeholder() {
979
+ return apply_filters( 'cartflows_coupon_field_placeholder', __( 'Coupon Code', 'cartflows' ) );
980
+ }
981
+
982
+ /**
983
+ * Apply filter to change the button text of coupon field.
984
+ *
985
+ * @return string
986
+ */
987
+ function coupon_button_text() {
988
+ return apply_filters( 'cartflows_coupon_button_text', __( 'Apply', 'cartflows' ) );
989
+ }
990
+
991
+ /**
992
+ * Apply coupon on submit of custom coupon form.
993
+ */
994
+ function apply_coupon() {
995
+
996
+ $response = '';
997
+
998
+ check_ajax_referer( 'wcf-apply-coupon', 'security' );
999
+ if ( ! empty( $_POST['coupon_code'] ) ) {
1000
+ $result = WC()->cart->add_discount( sanitize_text_field( $_POST['coupon_code'] ) );
1001
+ } else {
1002
+ wc_add_notice( WC_Coupon::get_generic_coupon_error( WC_Coupon::E_WC_COUPON_PLEASE_ENTER ), 'error' );
1003
+ }
1004
+
1005
+ $response = array(
1006
+ 'status' => $result,
1007
+ 'msg' => wc_print_notices( true ),
1008
+ );
1009
+
1010
+ echo json_encode( $response );
1011
+
1012
+ die();
1013
+ }
1014
+
1015
+
1016
+ /**
1017
+ * Added ajax nonce to localize variable.
1018
+ *
1019
+ * @param array $vars localize variables.
1020
+ */
1021
+ function add_localize_vars( $vars ) {
1022
+
1023
+ $vars['wcf_validate_coupon_nonce'] = wp_create_nonce( 'wcf-apply-coupon' );
1024
+
1025
+ $vars['wcf_validate_remove_coupon_nonce'] = wp_create_nonce( 'wcf-remove-coupon' );
1026
+
1027
+ $vars['allow_persistance'] = apply_filters( 'cartflows_allow_persistace', 'yes' );
1028
+
1029
+ return $vars;
1030
+ }
1031
+
1032
+ /**
1033
+ * Add custom class to the fields to change the UI to three column.
1034
+ *
1035
+ * @param array $fields fields.
1036
+ */
1037
+ function add_three_column_layout_fields( $fields ) {
1038
+
1039
+ if ( empty( $fields['billing']['billing_address_2'] ) ) {
1040
+
1041
+ if ( isset( $fields['billing']['billing_address_1'] ) && is_array( $fields['billing']['billing_address_1'] ) ) {
1042
+ $fields['billing']['billing_address_1']['class'][] = 'form-row-full';
1043
+ }
1044
+ }
1045
+
1046
+ if ( ! empty( $fields['billing']['billing_company'] ) ) {
1047
+
1048
+ if ( isset( $fields['billing']['billing_company'] ) && is_array( $fields['billing']['billing_company'] ) ) {
1049
+ $fields['billing']['billing_company']['class'][] = 'form-row-full';
1050
+ }
1051
+ }
1052
+
1053
+ if ( ! empty( $fields['shipping']['shipping_company'] ) ) {
1054
+
1055
+ if ( isset( $fields['shipping']['shipping_company'] ) && is_array( $fields['shipping']['shipping_company'] ) ) {
1056
+ $fields['shipping']['shipping_company']['class'][] = 'form-row-full';
1057
+ }
1058
+ }
1059
+
1060
+ if ( ! empty( $fields['billing']['billing_country'] ) ) {
1061
+
1062
+ if ( isset( $fields['billing']['billing_country'] ) && is_array( $fields['billing']['billing_country'] ) ) {
1063
+ $fields['billing']['billing_country']['class'][] = 'form-row-full';
1064
+ }
1065
+ }
1066
+
1067
+ if ( ! empty( $fields['shipping']['shipping_country'] ) ) {
1068
+
1069
+ if ( isset( $fields['shipping']['shipping_country'] ) && is_array( $fields['shipping']['shipping_country'] ) ) {
1070
+ $fields['shipping']['shipping_country']['class'][] = 'form-row-full';
1071
+ }
1072
+ }
1073
+
1074
+ if ( ! empty( $fields['billing']['billing_phone'] ) ) {
1075
+
1076
+ if ( isset( $fields['billing']['billing_phone'] ) && is_array( $fields['billing']['billing_phone'] ) ) {
1077
+ $fields['billing']['billing_phone']['class'][] = 'form-row-full';
1078
+ }
1079
+ }
1080
+
1081
+ if ( ! empty( $fields['billing']['billing_email'] ) ) {
1082
+
1083
+ if ( isset( $fields['billing']['billing_email'] ) && is_array( $fields['billing']['billing_email'] ) ) {
1084
+ $fields['billing']['billing_email']['class'][] = 'form-row-full';
1085
+ }
1086
+ }
1087
+
1088
+ if ( empty( $fields['shipping']['shipping_address_2'] ) ) {
1089
+
1090
+ if ( isset( $fields['shipping']['shipping_address_1'] ) && is_array( $fields['shipping']['shipping_address_1'] ) ) {
1091
+ $fields['shipping']['shipping_address_1']['class'][] = 'form-row-full';
1092
+ }
1093
+ }
1094
+
1095
+ if ( isset( $fields['billing']['billing_city'] ) &&
1096
+ isset( $fields['billing']['billing_state'] ) && isset( $fields['billing']['billing_postcode'] ) ) {
1097
+
1098
+ $fields['billing']['billing_city']['class'][] = 'wcf-column-33';
1099
+ $fields['billing']['billing_state']['class'][] = 'wcf-column-33';
1100
+ $fields['billing']['billing_postcode']['class'][] = 'wcf-column-33';
1101
+ }
1102
+
1103
+ if ( isset( $fields['shipping']['shipping_city'] ) &&
1104
+ isset( $fields['shipping']['shipping_state'] ) && isset( $fields['shipping']['shipping_postcode'] ) ) {
1105
+
1106
+ $fields['shipping']['shipping_city']['class'][] = 'wcf-column-33';
1107
+ $fields['shipping']['shipping_state']['class'][] = 'wcf-column-33';
1108
+ $fields['shipping']['shipping_postcode']['class'][] = 'wcf-column-33';
1109
+ }
1110
+
1111
+ return $fields;
1112
+ }
1113
+
1114
+ /**
1115
+ * Add opening dev
1116
+ *
1117
+ * @since 1.0.0
1118
+ */
1119
+ function order_wrap_div_start() {
1120
+
1121
+ echo "<div class='wcf-order-wrap'> ";
1122
+ }
1123
+
1124
+ /**
1125
+ * Add closing dev
1126
+ *
1127
+ * @since 1.0.0
1128
+ */
1129
+ function order_wrap_div_end() {
1130
+
1131
+ echo '</div> ';
1132
+ }
1133
+
1134
+ /**
1135
+ * Remove coupon.
1136
+ */
1137
+ function remove_coupon() {
1138
+
1139
+ check_ajax_referer( 'wcf-remove-coupon', 'security' );
1140
+ $coupon = isset( $_POST['coupon_code'] ) ? wc_clean( $_POST['coupon_code'] ) : false;
1141
+
1142
+ if ( empty( $coupon ) ) {
1143
+ echo "<div class='woocommerce-error'>Sorry there was a problem removing this coupon.";
1144
+ } else {
1145
+ WC()->cart->remove_coupon( $coupon );
1146
+ echo "<div class='woocommerce-error'>Coupon has been removed.</div>";
1147
+ }
1148
+ wc_print_notices();
1149
+ wp_die();
1150
+ }
1151
+
1152
+ }
1153
+
1154
+ /**
1155
+ * Kicking this off by calling 'get_instance()' method
1156
+ */
1157
+ Cartflows_Checkout_Markup::get_instance();
readme.txt CHANGED
@@ -1,11 +1,11 @@
1
  === Funnel Builder by CartFlows - Create High Converting Sales Funnels For WordPress ===
2
  Contributors: brainstormforce, wpcrafter
3
  Donate link: https://www.paypal.me/BrainstormForce
4
- Tags: woocommerce, cart
5
  Requires at least: 4.4
 
 
6
  Requires PHP: 5.6
7
- Tested up to: 5.1
8
- Stable tag: 1.1.17
9
  License: GPLv2 or later
10
  License URI: https://www.gnu.org/licenses/gpl-2.0.html
11
 
@@ -16,13 +16,13 @@ Create beautiful checkout pages & sales flows for WooCommerce.
16
  **#1 Funnel Builder For WordPress**
17
  ★★★★★<br>
18
 
19
- **Funnels are the most effective way to sell products & services.** We created <a href="https://cartflows.com" target="_blank">**CartFlows, a WordPress Funnel Builder**</a>, to help every website owner start using funnels to grow their business, generate more reveue, and have full control over their buyers journey.
20
 
21
- [youtube https://www.youtube.com/watch?v=SlE0moPKjMY]
22
 
23
  Turn your WooCommerce website into a selling machine using one-click sales funnels with frictionless checkout, custom thank you pages, global checkout replacement, and more…
24
 
25
- CartFlows is the best and easiest way to sell product and services on your website. With our library of done for you, one-click sales funnels, that literally sell your products and services for you.
26
 
27
  ## CARTFLOWS IS PERFECT FOR ##
28
 
@@ -43,27 +43,27 @@ See the features that make CartFlows the **Best Funnel Builder for WordPress**.
43
  * **Ready to Import Templates:**
44
  Choose from a wide variety of high converting templates. You can add a professionally crafted, multistep funnel, with one mouse click or you can build your own funnel and choose individual templates.
45
 
46
- * **Use Your Page Builder Or Gutenberg:**
47
- CartFlows will work with all popular page builders including Gutenberg. Initially we will offer templates for Beaver Builder, Elementor with Brizy and Divi coming soon. However you can use CartFlows with your own templates.
48
 
49
  * **Conversion Tested Checkout:**
50
  CartFlows replaces your complicated checkout process with our optimized checkout that instantly increases conversions, making you more money.
51
 
52
  * **Custom Next Step Thank You Pages:**
53
- Your buyers journey doesnt end after checkout. With CartFlows and our custom thank you page feautre, you can guild your new customer on their next steps.
54
 
55
  * **WooCommerce Checkout Page Replacement**
56
- Say goodby to using the same ridgid checkout page that everyone else is using. Create the perfect WooCommerce checkout page and assign it to be the default WooCommerce checkout template.
57
 
58
  ### Why is CartFlows such a game-changer? ###
59
 
60
- * **Sales Funnel Tools Are Expensive** — Most sales funnel tools carry a hefty monthly fee from $97 - $297 per month and they are worth every penny because funnels work. With CartFlows you can unleash the power of funnels for free.
61
 
62
- * **Sales Funnel Tools Are Complicated** — Most sales funnel tools are frustrating to use. You are stuck using their clunky page builer and have to go through an entirely new learnign curve. Who has time for that? With CartFlows you will feel right at home.
63
 
64
- * **Sales Funnel Tools Are Closed** — Perhaps the worst part of using other funnel builder tools is they are based on a closed platform which limits you in every way. CartFlows is open and sits on top of WordPress and WooCommerce.
65
 
66
- * **Sales Funnel Tools Lock You In** — We believe in using a platform where everything is on your domain and you control all your data. CartFlows puts you in control and in the drivers seat.
67
 
68
  ### Who Can Benefit From CartFlows? ###
69
 
@@ -84,20 +84,55 @@ Say goodby to using the same ridgid checkout page that everyone else is using. C
84
 
85
  ## JOIN THE CARTFLOWS INNER CIRCLE ##
86
 
87
- **<a href="https://www.facebook.com/groups/cartflows/" target="_blank">JOIN OUR FACEBOOK GROUP COMMUNITY</a>**: Learn the tactics and techniques that other CartFlows users are doing to grow their businesses. Also get exciting insider information on upcoming feature releases.
88
 
89
  == Installation ==
90
 
91
  1. Upload `cartflows.zip` to the `/wp-content/plugins/` directory
92
  2. Activate the plugin through the 'Plugins' menu in WordPress
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
93
 
94
  == Changelog ==
95
 
 
 
 
96
  = Version 1.1.17 - Tuesday, 30th April 2019 =
97
  * Fix: Database connectivity error while cloning the flow.
98
 
99
  = Version 1.1.16 - Thursday, 25th April 2019 =
100
- * Improvement: Added compatibility for the Cartflows Pro plugin update for an older versions.
101
 
102
  = Version 1.1.15 - Wednesday, 24th April 2019 =
103
  * Fix: WooCommerce dependency issue.
@@ -128,7 +163,7 @@ Say goodby to using the same ridgid checkout page that everyone else is using. C
128
  * Fix: Divi builder next step link issue.
129
 
130
  = Version 1.1.9 - Tuesday, 5th March 2019 =
131
- * Fix: Divi builder fails to open if the page is set as home page.
132
  * Fix: Checkout field's width issue on mobile devices in Divi.
133
 
134
  = Version 1.1.8 - Wednesday, 27th February 2019 =
@@ -147,7 +182,7 @@ Say goodby to using the same ridgid checkout page that everyone else is using. C
147
  * Improvement: Added compatibility for a future release of CartFlows Pro's checkout field editor.
148
  * Fix: Permalink conflict with listing theme.
149
  * Fix: Thrive architect template popup conflict.
150
- * Fix: Coupon code not applied in case of multiple products selection option is selected.
151
 
152
  = Version 1.1.5 - Wednesday, 23rd January 2019 =
153
  * Fix: Beaver Builder Pro version conflict while installing templates.
@@ -206,4 +241,6 @@ Say goodby to using the same ridgid checkout page that everyone else is using. C
206
  * Fix: Unwanted fields on checkout page.
207
 
208
  = Version 1.0.0 - Monday, 19th November 2018 =
209
- * Initial Release
 
 
1
  === Funnel Builder by CartFlows - Create High Converting Sales Funnels For WordPress ===
2
  Contributors: brainstormforce, wpcrafter
3
  Donate link: https://www.paypal.me/BrainstormForce
4
+ Tags: woocommerce, funnel builder, sales funnels
5
  Requires at least: 4.4
6
+ Tested up to: 5.2
7
+ Stable tag: 1.1.18
8
  Requires PHP: 5.6
 
 
9
  License: GPLv2 or later
10
  License URI: https://www.gnu.org/licenses/gpl-2.0.html
11
 
16
  **#1 Funnel Builder For WordPress**
17
  ★★★★★<br>
18
 
19
+ **Funnels are the most effective way to sell products & services.** We created CartFlows, a <a href="https://cartflows.com" target="_blank">**WordPress Funnel Builder**</a>, to help every website owner get more leads, increase conversions, & maximize profits.
20
 
21
+ [youtube https://www.youtube.com/watch?v=N2ZEGu9A2e4]
22
 
23
  Turn your WooCommerce website into a selling machine using one-click sales funnels with frictionless checkout, custom thank you pages, global checkout replacement, and more…
24
 
25
+ CartFlows is the best and easiest way to sell products and services on your website. With our library of done for you, one-click sales funnels, that literally sell your products and services for you.
26
 
27
  ## CARTFLOWS IS PERFECT FOR ##
28
 
43
  * **Ready to Import Templates:**
44
  Choose from a wide variety of high converting templates. You can add a professionally crafted, multistep funnel, with one mouse click or you can build your own funnel and choose individual templates.
45
 
46
+ * **Use Your Page Builder:**
47
+ CartFlows will work with all popular page builders, and soon Gutenberg. We will offer templates for Beaver Builder, Elementor, Divi, & Thrive Architect. However, you can use CartFlows with your own templates and your own builder.
48
 
49
  * **Conversion Tested Checkout:**
50
  CartFlows replaces your complicated checkout process with our optimized checkout that instantly increases conversions, making you more money.
51
 
52
  * **Custom Next Step Thank You Pages:**
53
+ Your buyer's journey doesn't end after checkout. With CartFlows and our custom thank you page feature, you can guild your new customer on their next steps.
54
 
55
  * **WooCommerce Checkout Page Replacement**
56
+ Say goodbye to using the same ridged checkout page that everyone else is using. Create the perfect WooCommerce checkout page and assign it to be the default WooCommerce checkout template.
57
 
58
  ### Why is CartFlows such a game-changer? ###
59
 
60
+ * **Sales Funnel Tools Are Expensive** — Most sales funnel tools carry a hefty monthly fee from $97 - $297 per month, and they are worth every penny because funnels work. With CartFlows you can unleash the power of funnels for free.
61
 
62
+ * **Sales Funnel Tools Are Complicated** — Most sales funnel tools are frustrating to use. You are stuck using their clunky page builder and have to go through an entirely new learning curve. Who has time for that? With CartFlows you will feel right at home.
63
 
64
+ * **Sales Funnel Tools Are Closed** — Perhaps the worst part of using other funnel builder tools is they are based on a closed platform that limits you in every way. CartFlows is open and sits on top of WordPress and WooCommerce.
65
 
66
+ * **Sales Funnel Tools Lock You In** — We believe in using a platform where everything is on your domain, and you control all your data. CartFlows puts you in control and in the driver's seat.
67
 
68
  ### Who Can Benefit From CartFlows? ###
69
 
84
 
85
  ## JOIN THE CARTFLOWS INNER CIRCLE ##
86
 
87
+ **<a href="https://www.facebook.com/groups/cartflows/" target="_blank">JOIN OUR FACEBOOK GROUP COMMUNITY</a>**: Learn the tactics and techniques that other CartFlows users are doing to grow their businesses. Also, get exciting insider information on upcoming feature releases.
88
 
89
  == Installation ==
90
 
91
  1. Upload `cartflows.zip` to the `/wp-content/plugins/` directory
92
  2. Activate the plugin through the 'Plugins' menu in WordPress
93
+ 3. Make sure to disable caching on your checkout and thank you steps
94
+
95
+ == Frequently Asked Questions ==
96
+
97
+ = Does CartFlows work with my theme? =
98
+
99
+ Great question. While we haven't tested every WordPress theme, CartFlows was designed to work with all themes because we disable the header and footer on all funnel steps. If you do run into any issues with your particulate theme, our support will be happy to get it resolved for you.
100
+
101
+ = Does CartFlows work with my page builder? =
102
+
103
+ CartFlows should work with all page builders. We do provide templates for the most popular page builders, but you can just as easily use your own designs with your favorite page builder.
104
+
105
+ = Does CartFlows work with the Facebook pixel? =
106
+
107
+ Each step has an area to add any custom script. CartFlows also integrates with the free Pixel Caffeine and PixelYourSitePro.
108
+
109
+ = Does CartFlows work with my payment gateway? =
110
+
111
+ A good rule of thumb is, if it works with WooCommerce, it will work with CartFlows.
112
+
113
+ = Is there a Pro version of CartFlows? =
114
+
115
+ Glad you asked! CartFlows Pro is an optional add-on to CartFlows that adds additional checkout styles, checkout field control, order bumps, one-click upsells / downsells, quantity changer, variable product selector, pro templates, training, and more.
116
+
117
+
118
+ == Screenshots ==
119
+
120
+ 1. Add "done for you" funnels to your website with 1 click.
121
+ 2. Drag and drop interface to reorder your funnel steps.
122
+ 3. Add products to the checkout form and choose your color and fonts.
123
+ 4. Beautiful, on brand, checkout pages that eliminate distractions and increase conversions.
124
+ 5. Easily edit anything with your page builder.
125
 
126
  == Changelog ==
127
 
128
+ = Version 1.1.18 - Friday, 10th May 2019 =
129
+ * Fix: Sometimes, Next step link was not working.
130
+
131
  = Version 1.1.17 - Tuesday, 30th April 2019 =
132
  * Fix: Database connectivity error while cloning the flow.
133
 
134
  = Version 1.1.16 - Thursday, 25th April 2019 =
135
+ * Improvement: Added compatibility for the Cartflows Pro plugin update for older versions.
136
 
137
  = Version 1.1.15 - Wednesday, 24th April 2019 =
138
  * Fix: WooCommerce dependency issue.
163
  * Fix: Divi builder next step link issue.
164
 
165
  = Version 1.1.9 - Tuesday, 5th March 2019 =
166
+ * Fix: Divi builder fails to open if the page is set as a home page.
167
  * Fix: Checkout field's width issue on mobile devices in Divi.
168
 
169
  = Version 1.1.8 - Wednesday, 27th February 2019 =
182
  * Improvement: Added compatibility for a future release of CartFlows Pro's checkout field editor.
183
  * Fix: Permalink conflict with listing theme.
184
  * Fix: Thrive architect template popup conflict.
185
+ * Fix: Coupon code not applied in case of multiple product selection option is selected.
186
 
187
  = Version 1.1.5 - Wednesday, 23rd January 2019 =
188
  * Fix: Beaver Builder Pro version conflict while installing templates.
241
  * Fix: Unwanted fields on checkout page.
242
 
243
  = Version 1.0.0 - Monday, 19th November 2018 =
244
+ * Initial Release
245
+
246
+ == Upgrade Notice ==