Folders – Unlimited Folders to Organize Media Library Folder, Pages, Posts, File Manager - Version 2.4.2

Version Description

Added a progress bar when you upload files to the media library folders. You can now track how many files were uploaded in real time. We've also fixed a default folders bug.

Download this release

Release Info

Developer galdub
Plugin Icon wp plugin Folders – Unlimited Folders to Organize Media Library Folder, Pages, Posts, File Manager
Version 2.4.2
Comparing to
See all releases

Code changes from version 2.4.1 to 2.4.2

assets/css/design.css CHANGED
@@ -1364,6 +1364,92 @@ select#media-attachment-taxonomy-filter {
1364
  .custom-media-select.active {
1365
  display: block;
1366
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1367
  @media screen and (max-width: 1300px) {
1368
  .tree-structure li {
1369
  width: 20%;
1364
  .custom-media-select.active {
1365
  display: block;
1366
  }
1367
+ .folder-progress {
1368
+ background: #b4b9be;
1369
+ border-radius: 4px;
1370
+ margin: 5px 0 0px 0;
1371
+ position: relative;
1372
+ }
1373
+ .folder-meter {
1374
+ height: 20px;
1375
+ position: relative;
1376
+ background: #f1f1f1;
1377
+ padding: 0;
1378
+ width: 0%;
1379
+ border-radius: 4px;
1380
+ -webkit-transition: all 0.2s linear;
1381
+ transition: all 0.2s linear;
1382
+ }
1383
+ .folder-meter > span {
1384
+ display: block;
1385
+ height: 100%;
1386
+ -webkit-box-shadow:
1387
+ inset 0 2px 9px rgba(255,255,255,0.3),
1388
+ inset 0 -2px 6px rgba(0,0,0,0.4);
1389
+ -moz-box-shadow:
1390
+ inset 0 2px 9px rgba(255,255,255,0.3),
1391
+ inset 0 -2px 6px rgba(0,0,0,0.4);
1392
+ box-shadow:
1393
+ inset 0 2px 9px rgba(255,255,255,0.3),
1394
+ inset 0 -2px 6px rgba(0,0,0,0.4);
1395
+ position: relative;
1396
+ overflow: hidden;
1397
+ border-radius: 4px;
1398
+ }
1399
+ .folder-meter > span:after, .folder-animate > span > span, .folder-progress:after {
1400
+ content: "";
1401
+ position: absolute;
1402
+ border-radius: 4px;
1403
+ top: 0; left: 0; bottom: 0; right: 0;
1404
+ background-image:
1405
+ -webkit-gradient(linear, 0 0, 100% 100%,
1406
+ color-stop(.25, rgba(255, 255, 255, .2)),
1407
+ color-stop(.25, transparent), color-stop(.5, transparent),
1408
+ color-stop(.5, rgba(255, 255, 255, .2)),
1409
+ color-stop(.75, rgba(255, 255, 255, .2)),
1410
+ color-stop(.75, transparent), to(transparent)
1411
+ );
1412
+ background-image:
1413
+ -moz-linear-gradient(
1414
+ -45deg,
1415
+ rgba(255, 255, 255, .2) 25%,
1416
+ transparent 25%,
1417
+ transparent 50%,
1418
+ rgba(255, 255, 255, .2) 50%,
1419
+ rgba(255, 255, 255, .2) 75%,
1420
+ transparent 75%,
1421
+ transparent
1422
+ );
1423
+ z-index: 1;
1424
+ -webkit-background-size: 50px 50px;
1425
+ -moz-background-size: 50px 50px;
1426
+ -webkit-animation: move 2s linear infinite;
1427
+ overflow: hidden;
1428
+ }
1429
+
1430
+ .folder-animate > span:after {
1431
+ display: none;
1432
+ }
1433
+
1434
+ @-webkit-keyframes move {
1435
+ 0% {
1436
+ background-position: 0 0;
1437
+ }
1438
+ 100% {
1439
+ background-position: 50px 50px;
1440
+ }
1441
+ }
1442
+
1443
+ .orange-bg > span {
1444
+ background-color: #FF5983;
1445
+ }
1446
+ .media-folder-loader {
1447
+ padding: 10px 0 15px;
1448
+ display: none;
1449
+ }
1450
+ .media-folder-loader > span {
1451
+ font-weight: bold;
1452
+ }
1453
  @media screen and (max-width: 1300px) {
1454
  .tree-structure li {
1455
  width: 20%;
assets/css/media.css CHANGED
@@ -23,4 +23,5 @@
23
  float: left;
24
  height: 100%;
25
  padding: 0 0 10px 0;
26
- }
 
23
  float: left;
24
  height: 100%;
25
  padding: 0 0 10px 0;
26
+ }
27
+
assets/js/custom.js CHANGED
@@ -1620,6 +1620,7 @@ if(wcp_settings.post_type == "attachment") {
1620
  jQuery(".media-toolbar-secondary").append("<span class='media-info-message'>Drag and drop your media files to the relevant folders</span>");
1621
  jQuery(".delete-selected-button").before("<button type='button' class='button button-primary select-all-item-btn'>Select All</button>");
1622
  jQuery(".media-toolbar-secondary").after("<div class='custom-media-select'>Move Selected files to: <select class='media-select-folder'></select></div>");
 
1623
  if(jQuery(".wcp-custom-form").length) {
1624
  if (wp.Uploader !== undefined) {
1625
  wp.Uploader.queue.on('reset', function () {
1620
  jQuery(".media-toolbar-secondary").append("<span class='media-info-message'>Drag and drop your media files to the relevant folders</span>");
1621
  jQuery(".delete-selected-button").before("<button type='button' class='button button-primary select-all-item-btn'>Select All</button>");
1622
  jQuery(".media-toolbar-secondary").after("<div class='custom-media-select'>Move Selected files to: <select class='media-select-folder'></select></div>");
1623
+ jQuery(".media-toolbar").append("<div style='clear:both;'></div><div class='media-folder-loader'><span>Uploading files</span> <span id='current_upload_files'></span>/<span id='total_upload_files'></span><div class='folder-progress'><div class='folder-meter orange-bg'><span></span></div></div></div>");
1624
  if(jQuery(".wcp-custom-form").length) {
1625
  if (wp.Uploader !== undefined) {
1626
  wp.Uploader.queue.on('reset', function () {
assets/js/media.js CHANGED
@@ -125,7 +125,8 @@
125
  })(jQuery, _);
126
 
127
  var selectedFolderMediaId = -1;
128
-
 
129
  jQuery(document).on("change", ".folder_for_media", function(){
130
  if(jQuery(this).val() != "add-folder") {
131
  selectedFolderMediaId = jQuery(this).val();
@@ -187,6 +188,10 @@ if (typeof wp !== 'undefined' && typeof wp.Uploader === 'function') {
187
  init: function () {
188
  if (this.uploader) {
189
  this.uploader.bind('FileFiltered', function (up, file) {
 
 
 
 
190
  });
191
  this.uploader.bind('BeforeUpload', function (uploader, file) {
192
  var folder_id = selectedFolderMediaId;
@@ -195,6 +200,14 @@ if (typeof wp !== 'undefined' && typeof wp.Uploader === 'function') {
195
  if (folder_id > 0) {
196
  params.folder_for_media = folder_id;
197
  }
 
 
 
 
 
 
 
 
198
  });
199
  this.uploader.bind('UploadComplete', function (up, files) {
200
  selectedFolderMediaId = -1;
@@ -202,6 +215,14 @@ if (typeof wp !== 'undefined' && typeof wp.Uploader === 'function') {
202
  this.uploader.bind('UploadComplete', function (up, files) {
203
  var wp_media = window.wp;
204
 
 
 
 
 
 
 
 
 
205
  resetDDCounter();
206
 
207
  if( wp_media.media.frame.content.get() !== null) {
125
  })(jQuery, _);
126
 
127
  var selectedFolderMediaId = -1;
128
+ var filesInQueue = 0;
129
+ var uploadedFileCount = 0;
130
  jQuery(document).on("change", ".folder_for_media", function(){
131
  if(jQuery(this).val() != "add-folder") {
132
  selectedFolderMediaId = jQuery(this).val();
188
  init: function () {
189
  if (this.uploader) {
190
  this.uploader.bind('FileFiltered', function (up, file) {
191
+ filesInQueue++;
192
+ jQuery(".folder-meter").css("width", "0%");
193
+ jQuery(".media-folder-loader").show();
194
+ jQuery("#total_upload_files").text(filesInQueue);
195
  });
196
  this.uploader.bind('BeforeUpload', function (uploader, file) {
197
  var folder_id = selectedFolderMediaId;
200
  if (folder_id > 0) {
201
  params.folder_for_media = folder_id;
202
  }
203
+ if(uploadedFileCount < filesInQueue) {
204
+ jQuery(".media-folder-loader").show();
205
+ var progress_width = uploadedFileCount/filesInQueue*100;
206
+ jQuery(".folder-meter").css("width", progress_width+"%");
207
+ }
208
+ uploadedFileCount++;
209
+ jQuery("#current_upload_files").text(uploadedFileCount);
210
+
211
  });
212
  this.uploader.bind('UploadComplete', function (up, files) {
213
  selectedFolderMediaId = -1;
215
  this.uploader.bind('UploadComplete', function (up, files) {
216
  var wp_media = window.wp;
217
 
218
+ jQuery(".folder-meter").css("width", "100%");
219
+ setTimeout(function(){
220
+ jQuery(".media-folder-loader").hide();
221
+ jQuery(".folder-meter").css("width", "0%");
222
+ filesInQueue = 0;
223
+ uploadedFileCount = 0;
224
+ }, 1250);
225
+
226
  resetDDCounter();
227
 
228
  if( wp_media.media.frame.content.get() !== null) {
folders.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Plugin Name: Folders
4
  * Description: Arrange media, pages, custom post types and posts into folders
5
- * Version: 2.4.1
6
  * Author: Premio
7
  * Author URI: https://premio.io/downloads/folders/
8
  * Text Domain: folders
@@ -30,7 +30,7 @@ if(!defined("WCP_FOLDER_URL")) {
30
  define('WCP_FOLDER_URL', plugin_dir_url(__FILE__));
31
  }
32
  if(!defined("WCP_FOLDER_VERSION")) {
33
- define('WCP_FOLDER_VERSION', "2.4.1");
34
  }
35
 
36
  include_once plugin_dir_path(__FILE__)."includes/folders.class.php";
2
  /**
3
  * Plugin Name: Folders
4
  * Description: Arrange media, pages, custom post types and posts into folders
5
+ * Version: 2.4.2
6
  * Author: Premio
7
  * Author URI: https://premio.io/downloads/folders/
8
  * Text Domain: folders
30
  define('WCP_FOLDER_URL', plugin_dir_url(__FILE__));
31
  }
32
  if(!defined("WCP_FOLDER_VERSION")) {
33
+ define('WCP_FOLDER_VERSION', "2.4.2");
34
  }
35
 
36
  include_once plugin_dir_path(__FILE__)."includes/folders.class.php";
includes/folders.class.php CHANGED
@@ -89,8 +89,7 @@ class WCP_Folders
89
  add_filter('pre-upload-ui', array($this, 'show_dropdown_on_media_screen'));
90
  add_action('add_attachment', array($this, 'add_attachment_category'));
91
 
92
- /* check for default folders */
93
- add_filter('pre_get_posts', array($this, 'check_for_default_folders'));
94
 
95
  $options = get_option("folders_settings");
96
 
@@ -125,6 +124,9 @@ class WCP_Folders
125
  }
126
  }
127
 
 
 
 
128
  add_action("wp_ajax_folder_update_status", array($this, 'folder_update_status'));
129
 
130
  /* load language files */
@@ -184,20 +186,22 @@ class WCP_Folders
184
  $options = get_option('folders_settings');
185
  $options = (empty($options) || !is_array($options))?array():$options;
186
  if(!$isAjax && in_array($typenow, $options) && (isset($current_screen->base) && ($current_screen->base == "edit" || ($current_screen->base == "upload")))) {
 
187
  $default_folders = get_option('default_folders');
188
  $default_folders = (empty($default_folders) || !is_array($default_folders))?array():$default_folders;
189
 
190
  $status = 1;
191
  if(isset($default_folders[$typenow]) && !empty($default_folders[$typenow])) {
192
  $type = self::get_custom_post_type($typenow);
193
- $term = get_term_by('slug', $default_folders[$typenow], $type);
194
- if(empty($term) || !is_object($term)) {
195
- $status = 0;
 
 
196
  }
197
  } else {
198
  $status = 0;
199
  }
200
-
201
  if($status) {
202
  if ($typenow == "attachment") {
203
  $admin_url = admin_url("upload.php?post_type=attachment&media_folder=");
@@ -605,6 +609,46 @@ class WCP_Folders
605
  }
606
 
607
  public function output_backbone_view_filters() {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
608
  /* Free/Pro URL Change */
609
  wp_enqueue_script( 'folders-media', WCP_FOLDER_URL.'assets/js/media.js', array( 'media-editor', 'media-views' ), WCP_FOLDER_VERSION, true );
610
  wp_localize_script( 'folders-media', 'folders_media_options', array(
89
  add_filter('pre-upload-ui', array($this, 'show_dropdown_on_media_screen'));
90
  add_action('add_attachment', array($this, 'add_attachment_category'));
91
 
92
+
 
93
 
94
  $options = get_option("folders_settings");
95
 
124
  }
125
  }
126
 
127
+ /* check for default folders */
128
+ add_filter('pre_get_posts', array($this, 'check_for_default_folders'));
129
+
130
  add_action("wp_ajax_folder_update_status", array($this, 'folder_update_status'));
131
 
132
  /* load language files */
186
  $options = get_option('folders_settings');
187
  $options = (empty($options) || !is_array($options))?array():$options;
188
  if(!$isAjax && in_array($typenow, $options) && (isset($current_screen->base) && ($current_screen->base == "edit" || ($current_screen->base == "upload")))) {
189
+
190
  $default_folders = get_option('default_folders');
191
  $default_folders = (empty($default_folders) || !is_array($default_folders))?array():$default_folders;
192
 
193
  $status = 1;
194
  if(isset($default_folders[$typenow]) && !empty($default_folders[$typenow])) {
195
  $type = self::get_custom_post_type($typenow);
196
+ if($default_folders[$typenow] != -1) {
197
+ $term = get_term_by('slug', $default_folders[$typenow], $type);
198
+ if (empty($term) || !is_object($term)) {
199
+ $status = 0;
200
+ }
201
  }
202
  } else {
203
  $status = 0;
204
  }
 
205
  if($status) {
206
  if ($typenow == "attachment") {
207
  $admin_url = admin_url("upload.php?post_type=attachment&media_folder=");
609
  }
610
 
611
  public function output_backbone_view_filters() {
612
+
613
+ global $typenow, $current_screen;
614
+ $isAjax = (defined('DOING_AJAX') && DOING_AJAX)?1:0;
615
+ $options = get_option('folders_settings');
616
+ $options = (empty($options) || !is_array($options))?array():$options;
617
+ if(!$isAjax && in_array($typenow, $options) && (isset($current_screen->base) && ($current_screen->base == "edit" || ($current_screen->base == "upload")))) {
618
+
619
+ $default_folders = get_option('default_folders');
620
+ $default_folders = (empty($default_folders) || !is_array($default_folders))?array():$default_folders;
621
+
622
+ $status = 1;
623
+ if(isset($default_folders[$typenow]) && !empty($default_folders[$typenow])) {
624
+ $type = self::get_custom_post_type($typenow);
625
+ if($default_folders[$typenow] != -1) {
626
+ $term = get_term_by('slug', $default_folders[$typenow], $type);
627
+ if (empty($term) || !is_object($term)) {
628
+ $status = 0;
629
+ }
630
+ }
631
+ } else {
632
+ $status = 0;
633
+ }
634
+ if($status) {
635
+ if ($typenow == "attachment") {
636
+ $admin_url = admin_url("upload.php?post_type=attachment&media_folder=");
637
+ if (!isset($_REQUEST['media_folder'])) {
638
+ if (isset($default_folders[$typenow]) && !empty($default_folders[$typenow])) {
639
+ $admin_url .= $default_folders[$typenow];
640
+ ?>
641
+ <script>
642
+ window.location = '<?php echo $admin_url ?>';
643
+ </script>
644
+ <?php
645
+ exit;
646
+ }
647
+ }
648
+ }
649
+ }
650
+ }
651
+
652
  /* Free/Pro URL Change */
653
  wp_enqueue_script( 'folders-media', WCP_FOLDER_URL.'assets/js/media.js', array( 'media-editor', 'media-views' ), WCP_FOLDER_VERSION, true );
654
  wp_localize_script( 'folders-media', 'folders_media_options', array(
readme.txt CHANGED
@@ -3,7 +3,7 @@ Contributors: galdub, tomeraharon, premio
3
  Tags: folder, folders, organize, pages folders, media library, posts folders, media folders, subfolders, file manager, directories
4
  Requires at least: 3.0.0
5
  Tested up to: 5.3
6
- Stable tag: 2.4.1
7
  Plugin URI: https://premio.io/downloads/folders/
8
 
9
  Folders is a WordPress plugin that will help you quickly organize and manage all of your Pages, Posts and Media library files in folders.
@@ -62,6 +62,7 @@ Digital Agencies: You're creating all sorts of content for your clients daily -
62
  * Drag and drop folders, change order, and hierarchy
63
  * Upload directly to a media library folder - you can easily upload images or any other kind of files to a specific folder
64
  * Select a default folder for your media library, posts, pages, and custom posts - you can select the folder that will load by default when you open your media library, pages, posts, and custom posts. For example, you can show all the unassigned files whenever you open the media library.
 
65
  * Bulk select images and media files and drag them to any folder. No worries, you can also drag and drop media library files one-by-one if you want :)
66
  * Bulk select and delete folders. You can select one folder or more and delete it in the click of a button.
67
  * While adding images or any kind of file from your media library to your pages and posts, use Folders to view all your media library files based on the folder the files are assigned to. You can also upload new files directly to a folder from that section
@@ -142,6 +143,9 @@ A live demo for the Folders plugin is available at <a href="https://demo.premio.
142
 
143
  == Changelog ==
144
 
 
 
 
145
  = 2.4.1 =
146
  PHP 7.3 fix
147
 
3
  Tags: folder, folders, organize, pages folders, media library, posts folders, media folders, subfolders, file manager, directories
4
  Requires at least: 3.0.0
5
  Tested up to: 5.3
6
+ Stable tag: 2.4.2
7
  Plugin URI: https://premio.io/downloads/folders/
8
 
9
  Folders is a WordPress plugin that will help you quickly organize and manage all of your Pages, Posts and Media library files in folders.
62
  * Drag and drop folders, change order, and hierarchy
63
  * Upload directly to a media library folder - you can easily upload images or any other kind of files to a specific folder
64
  * Select a default folder for your media library, posts, pages, and custom posts - you can select the folder that will load by default when you open your media library, pages, posts, and custom posts. For example, you can show all the unassigned files whenever you open the media library.
65
+ * New! Media Library folders upload progress bar - track the progress of your uploads to the media library in real time.
66
  * Bulk select images and media files and drag them to any folder. No worries, you can also drag and drop media library files one-by-one if you want :)
67
  * Bulk select and delete folders. You can select one folder or more and delete it in the click of a button.
68
  * While adding images or any kind of file from your media library to your pages and posts, use Folders to view all your media library files based on the folder the files are assigned to. You can also upload new files directly to a folder from that section
143
 
144
  == Changelog ==
145
 
146
+ = 2.4.2 =
147
+ Added a progress bar when you upload files to the media library folders. You can now track how many files were uploaded in real time. We've also fixed a default folders bug.
148
+
149
  = 2.4.1 =
150
  PHP 7.3 fix
151
 
templates/admin/admin-content.php CHANGED
@@ -50,7 +50,7 @@ if(isset($customize_folders['dropdown_color']) && !empty($customize_folders['dro
50
  }
51
  if(isset($customize_folders['folder_bg_color']) && !empty($customize_folders['folder_bg_color'])) {
52
  ?>
53
- .wcp-container .route.active-item > h3.title, .header-posts a.active-item, .un-categorised-items.active-item { background-color: <?php echo esc_attr($customize_folders['folder_bg_color']) ?> !important; color: #ffffff; }
54
  <?php
55
  }
56
  if(isset($customize_folders['bulk_organize_button_color']) && !empty($customize_folders['bulk_organize_button_color'])) {
@@ -238,4 +238,4 @@ if(!empty($post_type)) {
238
  </div>
239
  </div>
240
  </form>
241
- </div>
50
  }
51
  if(isset($customize_folders['folder_bg_color']) && !empty($customize_folders['folder_bg_color'])) {
52
  ?>
53
+ .orange-bg > span ,.wcp-container .route.active-item > h3.title, .header-posts a.active-item, .un-categorised-items.active-item { background-color: <?php echo esc_attr($customize_folders['folder_bg_color']) ?> !important; color: #ffffff; }
54
  <?php
55
  }
56
  if(isset($customize_folders['bulk_organize_button_color']) && !empty($customize_folders['bulk_organize_button_color'])) {
238
  </div>
239
  </div>
240
  </form>
241
+ </div>
templates/admin/upgrade-to-pro.php CHANGED
@@ -37,8 +37,8 @@ $pro_url = "https://go.premio.io/?edd_action=add_to_cart&download_id=687&edd_opt
37
  <option data-header="Renewals for 25% off" data-price="25" value="<?php echo esc_url($pro_url."1") ?>">
38
  <?php esc_html_e("Updates & support for 1 year") ?>
39
  </option>
40
- <option data-header="For 3 years" data-price="49" value="<?php echo esc_url($pro_url."4") ?>">
41
- <?php esc_html_e("Updates & support for 3 years") ?>
42
  </option>
43
  <option data-header="For lifetime" data-price="79" value="<?php echo esc_url($pro_url."5") ?>">
44
  <?php esc_html_e("Updates & support for lifetime") ?>
@@ -77,8 +77,8 @@ $pro_url = "https://go.premio.io/?edd_action=add_to_cart&download_id=687&edd_opt
77
  <option data-header="Renewals for 25% off" data-price="59" value="<?php echo esc_url($pro_url."2") ?>">
78
  <?php esc_html_e("Updates & support for 1 year") ?>
79
  </option>
80
- <option data-header="For 3 years" data-price="99" value="<?php echo esc_url($pro_url."6") ?>">
81
- <?php esc_html_e("Updates & support for 3 years") ?>
82
  </option>
83
  <option data-header="For lifetime" data-price="149" value="<?php echo esc_url($pro_url."7") ?>">
84
  <?php esc_html_e("Updates & support for lifetime") ?>
@@ -119,8 +119,8 @@ $pro_url = "https://go.premio.io/?edd_action=add_to_cart&download_id=687&edd_opt
119
  <option data-header="Renewals for 25% off" data-price="99" value="<?php echo esc_url($pro_url."10") ?>">
120
  <?php esc_html_e("Updates & support for 1 year") ?>
121
  </option>
122
- <option data-header="For 3 years" data-price="179" value="<?php echo esc_url($pro_url."11") ?>">
123
- <?php esc_html_e("Updates & support for 3 years") ?>
124
  </option>
125
  <option data-header="For lifetime" data-price="249" value="<?php echo esc_url($pro_url."12") ?>">
126
  <?php esc_html_e("Updates & support for lifetime") ?>
37
  <option data-header="Renewals for 25% off" data-price="25" value="<?php echo esc_url($pro_url."1") ?>">
38
  <?php esc_html_e("Updates & support for 1 year") ?>
39
  </option>
40
+ <option data-header="For 2 years" data-price="39" value="<?php echo esc_url($pro_url."13") ?>">
41
+ <?php esc_html_e("Updates & support for 2 years") ?>
42
  </option>
43
  <option data-header="For lifetime" data-price="79" value="<?php echo esc_url($pro_url."5") ?>">
44
  <?php esc_html_e("Updates & support for lifetime") ?>
77
  <option data-header="Renewals for 25% off" data-price="59" value="<?php echo esc_url($pro_url."2") ?>">
78
  <?php esc_html_e("Updates & support for 1 year") ?>
79
  </option>
80
+ <option data-header="For 2 years" data-price="89" value="<?php echo esc_url($pro_url."14") ?>">
81
+ <?php esc_html_e("Updates & support for 2 years") ?>
82
  </option>
83
  <option data-header="For lifetime" data-price="149" value="<?php echo esc_url($pro_url."7") ?>">
84
  <?php esc_html_e("Updates & support for lifetime") ?>
119
  <option data-header="Renewals for 25% off" data-price="99" value="<?php echo esc_url($pro_url."10") ?>">
120
  <?php esc_html_e("Updates & support for 1 year") ?>
121
  </option>
122
+ <option data-header="For 2 years" data-price="149" value="<?php echo esc_url($pro_url."15") ?>">
123
+ <?php esc_html_e("Updates & support for 2 years") ?>
124
  </option>
125
  <option data-header="For lifetime" data-price="249" value="<?php echo esc_url($pro_url."12") ?>">
126
  <?php esc_html_e("Updates & support for lifetime") ?>