Unlimited Elements For Elementor (Free Widgets, Addons, Templates) - Version 1.5.11

Version Description

Download this release

Release Info

Developer valiano
Plugin Icon 128x128 Unlimited Elements For Elementor (Free Widgets, Addons, Templates)
Version 1.5.11
Comparing to
See all releases

Code changes from version 1.5.10 to 1.5.11

assets_libraries/filters/ue_filters.js CHANGED
@@ -2,7 +2,7 @@
2
  function UEDynamicFilters(){
3
 
4
  var g_objFilters, g_objGrid, g_filtersData, g_urlBase;
5
- var g_urlAjax, g_lastGridAjaxCall, g_cache = {};
6
 
7
  var g_types = {
8
  PAGINATION:"pagination",
@@ -21,7 +21,8 @@ function UEDynamicFilters(){
21
  CLASS_INITING: "uc-filter-initing",
22
  CLASS_REFRESH_SOON: "uc-ajax-refresh-soon",
23
  EVENT_SET_HTML_ITEMS: "uc_ajax_sethtml",
24
- EVENT_AJAX_REFRESHED: "uc_ajax_refreshed" //on grid
 
25
  };
26
 
27
  var g_options = {
@@ -388,6 +389,25 @@ function UEDynamicFilters(){
388
 
389
  }
390
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
391
  function ________FILTERS_______________(){}
392
 
393
 
@@ -1000,7 +1020,7 @@ function UEDynamicFilters(){
1000
  * set html grid from ajax response
1001
  */
1002
  function operateAjax_setHtmlGrid(response, objGrid, isLoadMore){
1003
-
1004
  if(objGrid.length == 0)
1005
  return(false);
1006
 
@@ -1032,6 +1052,16 @@ function UEDynamicFilters(){
1032
 
1033
  var isCustomRefresh = objGrid.data("custom-sethtml");
1034
 
 
 
 
 
 
 
 
 
 
 
1035
  //if custom refresh - just save the new html in data
1036
  if(isCustomRefresh == true){
1037
 
@@ -1157,6 +1187,9 @@ function UEDynamicFilters(){
1157
  operateAjax_setHtmlWidgets(response, objFilters);
1158
 
1159
  objGrid.trigger(g_vars.EVENT_AJAX_REFRESHED);
 
 
 
1160
 
1161
  //scroll to top
1162
  if(isLoadMore == false){
@@ -1448,7 +1481,7 @@ function UEDynamicFilters(){
1448
  jQuery.each(objElements,function(index, objElement){
1449
 
1450
  if(isShow == true){
1451
-
1452
  showAjaxLoader(objElement);
1453
  }
1454
  else
@@ -1503,10 +1536,17 @@ function UEDynamicFilters(){
1503
  history.replaceState({}, null, urlReplace);
1504
  }
1505
 
 
 
1506
  //set the loaders
1507
 
1508
- if(isLoadMore !== true && isFiltersInit !== true)
 
1509
  showAjaxLoader(objGrid);
 
 
 
 
1510
 
1511
  var objFiltersToReload = objFilters.filter(function(objFilter){
1512
 
@@ -1522,8 +1562,12 @@ function UEDynamicFilters(){
1522
 
1523
  ajaxRequest(ajaxUrl,null,null, function(response){
1524
 
1525
- if(isLoadMore !== true)
1526
  hideAjaxLoader(objGrid);
 
 
 
 
1527
 
1528
  showMultipleAjaxLoaders(objFilters, false);
1529
 
@@ -1962,6 +2006,8 @@ function UEDynamicFilters(){
1962
  */
1963
  function init(){
1964
 
 
 
1965
  var success = initGlobals();
1966
 
1967
  if(success == false)
2
  function UEDynamicFilters(){
3
 
4
  var g_objFilters, g_objGrid, g_filtersData, g_urlBase;
5
+ var g_urlAjax, g_lastGridAjaxCall, g_cache = {}, g_objBody;
6
 
7
  var g_types = {
8
  PAGINATION:"pagination",
21
  CLASS_INITING: "uc-filter-initing",
22
  CLASS_REFRESH_SOON: "uc-ajax-refresh-soon",
23
  EVENT_SET_HTML_ITEMS: "uc_ajax_sethtml",
24
+ EVENT_AJAX_REFRESHED: "uc_ajax_refreshed", //on grid
25
+ EVENT_AJAX_REFRESHED_BODY: "uc_ajax_refreshed_body" //on grid
26
  };
27
 
28
  var g_options = {
389
 
390
  }
391
 
392
+ /**
393
+ * get grid empty message
394
+ */
395
+ function getGridEmptyMessage(objGrid){
396
+
397
+ var gridID = objGrid.attr("id");
398
+
399
+ if(!gridID)
400
+ return(null);
401
+
402
+ var objEmptyMessage = jQuery("#"+gridID+"_empty_message");
403
+
404
+ if(objEmptyMessage.length == 0)
405
+ return(null);
406
+
407
+ return(objEmptyMessage);
408
+ }
409
+
410
+
411
  function ________FILTERS_______________(){}
412
 
413
 
1020
  * set html grid from ajax response
1021
  */
1022
  function operateAjax_setHtmlGrid(response, objGrid, isLoadMore){
1023
+
1024
  if(objGrid.length == 0)
1025
  return(false);
1026
 
1052
 
1053
  var isCustomRefresh = objGrid.data("custom-sethtml");
1054
 
1055
+ //show / hide empty message if available and empty response
1056
+ var objEmptyMessage = getGridEmptyMessage(objGrid);
1057
+
1058
+ if(objEmptyMessage){
1059
+ if(htmlItems == "")
1060
+ objEmptyMessage.show();
1061
+ else
1062
+ objEmptyMessage.hide();
1063
+ }
1064
+
1065
  //if custom refresh - just save the new html in data
1066
  if(isCustomRefresh == true){
1067
 
1187
  operateAjax_setHtmlWidgets(response, objFilters);
1188
 
1189
  objGrid.trigger(g_vars.EVENT_AJAX_REFRESHED);
1190
+ g_objBody.trigger(g_vars.EVENT_AJAX_REFRESHED_BODY, [objGrid]);
1191
+
1192
+ //trigger body as well
1193
 
1194
  //scroll to top
1195
  if(isLoadMore == false){
1481
  jQuery.each(objElements,function(index, objElement){
1482
 
1483
  if(isShow == true){
1484
+
1485
  showAjaxLoader(objElement);
1486
  }
1487
  else
1536
  history.replaceState({}, null, urlReplace);
1537
  }
1538
 
1539
+ var objEmptyMessage = getGridEmptyMessage(objGrid);
1540
+
1541
  //set the loaders
1542
 
1543
+ if(isLoadMore !== true && isFiltersInit !== true){
1544
+
1545
  showAjaxLoader(objGrid);
1546
+
1547
+ if(objEmptyMessage)
1548
+ showAjaxLoader(objEmptyMessage);
1549
+ }
1550
 
1551
  var objFiltersToReload = objFilters.filter(function(objFilter){
1552
 
1562
 
1563
  ajaxRequest(ajaxUrl,null,null, function(response){
1564
 
1565
+ if(isLoadMore !== true){
1566
  hideAjaxLoader(objGrid);
1567
+
1568
+ if(objEmptyMessage)
1569
+ hideAjaxLoader(objEmptyMessage);
1570
+ }
1571
 
1572
  showMultipleAjaxLoaders(objFilters, false);
1573
 
2006
  */
2007
  function init(){
2008
 
2009
+ g_objBody = jQuery("body");
2010
+
2011
  var success = initGlobals();
2012
 
2013
  if(success == false)
assets_libraries/remote/ue-remote-controls.js CHANGED
@@ -415,7 +415,7 @@ this.onEvent = function(name, func){
415
  g_vars.is_editor = isEditor;
416
 
417
  g_objParent = objParent;
418
-
419
  var connectType = getVal(options, "connect_type");
420
  if(connectType == "events")
421
  g_isTypeEvents = true;
@@ -1426,7 +1426,7 @@ function UERemoteWidgets(){
1426
  g_vars.is_inited = initParent();
1427
 
1428
  if(g_vars.is_inited == false){
1429
-
1430
  g_objParent.on("uc-object-ready", func);
1431
 
1432
  }
@@ -2017,7 +2017,7 @@ function UERemoteWidgets(){
2017
  * on widget init
2018
  */
2019
  this.onWidgetInit = function(widgetID, func, options){
2020
-
2021
  try{
2022
 
2023
  if(!g_vars.funcOnInit){
415
  g_vars.is_editor = isEditor;
416
 
417
  g_objParent = objParent;
418
+
419
  var connectType = getVal(options, "connect_type");
420
  if(connectType == "events")
421
  g_isTypeEvents = true;
1426
  g_vars.is_inited = initParent();
1427
 
1428
  if(g_vars.is_inited == false){
1429
+
1430
  g_objParent.on("uc-object-ready", func);
1431
 
1432
  }
2017
  * on widget init
2018
  */
2019
  this.onWidgetInit = function(widgetID, func, options){
2020
+
2021
  try{
2022
 
2023
  if(!g_vars.funcOnInit){
inc_php/framework/functions.php CHANGED
@@ -7,10 +7,11 @@
7
  * */
8
  defined('UNLIMITED_ELEMENTS_INC') or die('Restricted access');
9
 
10
- //---------------------------------------------------------------------------------------------------------------------
11
 
12
  if(!function_exists("dmp")){
13
  function dmp($str){
 
14
  echo "<div align='left' style='direction:ltr;'>";
15
  echo "<pre>";
16
  print_r($str);
7
  * */
8
  defined('UNLIMITED_ELEMENTS_INC') or die('Restricted access');
9
 
10
+ //---------------------------------------------------------------------------------------------------------------------
11
 
12
  if(!function_exists("dmp")){
13
  function dmp($str){
14
+
15
  echo "<div align='left' style='direction:ltr;'>";
16
  echo "<pre>";
17
  print_r($str);
inc_php/framework/instagram/helper.class.php CHANGED
@@ -31,6 +31,21 @@ class HelperInstaUC{
31
  return($arrData);
32
  }
33
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34
  /**
35
  * redirect to general settings
36
  */
@@ -431,9 +446,7 @@ class HelperInstaUC{
431
 
432
  $response = curl_exec($curl);
433
  $arrInfo = curl_getinfo($curl);
434
-
435
- curl_close($curl);
436
-
437
  if($debug == true){
438
  dmp($response);
439
  dmp($arrInfo);
@@ -446,11 +459,21 @@ class HelperInstaUC{
446
  case 400:
447
  break;
448
  default:
449
- $error = curl_error($curl);
 
 
 
 
 
 
 
 
 
450
  UniteFunctionsUC::throwError("request error: ".$error.", code: $code");
451
  break;
452
  }
453
-
 
454
 
455
  //cut the header
456
  $headerSize = UniteFunctionsUC::getVal($arrInfo, "header_size");
31
  return($arrData);
32
  }
33
 
34
+ /**
35
+ * return if access token exists in settings
36
+ */
37
+ public static function isAccessTokenExists(){
38
+
39
+ $arrData = self::getInstagramSavedAccessData();
40
+
41
+ $token = UniteFunctionsUC::getVal($arrData, "access_token");
42
+
43
+ $isExists = !empty($token);
44
+
45
+ return($isExists);
46
+ }
47
+
48
+
49
  /**
50
  * redirect to general settings
51
  */
446
 
447
  $response = curl_exec($curl);
448
  $arrInfo = curl_getinfo($curl);
449
+
 
 
450
  if($debug == true){
451
  dmp($response);
452
  dmp($arrInfo);
459
  case 400:
460
  break;
461
  default:
462
+
463
+ $error = null;
464
+
465
+ if(!empty($curl))
466
+ $error = @curl_error($curl);
467
+
468
+ if(empty($error)){
469
+ $error = $response;
470
+ }
471
+
472
  UniteFunctionsUC::throwError("request error: ".$error.", code: $code");
473
  break;
474
  }
475
+
476
+ curl_close($curl);
477
 
478
  //cut the header
479
  $headerSize = UniteFunctionsUC::getVal($arrInfo, "header_size");
inc_php/unitecreator_dialog_param.class.php CHANGED
@@ -841,7 +841,8 @@ class UniteCreatorDialogParamWork{
841
  $arrItems = array(
842
  "template"=>__("Template Loop","unlimited-elements-for-elementor"),
843
  "gallery"=>__("Gallery","unlimited-elements-for-elementor"),
844
- "remote"=>__("Remote","unlimited-elements-for-elementor")
 
845
  );
846
 
847
  $htmlSelect = HelperHtmlUC::getHTMLSelect($arrItems,"template","name='use_for' class='unite-inputs-select uc-control' data-controlled-selector='.uc-listing-param-options'", true);
@@ -877,7 +878,7 @@ class UniteCreatorDialogParamWork{
877
 
878
  <!-- Template -->
879
 
880
- <div class="uc-listing-param-options" data-control="template,gallery">
881
  <?php
882
  $this->putCheckbox("enable_pagination", __("Add Pagination", "unlimited-elements-for-elementor"));
883
  ?>
841
  $arrItems = array(
842
  "template"=>__("Template Loop","unlimited-elements-for-elementor"),
843
  "gallery"=>__("Gallery","unlimited-elements-for-elementor"),
844
+ "remote"=>__("Remote","unlimited-elements-for-elementor"),
845
+ "items"=>__("Items","unlimited-elements-for-elementor")
846
  );
847
 
848
  $htmlSelect = HelperHtmlUC::getHTMLSelect($arrItems,"template","name='use_for' class='unite-inputs-select uc-control' data-controlled-selector='.uc-listing-param-options'", true);
878
 
879
  <!-- Template -->
880
 
881
+ <div class="uc-listing-param-options" data-control="template,gallery,items">
882
  <?php
883
  $this->putCheckbox("enable_pagination", __("Add Pagination", "unlimited-elements-for-elementor"));
884
  ?>
inc_php/unitecreator_filters_process.class.php CHANGED
@@ -323,7 +323,6 @@ class UniteCreatorFiltersProcess{
323
  if(!empty($offset))
324
  $arrOutput["offset"] = $offset;
325
 
326
-
327
  //num items
328
 
329
  $numItems = UniteFunctionsUC::getVal($request, "uccount");
@@ -557,6 +556,7 @@ class UniteCreatorFiltersProcess{
557
  $numItems = UniteFunctionsUC::getVal($arrFilters, "num_items");
558
  $offset = UniteFunctionsUC::getVal($arrFilters, "offset");
559
 
 
560
  if(!empty($page))
561
  $args = $this->processRequestFilters_setPaging($args, $page, $numItems);
562
 
@@ -979,6 +979,8 @@ class UniteCreatorFiltersProcess{
979
  if(self::$isFilesAdded == true)
980
  return(false);
981
 
 
 
982
  $urlFiltersJS = GlobalsUC::$url_assets_libraries."filters/ue_filters.js";
983
  HelperUC::addScriptAbsoluteUrl($urlFiltersJS, "ue_filters");
984
 
323
  if(!empty($offset))
324
  $arrOutput["offset"] = $offset;
325
 
 
326
  //num items
327
 
328
  $numItems = UniteFunctionsUC::getVal($request, "uccount");
556
  $numItems = UniteFunctionsUC::getVal($arrFilters, "num_items");
557
  $offset = UniteFunctionsUC::getVal($arrFilters, "offset");
558
 
559
+
560
  if(!empty($page))
561
  $args = $this->processRequestFilters_setPaging($args, $page, $numItems);
562
 
979
  if(self::$isFilesAdded == true)
980
  return(false);
981
 
982
+ UniteProviderFunctionsUC::addAdminJQueryInclude();
983
+
984
  $urlFiltersJS = GlobalsUC::$url_assets_libraries."filters/ue_filters.js";
985
  HelperUC::addScriptAbsoluteUrl($urlFiltersJS, "ue_filters");
986
 
inc_php/unitecreator_helper.class.php CHANGED
@@ -32,6 +32,22 @@ defined('UNLIMITED_ELEMENTS_INC') or die('Restricted access');
32
 
33
  public static function a____GENERAL____(){}
34
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
35
  /**
36
  * validate plugin startup functionality
37
  * Enter description here ...
@@ -650,13 +666,17 @@ defined('UNLIMITED_ELEMENTS_INC') or die('Restricted access');
650
  $realpath = realpath($path);
651
  if(!$realpath)
652
  return($path);
653
-
654
  $isDir = is_dir($realpath);
655
 
656
  $len = strlen($realpath);
657
  $realBase = realpath(GlobalsUC::$path_base);
658
- $relativePath = str_replace($realBase, "", $realpath);
659
-
 
 
 
 
660
  //add dots
661
  if($addDots == true && strlen($relativePath) != strlen($realpath))
662
  $relativePath = "..".$relativePath;
@@ -665,7 +685,7 @@ defined('UNLIMITED_ELEMENTS_INC') or die('Restricted access');
665
 
666
  if($addDots == false)
667
  $relativePath = ltrim($relativePath, "/");
668
-
669
  //add slash to end
670
  if($isDir == true)
671
  $relativePath = UniteFunctionsUC::addPathEndingSlash($relativePath);
@@ -705,10 +725,11 @@ defined('UNLIMITED_ELEMENTS_INC') or die('Restricted access');
705
  * turn path to relative url
706
  */
707
  public static function pathToRelativeUrl($path){
708
-
709
  $path = self::pathToRelative($path, false);
710
- $url = str_replace('\\', '/', $path);
711
 
 
 
712
  //remove starting slash
713
  $url = ltrim($url, '/');
714
 
@@ -726,6 +747,7 @@ defined('UNLIMITED_ELEMENTS_INC') or die('Restricted access');
726
  return("");
727
 
728
  $url = self::pathToRelativeUrl($path);
 
729
  $url = self::URLtoFull($url);
730
  return($url);
731
  }
32
 
33
  public static function a____GENERAL____(){}
34
 
35
+ /**
36
+ * heck if debug by url
37
+ */
38
+ public static function isDebug(){
39
+
40
+ $debug = UniteFunctionsUC::getGetVar("ucdebug","",UniteFunctionsUC::SANITIZE_KEY);
41
+
42
+ if(empty($debug))
43
+ return(false);
44
+
45
+ $debug = UniteFunctionsUC::strToBool($debug);
46
+
47
+ return($debug);
48
+ }
49
+
50
+
51
  /**
52
  * validate plugin startup functionality
53
  * Enter description here ...
666
  $realpath = realpath($path);
667
  if(!$realpath)
668
  return($path);
669
+
670
  $isDir = is_dir($realpath);
671
 
672
  $len = strlen($realpath);
673
  $realBase = realpath(GlobalsUC::$path_base);
674
+
675
+ if($realBase != "/")
676
+ $relativePath = str_replace($realBase, "", $realpath);
677
+ else
678
+ $relativePath = $realpath;
679
+
680
  //add dots
681
  if($addDots == true && strlen($relativePath) != strlen($realpath))
682
  $relativePath = "..".$relativePath;
685
 
686
  if($addDots == false)
687
  $relativePath = ltrim($relativePath, "/");
688
+
689
  //add slash to end
690
  if($isDir == true)
691
  $relativePath = UniteFunctionsUC::addPathEndingSlash($relativePath);
725
  * turn path to relative url
726
  */
727
  public static function pathToRelativeUrl($path){
728
+
729
  $path = self::pathToRelative($path, false);
 
730
 
731
+ $url = str_replace('\\', '/', $path);
732
+
733
  //remove starting slash
734
  $url = ltrim($url, '/');
735
 
747
  return("");
748
 
749
  $url = self::pathToRelativeUrl($path);
750
+
751
  $url = self::URLtoFull($url);
752
  return($url);
753
  }
inc_php/unitecreator_template_engine.class.php CHANGED
@@ -561,9 +561,9 @@ class UniteCreatorTemplateEngineWork{
561
  /**
562
  * get post author
563
  */
564
- public function getPostAuthor($authorID){
565
-
566
- $arrUserData = UniteFunctionsWPUC::getUserDataById($authorID);
567
 
568
  return($arrUserData);
569
  }
@@ -685,7 +685,7 @@ class UniteCreatorTemplateEngineWork{
685
 
686
  if(function_exists("wc_price") == false)
687
  return($price);
688
-
689
  $newPrice = wc_price($price);
690
 
691
  return($newPrice);
@@ -904,6 +904,18 @@ class UniteCreatorTemplateEngineWork{
904
  HelperUC::$operations->putPostCustomFieldsDebug($postID);
905
 
906
  break;
 
 
 
 
 
 
 
 
 
 
 
 
907
  default:
908
 
909
  $type = UniteFunctionsUC::sanitizeAttr($type);
561
  /**
562
  * get post author
563
  */
564
+ public function getPostAuthor($authorID, $getMeta = false, $getAvatar = false){
565
+
566
+ $arrUserData = UniteFunctionsWPUC::getUserDataById($authorID, $getMeta, $getAvatar);
567
 
568
  return($arrUserData);
569
  }
685
 
686
  if(function_exists("wc_price") == false)
687
  return($price);
688
+
689
  $newPrice = wc_price($price);
690
 
691
  return($newPrice);
904
  HelperUC::$operations->putPostCustomFieldsDebug($postID);
905
 
906
  break;
907
+ case "put_post_content":
908
+
909
+ $content = HelperProviderCoreUC_EL::getPostContent($arg1, $arg2);
910
+
911
+ echo $content;
912
+ break;
913
+ case "get_num_comments":
914
+
915
+ $numComments = get_comments_number($arg1);
916
+
917
+ return($numComments);
918
+ break;
919
  default:
920
 
921
  $type = UniteFunctionsUC::sanitizeAttr($type);
includes.php CHANGED
@@ -12,7 +12,7 @@ if(!defined('UNLIMITED_ELEMENTS_INC'))
12
  defined('UNLIMITED_ELEMENTS_INC') or die('Restricted access');
13
 
14
  if(!defined("UNLIMITED_ELEMENTS_VERSION"))
15
- define("UNLIMITED_ELEMENTS_VERSION", "1.5.10");
16
 
17
  $currentFile = __FILE__;
18
  $currentFolder = dirname($currentFile);
12
  defined('UNLIMITED_ELEMENTS_INC') or die('Restricted access');
13
 
14
  if(!defined("UNLIMITED_ELEMENTS_VERSION"))
15
+ define("UNLIMITED_ELEMENTS_VERSION", "1.5.11");
16
 
17
  $currentFile = __FILE__;
18
  $currentFolder = dirname($currentFile);
provider/core/plugins/unlimited_elements/elementor/assets/uc_editor_admin.js CHANGED
@@ -1397,22 +1397,25 @@ function UniteCreatorElementorEditorAdmin(){
1397
  function loadBGWidget(bgType, objSettings, funResponse){
1398
 
1399
  var settingsData = getBGSettingsData(bgType, objSettings);
1400
-
1401
  var data = {
1402
  addontype: "bg_addon",
1403
  name: bgType,
1404
  elementor_settings: settingsData
1405
  };
1406
 
1407
- ajaxRequest("get_addon_output_data", data, funResponse);
 
 
 
1408
  }
1409
 
1410
 
1411
  /**
1412
  * apply background to section
1413
  */
1414
- function applyBackgroundToElement(objElement, response){
1415
-
1416
  var objIframeWindow = jQuery("#elementor-preview-iframe");
1417
 
1418
  if(objIframeWindow.length == 0)
@@ -1422,37 +1425,74 @@ function UniteCreatorElementorEditorAdmin(){
1422
 
1423
  var arrIncludes = getVal(response, "includes");
1424
 
 
 
 
 
1425
  putIncludes(frameWindow.contentWindow, arrIncludes, function(){
1426
 
1427
  var contentHTML = getVal(response, "html");
1428
 
1429
- var html = "<div class='unlimited-elements-background-overlay'>";
1430
 
1431
- html += contentHTML;
1432
-
1433
- html += "</div>";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1434
 
1435
- objElement.prepend(html);
 
 
 
 
 
 
1436
 
1437
  });
1438
 
1439
  }
1440
 
 
1441
  /**
1442
  * check and load element background if needed
1443
  */
1444
  function checkElementBackground(element, objSettings){
1445
 
1446
  var backgroundType = getVal(objSettings, "uc_background_type");
1447
-
1448
- if(!backgroundType)
1449
- return(false);
1450
-
1451
- if(backgroundType == "__none__")
 
 
 
1452
  return(false);
1453
-
1454
- loadBGWidget(backgroundType, objSettings, function(response){
1455
- applyBackgroundToElement(element, response);
 
1456
  });
1457
 
1458
  }
@@ -1516,6 +1556,7 @@ function UniteCreatorElementorEditorAdmin(){
1516
  function initBackgrounds(){
1517
 
1518
  elementor.hooks.addAction("panel/open_editor/section", onElementorSectionPanelChange);
 
1519
 
1520
  //elementorFrontend.hooks.addAction( 'frontend/element_ready/global', onFrontElementReady);
1521
 
1397
  function loadBGWidget(bgType, objSettings, funResponse){
1398
 
1399
  var settingsData = getBGSettingsData(bgType, objSettings);
1400
+
1401
  var data = {
1402
  addontype: "bg_addon",
1403
  name: bgType,
1404
  elementor_settings: settingsData
1405
  };
1406
 
1407
+ ajaxRequest("get_addon_output_data", data, function(response){
1408
+ funResponse(response, objSettings);
1409
+ });
1410
+
1411
  }
1412
 
1413
 
1414
  /**
1415
  * apply background to section
1416
  */
1417
+ function applyBackgroundToElement(objElement, response, settingsData){
1418
+
1419
  var objIframeWindow = jQuery("#elementor-preview-iframe");
1420
 
1421
  if(objIframeWindow.length == 0)
1425
 
1426
  var arrIncludes = getVal(response, "includes");
1427
 
1428
+ var location = getVal(settingsData, "uc_background_location");
1429
+
1430
+ var classFront = "uc-bg-front";
1431
+
1432
  putIncludes(frameWindow.contentWindow, arrIncludes, function(){
1433
 
1434
  var contentHTML = getVal(response, "html");
1435
 
1436
+ var objBackgroundOverlay = objElement.children(".unlimited-elements-background-overlay");
1437
 
1438
+ //replace
1439
+ if(objBackgroundOverlay.length == 1){
1440
+
1441
+ objBackgroundOverlay.html(contentHTML);
1442
+
1443
+ if(location == "front")
1444
+ objBackgroundOverlay.addClass(classFront);
1445
+ else
1446
+ objBackgroundOverlay.removeClass(classFront);
1447
+
1448
+ }else{
1449
+ //add
1450
+
1451
+ var addClass = "";
1452
+ if(location == "front")
1453
+ addClass = " "+classFront;
1454
+
1455
+ var html = "<div class='unlimited-elements-background-overlay"+addClass+"'>";
1456
+
1457
+ html += contentHTML;
1458
+
1459
+ html += "</div>";
1460
+
1461
+ objElement.prepend(html);
1462
+ }
1463
 
1464
+ var objVideoContainer = objElement.children(".elementor-background-video-container");
1465
+ if(objVideoContainer.length == 1){
1466
+ var objBackgroundOverlay = objElement.children(".unlimited-elements-background-overlay");
1467
+
1468
+ objBackgroundOverlay.insertAfter(objVideoContainer);
1469
+ }
1470
+
1471
 
1472
  });
1473
 
1474
  }
1475
 
1476
+
1477
  /**
1478
  * check and load element background if needed
1479
  */
1480
  function checkElementBackground(element, objSettings){
1481
 
1482
  var backgroundType = getVal(objSettings, "uc_background_type");
1483
+
1484
+ if(!backgroundType || backgroundType == "__none__"){
1485
+
1486
+ //remove bg if exists
1487
+ var objBackgroundOverlay = element.children(".unlimited-elements-background-overlay");
1488
+ if(objBackgroundOverlay.length)
1489
+ objBackgroundOverlay.remove();
1490
+
1491
  return(false);
1492
+ }
1493
+
1494
+ loadBGWidget(backgroundType, objSettings, function(response, settingsData){
1495
+ applyBackgroundToElement(element, response, settingsData);
1496
  });
1497
 
1498
  }
1556
  function initBackgrounds(){
1557
 
1558
  elementor.hooks.addAction("panel/open_editor/section", onElementorSectionPanelChange);
1559
+ elementor.hooks.addAction("panel/open_editor/container", onElementorSectionPanelChange);
1560
 
1561
  //elementorFrontend.hooks.addAction( 'frontend/element_ready/global', onFrontElementReady);
1562
 
provider/core/plugins/unlimited_elements/elementor/assets/uc_front_admin.css CHANGED
@@ -7,4 +7,8 @@
7
  width:100%;
8
  height:100%;
9
  z-index:0;
10
- }
 
 
 
 
7
  width:100%;
8
  height:100%;
9
  z-index:0;
10
+ }
11
+
12
+ .unlimited-elements-background-overlay.uc-bg-front{
13
+ z-index:999;
14
+ }
provider/core/plugins/unlimited_elements/elementor/elementor_integrate.class.php CHANGED
@@ -701,6 +701,7 @@ class UniteCreatorElementorIntegrate{
701
 
702
  $elementID = UniteFunctionsUC::getVal($rawData, "id");
703
 
 
704
  try{
705
 
706
  $objAddon = new UniteCreatorAddon();
@@ -727,7 +728,13 @@ class UniteCreatorElementorIntegrate{
727
 
728
  //put includes
729
  $this->outputBGIncludes($output);
730
-
 
 
 
 
 
 
731
  $this->arrBGAddonsOutput[$elementID] = $output;
732
 
733
  }catch(Exception $e){
@@ -767,7 +774,11 @@ class UniteCreatorElementorIntegrate{
767
  width:100%;
768
  height:100%;
769
  z-index:0;
770
- }
 
 
 
 
771
  </style>
772
 
773
  <?php
@@ -775,9 +786,14 @@ class UniteCreatorElementorIntegrate{
775
  foreach($this->arrBGAddonsOutput as $elementID => $bgOutput){
776
 
777
  $html = UniteFunctionsUC::getVal($bgOutput, "html");
 
 
 
 
 
778
 
779
  ?>
780
- <div class="unlimited-elements-background-overlay" data-forid="<?php echo $elementID?>" style="display:none">
781
  <?php echo $html?>
782
  </div>
783
  <?php
@@ -805,8 +821,14 @@ class UniteCreatorElementorIntegrate{
805
 
806
  if(objTarget.length == 0)
807
  return(true);
808
-
809
- objBgElement.detach().prependTo(objTarget).show();
 
 
 
 
 
 
810
  objBgElement.trigger("bg_attached");
811
  objBgElement.addClass("uc-bg-attached");
812
 
@@ -844,7 +866,7 @@ class UniteCreatorElementorIntegrate{
844
  $none = "__none__";
845
 
846
  $arrBGItems = array();
847
- $arrBGItems[$none] = __("[Not Background]", "unlimited-elements-for-elementor");
848
 
849
  foreach(self::$arrBGAddonsRecords as $addon){
850
 
@@ -893,7 +915,21 @@ class UniteCreatorElementorIntegrate{
893
 
894
  $objWidget->registerBGControls();
895
  }
896
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
897
  $objControls->add_control(
898
  'html_button_installbg',
899
  array(
@@ -1206,9 +1242,9 @@ class UniteCreatorElementorIntegrate{
1206
 
1207
  $adminStyleHandle = "unlimited_elements_editor_admin_css";
1208
 
1209
- HelperUC::addScriptAbsoluteUrl(HelperProviderCoreUC_EL::$urlCore."elementor/assets/uc_editor_admin.js", "unlimited_elments_editor_admin");
1210
  HelperUC::addStyleAbsoluteUrl(HelperProviderCoreUC_EL::$urlCore."elementor/assets/uc_editor_admin.css", $adminStyleHandle);
1211
-
1212
  //select2 sortable
1213
  HelperUC::addScriptAbsoluteUrl(GlobalsUC::$urlPlugin."js/select2/select2.sortable.js", "select2_sortable_js");
1214
  HelperUC::addStyleAbsoluteUrl(GlobalsUC::$urlPlugin."js/select2/select2.sortable.css", "select2_sortable_css");
701
 
702
  $elementID = UniteFunctionsUC::getVal($rawData, "id");
703
 
704
+
705
  try{
706
 
707
  $objAddon = new UniteCreatorAddon();
728
 
729
  //put includes
730
  $this->outputBGIncludes($output);
731
+
732
+ //add location too
733
+ $location = UniteFunctionsUC::getVal($settings, "uc_background_location");
734
+
735
+ if(is_array($output))
736
+ $output["location"] = $location;
737
+
738
  $this->arrBGAddonsOutput[$elementID] = $output;
739
 
740
  }catch(Exception $e){
774
  width:100%;
775
  height:100%;
776
  z-index:0;
777
+ }
778
+
779
+ .unlimited-elements-background-overlay.uc-bg-front{
780
+ z-index:999;
781
+ }
782
  </style>
783
 
784
  <?php
786
  foreach($this->arrBGAddonsOutput as $elementID => $bgOutput){
787
 
788
  $html = UniteFunctionsUC::getVal($bgOutput, "html");
789
+ $location = UniteFunctionsUC::getVal($bgOutput, "location");
790
+
791
+ $addClass = "";
792
+ if($location === "front")
793
+ $addClass = " uc-bg-front";
794
 
795
  ?>
796
+ <div class="unlimited-elements-background-overlay<?php echo $addClass?>" data-forid="<?php echo $elementID?>" style="display:none">
797
  <?php echo $html?>
798
  </div>
799
  <?php
821
 
822
  if(objTarget.length == 0)
823
  return(true);
824
+
825
+ var objVideoContainer = objTarget.children(".elementor-background-video-container");
826
+
827
+ if(objVideoContainer.length == 1)
828
+ objBgElement.detach().insertAfter(objVideoContainer).show();
829
+ else
830
+ objBgElement.detach().prependTo(objTarget).show();
831
+
832
  objBgElement.trigger("bg_attached");
833
  objBgElement.addClass("uc-bg-attached");
834
 
866
  $none = "__none__";
867
 
868
  $arrBGItems = array();
869
+ $arrBGItems[$none] = __("[No Background]", "unlimited-elements-for-elementor");
870
 
871
  foreach(self::$arrBGAddonsRecords as $addon){
872
 
915
 
916
  $objWidget->registerBGControls();
917
  }
918
+
919
+ $objControls->add_control(
920
+ 'uc_background_location',
921
+ array(
922
+ 'label' => esc_html__( 'Background Location', 'plugin-name' ),
923
+ 'type' => \Elementor\Controls_Manager::SELECT,
924
+ 'default' => 'back',
925
+ 'options' => array(
926
+ 'back' => esc_html__( 'In Background', 'unlimited-elements-for-elementor' ),
927
+ 'front' => esc_html__( 'In Foregroud', 'unlimited-elements-for-elementor' )
928
+ ),
929
+ "condition" => array(self::CONTROL_BACKGROUND_TYPE."!" => "{$none}")
930
+ )
931
+ );
932
+
933
  $objControls->add_control(
934
  'html_button_installbg',
935
  array(
1242
 
1243
  $adminStyleHandle = "unlimited_elements_editor_admin_css";
1244
 
1245
+ HelperUC::addScriptAbsoluteUrl(HelperProviderCoreUC_EL::$urlCore."elementor/assets/uc_editor_admin.js", "unlimited_elements_editor_admin");
1246
  HelperUC::addStyleAbsoluteUrl(HelperProviderCoreUC_EL::$urlCore."elementor/assets/uc_editor_admin.css", $adminStyleHandle);
1247
+
1248
  //select2 sortable
1249
  HelperUC::addScriptAbsoluteUrl(GlobalsUC::$urlPlugin."js/select2/select2.sortable.js", "select2_sortable_js");
1250
  HelperUC::addStyleAbsoluteUrl(GlobalsUC::$urlPlugin."js/select2/select2.sortable.css", "select2_sortable_css");
provider/core/plugins/unlimited_elements/elementor/elementor_widget.class.php CHANGED
@@ -483,7 +483,7 @@ class UniteCreatorElementorWidget extends Widget_Base {
483
 
484
  if($itemsType == "image")
485
  return(false);
486
-
487
  $itemsLabel = esc_html__("Items", "unlimited-elements-for-elementor");
488
 
489
  $itemsTitle = $this->objAddon->getOption("items_section_title");
@@ -1034,7 +1034,7 @@ class UniteCreatorElementorWidget extends Widget_Base {
1034
  $value = UniteFunctionsUC::getArrFirstValue($options);
1035
 
1036
  }
1037
-
1038
  $options = array_flip($options);
1039
  $arrControl["options"] = $options;
1040
 
@@ -1058,9 +1058,17 @@ class UniteCreatorElementorWidget extends Widget_Base {
1058
  $defaultValueTablet = UniteFunctionsUC::getVal($param, "default_value_tablet");
1059
  $defaultValueMobile = UniteFunctionsUC::getVal($param, "default_value_mobile");
1060
 
 
 
 
 
 
 
 
 
1061
  $arrControl["uc_responsive"] = true;
1062
 
1063
- $arrControl["desktop_default"] = UniteFunctionsUC::getVal($arrControl, "default");
1064
  $arrControl["tablet_default"] = $defaultValueTablet;
1065
  $arrControl["mobile_default"] = $defaultValueMobile;
1066
  }
@@ -1088,6 +1096,7 @@ class UniteCreatorElementorWidget extends Widget_Base {
1088
  if(!empty($unit))
1089
  $arrDefaultValue["unit"] = $unit;
1090
 
 
1091
  if($isResponsive == true){
1092
 
1093
  $arrTabletDefaults = array();
@@ -1113,6 +1122,7 @@ class UniteCreatorElementorWidget extends Widget_Base {
1113
  $arrControl["default"] = $arrDefaultValue;
1114
  }
1115
 
 
1116
  //set selector
1117
  $arrSelectors = array();
1118
  $selector = UniteFunctionsUC::getVal($param, "selector");
@@ -1359,7 +1369,13 @@ class UniteCreatorElementorWidget extends Widget_Base {
1359
  if($isResponsive == true){
1360
  $arrControl["uc_responsive"] = true;
1361
 
 
 
1362
  $defaultValueTablet = UniteFunctionsUC::getVal($param, "default_value_tablet");
 
 
 
 
1363
  $unitTablet = $rangeUnit;
1364
 
1365
  if(!empty($defaultValueTablet)){
@@ -1370,6 +1386,10 @@ class UniteCreatorElementorWidget extends Widget_Base {
1370
 
1371
 
1372
  $defaultValueMobile = UniteFunctionsUC::getVal($param, "default_value_mobile");
 
 
 
 
1373
  $unitMobile = $rangeUnit;
1374
 
1375
  if(!empty($defaultValueMobile)){
@@ -1404,6 +1424,12 @@ class UniteCreatorElementorWidget extends Widget_Base {
1404
  $defaultTablet = UniteFunctionsUC::getVal($param, "default_value_tablet",$defaultValue);
1405
  $defaultMobile = UniteFunctionsUC::getVal($param, "default_value_mobile",$defaultValue);
1406
 
 
 
 
 
 
 
1407
  $arrControl["desktop_default"] = $defaultValue;
1408
  $arrControl["tablet_default"] = $defaultTablet;
1409
  $arrControl["mobile_default"] = $defaultMobile;
483
 
484
  if($itemsType == "image")
485
  return(false);
486
+
487
  $itemsLabel = esc_html__("Items", "unlimited-elements-for-elementor");
488
 
489
  $itemsTitle = $this->objAddon->getOption("items_section_title");
1034
  $value = UniteFunctionsUC::getArrFirstValue($options);
1035
 
1036
  }
1037
+
1038
  $options = array_flip($options);
1039
  $arrControl["options"] = $options;
1040
 
1058
  $defaultValueTablet = UniteFunctionsUC::getVal($param, "default_value_tablet");
1059
  $defaultValueMobile = UniteFunctionsUC::getVal($param, "default_value_mobile");
1060
 
1061
+ $defaultValueDesktop = UniteFunctionsUC::getVal($arrControl, "default");
1062
+
1063
+ if(array_key_exists($defaultValueTablet, $options) == false)
1064
+ $defaultValueTablet = $defaultValueDesktop;
1065
+
1066
+ if(array_key_exists($defaultValueMobile, $options) == false)
1067
+ $defaultValueMobile = $defaultValueDesktop;
1068
+
1069
  $arrControl["uc_responsive"] = true;
1070
 
1071
+ $arrControl["desktop_default"] = $defaultValueDesktop;
1072
  $arrControl["tablet_default"] = $defaultValueTablet;
1073
  $arrControl["mobile_default"] = $defaultValueMobile;
1074
  }
1096
  if(!empty($unit))
1097
  $arrDefaultValue["unit"] = $unit;
1098
 
1099
+
1100
  if($isResponsive == true){
1101
 
1102
  $arrTabletDefaults = array();
1122
  $arrControl["default"] = $arrDefaultValue;
1123
  }
1124
 
1125
+
1126
  //set selector
1127
  $arrSelectors = array();
1128
  $selector = UniteFunctionsUC::getVal($param, "selector");
1369
  if($isResponsive == true){
1370
  $arrControl["uc_responsive"] = true;
1371
 
1372
+ $defaultValueDesktop = UniteFunctionsUC::getVal($param, "default_value");
1373
+
1374
  $defaultValueTablet = UniteFunctionsUC::getVal($param, "default_value_tablet");
1375
+
1376
+ if(is_numeric($defaultValueTablet) == false)
1377
+ $defaultValueTablet = $defaultValueDesktop;
1378
+
1379
  $unitTablet = $rangeUnit;
1380
 
1381
  if(!empty($defaultValueTablet)){
1386
 
1387
 
1388
  $defaultValueMobile = UniteFunctionsUC::getVal($param, "default_value_mobile");
1389
+
1390
+ if(is_numeric($defaultValueMobile) == false)
1391
+ $defaultValueMobile = $defaultValueDesktop;
1392
+
1393
  $unitMobile = $rangeUnit;
1394
 
1395
  if(!empty($defaultValueMobile)){
1424
  $defaultTablet = UniteFunctionsUC::getVal($param, "default_value_tablet",$defaultValue);
1425
  $defaultMobile = UniteFunctionsUC::getVal($param, "default_value_mobile",$defaultValue);
1426
 
1427
+ if(is_numeric($defaultTablet) == false)
1428
+ $defaultTablet = $defaultValue;
1429
+
1430
+ if(is_numeric($defaultMobile) == false)
1431
+ $defaultMobile = $defaultValue;
1432
+
1433
  $arrControl["desktop_default"] = $defaultValue;
1434
  $arrControl["tablet_default"] = $defaultTablet;
1435
  $arrControl["mobile_default"] = $defaultMobile;
provider/core/plugins/unlimited_elements/helper_provider_core.class.php CHANGED
@@ -9,7 +9,6 @@ defined('UNLIMITED_ELEMENTS_INC') or die('Restricted access');
9
 
10
  class HelperProviderCoreUC_EL{
11
 
12
-
13
  public static $pathCore;
14
  public static $urlCore;
15
  public static $filepathGeneralSettings;
@@ -18,6 +17,7 @@ class HelperProviderCoreUC_EL{
18
  public static $arrImages;
19
  public static $arrGlobalColors;
20
  private static $arrCacheElementorTemplate;
 
21
 
22
 
23
  /**
@@ -137,6 +137,20 @@ class HelperProviderCoreUC_EL{
137
  return($arrValues);
138
  }
139
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
140
 
141
  /**
142
  * get general setting value
@@ -457,6 +471,51 @@ class HelperProviderCoreUC_EL{
457
  return(null);
458
  }
459
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
460
 
461
  private static function ______LISTING________(){}
462
 
@@ -480,6 +539,8 @@ class HelperProviderCoreUC_EL{
480
  return($title);
481
  }
482
 
 
 
483
  /**
484
  * put elementor template
485
  */
@@ -507,12 +568,12 @@ class HelperProviderCoreUC_EL{
507
  /**
508
  * put elementor template
509
  */
510
- public static function getElementorTemplate($templateID){
511
 
512
  if(empty($templateID) || is_numeric($templateID) == false)
513
  return("");
514
 
515
- $output = \Elementor\Plugin::instance()->frontend->get_builder_content_for_display( $templateID);
516
 
517
  return($output);
518
  }
@@ -521,7 +582,7 @@ class HelperProviderCoreUC_EL{
521
  /**
522
  * put the post listing template
523
  */
524
- public static function putListingItemTemplate_post($post, $templateID, $widgetID, $listingType = "elementor"){
525
 
526
  if(empty($widgetID))
527
  return(false);
@@ -554,7 +615,8 @@ class HelperProviderCoreUC_EL{
554
  if($listingType == "jet")
555
  $htmlTemplate = self::getJetTemplateListingItem($templateID, $post);
556
  else
557
- $htmlTemplate = self::getElementorTemplate($templateID);
 
558
 
559
  //add one more class
560
 
@@ -562,7 +624,7 @@ class HelperProviderCoreUC_EL{
562
  $dest = "{$source} uc-post-$postID";
563
 
564
  $htmlTemplate = str_replace($source, $dest, $htmlTemplate);
565
-
566
  echo $htmlTemplate;
567
 
568
  GlobalsUnlimitedElements::$renderingDynamicData = null;
@@ -688,6 +750,10 @@ class HelperProviderCoreUC_EL{
688
  */
689
  public static function putListingItemTemplate($item, $templateID, $widgetID){
690
 
 
 
 
 
691
  $listingType = "elementor";
692
 
693
  //jet determine
@@ -709,7 +775,7 @@ class HelperProviderCoreUC_EL{
709
  dmp("wrong listing type, can't output");
710
  return(false);
711
  }
712
-
713
 
714
  if(empty($templateID)){
715
 
@@ -719,9 +785,13 @@ class HelperProviderCoreUC_EL{
719
  return(false);
720
  }
721
 
 
 
 
 
722
  //template output
723
  if($type == "post")
724
- self::putListingItemTemplate_post($item, $templateID, $widgetID, $listingType);
725
  else
726
  echo "output term";
727
 
9
 
10
  class HelperProviderCoreUC_EL{
11
 
 
12
  public static $pathCore;
13
  public static $urlCore;
14
  public static $filepathGeneralSettings;
17
  public static $arrImages;
18
  public static $arrGlobalColors;
19
  private static $arrCacheElementorTemplate;
20
+ private static $arrPostContentCache = array();
21
 
22
 
23
  /**
137
  return($arrValues);
138
  }
139
 
140
+ /**
141
+ * check if instagram access token is saved
142
+ */
143
+ public static function isInstagramSetUp(){
144
+
145
+ $settings = HelperProviderCoreUC_EL::getGeneralSettingsValues();
146
+
147
+ $token = UniteFunctionsUC::getVal($settings, "instagram_access_token");
148
+
149
+ $isExists = !empty($token);
150
+
151
+ return($isExists);
152
+
153
+ }
154
 
155
  /**
156
  * get general setting value
471
  return(null);
472
  }
473
 
474
+ /**
475
+ * put post content, or render with elementor
476
+ */
477
+ public static function getPostContent($postID, $content=""){
478
+
479
+ if(empty($postID))
480
+ return(false);
481
+
482
+ if(is_numeric($postID) == false)
483
+ return($content);
484
+
485
+ //protection against infinate loop
486
+
487
+ if(isset(self::$arrPostContentCache[$postID]))
488
+ return(self::$arrPostContentCache[$postID]);
489
+
490
+ $elementorTemplateType = get_post_meta($postID,"_elementor_template_type",true);
491
+
492
+ //not elementor - regular content
493
+ if(empty($elementorTemplateType)){
494
+
495
+ if(!empty($content)){
496
+
497
+ self::$arrPostContentCache[$postID] = $content;
498
+ return($content);
499
+ }
500
+
501
+ $post = get_post($postID);
502
+ $content = UniteFunctionsWPUC::getPostContent($post);
503
+
504
+ self::$arrPostContentCache[$postID] = $content;
505
+
506
+ return($content);
507
+ }
508
+
509
+ //elementor content
510
+
511
+ $content = self::getElementorTemplate($postID);
512
+
513
+ self::$arrPostContentCache[$postID] = $content;
514
+
515
+ return($content);
516
+ }
517
+
518
+
519
 
520
  private static function ______LISTING________(){}
521
 
539
  return($title);
540
  }
541
 
542
+
543
+
544
  /**
545
  * put elementor template
546
  */
568
  /**
569
  * put elementor template
570
  */
571
+ public static function getElementorTemplate($templateID, $withCss = false){
572
 
573
  if(empty($templateID) || is_numeric($templateID) == false)
574
  return("");
575
 
576
+ $output = \Elementor\Plugin::instance()->frontend->get_builder_content_for_display( $templateID, $withCss);
577
 
578
  return($output);
579
  }
582
  /**
583
  * put the post listing template
584
  */
585
+ public static function putListingItemTemplate_post($post, $templateID, $widgetID, $listingType = "elementor", $withCss = false){
586
 
587
  if(empty($widgetID))
588
  return(false);
615
  if($listingType == "jet")
616
  $htmlTemplate = self::getJetTemplateListingItem($templateID, $post);
617
  else
618
+ $htmlTemplate = self::getElementorTemplate($templateID, $withCss);
619
+
620
 
621
  //add one more class
622
 
624
  $dest = "{$source} uc-post-$postID";
625
 
626
  $htmlTemplate = str_replace($source, $dest, $htmlTemplate);
627
+
628
  echo $htmlTemplate;
629
 
630
  GlobalsUnlimitedElements::$renderingDynamicData = null;
750
  */
751
  public static function putListingItemTemplate($item, $templateID, $widgetID){
752
 
753
+ $objFilters = new UniteCreatorFiltersProcess();
754
+ $isFrontAjax = $objFilters->isFrontAjaxRequest();
755
+
756
+
757
  $listingType = "elementor";
758
 
759
  //jet determine
775
  dmp("wrong listing type, can't output");
776
  return(false);
777
  }
778
+
779
 
780
  if(empty($templateID)){
781
 
785
  return(false);
786
  }
787
 
788
+ $withCss = false;
789
+ if($isFrontAjax == true)
790
+ $withCss = true;
791
+
792
  //template output
793
  if($type == "post")
794
+ self::putListingItemTemplate_post($item, $templateID, $widgetID, $listingType, $withCss);
795
  else
796
  echo "output term";
797
 
provider/functions_wordpress.class.php CHANGED
@@ -1947,8 +1947,11 @@ defined('UNLIMITED_ELEMENTS_INC') or die('Restricted access');
1947
 
1948
  if(empty($post))
1949
  return("");
1950
-
1951
- $postID = $post->post_id;
 
 
 
1952
 
1953
  $isEditMode = HelperUC::isElementorEditMode();
1954
  if($isEditMode == false)
@@ -1959,6 +1962,7 @@ defined('UNLIMITED_ELEMENTS_INC') or die('Restricted access');
1959
  if(GlobalsProviderUC::$disablePostContentFiltering !== true)
1960
  $content = apply_filters("widget_text_content", $content);
1961
 
 
1962
  return($content);
1963
  }
1964
 
1947
 
1948
  if(empty($post))
1949
  return("");
1950
+
1951
+ //UniteFunctionsUC::showTrace();
1952
+ //dmp($post);
1953
+
1954
+ $postID = $post->ID;
1955
 
1956
  $isEditMode = HelperUC::isElementorEditMode();
1957
  if($isEditMode == false)
1962
  if(GlobalsProviderUC::$disablePostContentFiltering !== true)
1963
  $content = apply_filters("widget_text_content", $content);
1964
 
1965
+
1966
  return($content);
1967
  }
1968
 
provider/provider_operations.class.php CHANGED
@@ -130,6 +130,7 @@ class ProviderOperationsUC extends UCOperations{
130
  $query = array();
131
  $query["number"] = $limit;
132
  $query["search"] = $search;
 
133
 
134
  if(!empty($taxonomy))
135
  $query["taxonomy"] = $taxonomy;
@@ -145,14 +146,16 @@ class ProviderOperationsUC extends UCOperations{
145
  if(empty($response))
146
  return(null);
147
 
 
148
  $arrResult = array();
149
  foreach($response as $term){
150
 
151
  $termID = $term->term_id;
152
  $name = $term->name;
153
  $taxonomy = $term->taxonomy;
 
154
 
155
- $title = $name." - ($taxonomy)";
156
 
157
  $arr = array();
158
  $arr["id"] = $termID;
130
  $query = array();
131
  $query["number"] = $limit;
132
  $query["search"] = $search;
133
+ $query["hide_empty"] = false;
134
 
135
  if(!empty($taxonomy))
136
  $query["taxonomy"] = $taxonomy;
146
  if(empty($response))
147
  return(null);
148
 
149
+
150
  $arrResult = array();
151
  foreach($response as $term){
152
 
153
  $termID = $term->term_id;
154
  $name = $term->name;
155
  $taxonomy = $term->taxonomy;
156
+ $count = $term->count;
157
 
158
+ $title = $name." ({$count} items)";
159
 
160
  $arr = array();
161
  $arr["id"] = $termID;
provider/provider_params_processor.class.php CHANGED
@@ -692,6 +692,9 @@ class UniteCreatorParamsProcessor extends UniteCreatorParamsProcessorWork{
692
 
693
  try{
694
 
 
 
 
695
  $arrPost = (array)$post;
696
  $arrData = array();
697
 
@@ -793,8 +796,8 @@ class UniteCreatorParamsProcessor extends UniteCreatorParamsProcessorWork{
793
  }
794
 
795
  }
796
-
797
-
798
  }catch(Exception $e){
799
 
800
  $message = $e->getMessage();
@@ -850,11 +853,19 @@ class UniteCreatorParamsProcessor extends UniteCreatorParamsProcessorWork{
850
  /**
851
  * get pagination args from the query
852
  */
853
- private function getPostListData_getPostGetFilters_pagination($args, $value, $name, $data){
854
 
 
 
855
  //check the single page pagination
856
  $paginationType = UniteFunctionsUC::getVal($value, $name."_pagination_type");
857
 
 
 
 
 
 
 
858
  if(empty($paginationType))
859
  return($args);
860
 
@@ -1096,6 +1107,10 @@ class UniteCreatorParamsProcessor extends UniteCreatorParamsProcessorWork{
1096
  $isRelatedPosts = $source == "related";
1097
  $relatePostsType = "";
1098
 
 
 
 
 
1099
  if(is_single() == false)
1100
  $isRelatedPosts = false;
1101
 
@@ -1315,7 +1330,8 @@ class UniteCreatorParamsProcessor extends UniteCreatorParamsProcessorWork{
1315
 
1316
  //run custom query if available
1317
  $args = UniteFunctionsWPUC::getPostsArgs($filters);
1318
-
 
1319
  //exclude by authors
1320
 
1321
  if($excludeByAuthors == true){
@@ -1514,7 +1530,12 @@ class UniteCreatorParamsProcessor extends UniteCreatorParamsProcessorWork{
1514
 
1515
  if(is_array($parent) && count($parent) == 1)
1516
  $parent = $parent[0];
1517
-
 
 
 
 
 
1518
  if(is_array($parent))
1519
  $args["post_parent__in"] = $parent;
1520
  else
@@ -1821,7 +1842,7 @@ class UniteCreatorParamsProcessor extends UniteCreatorParamsProcessorWork{
1821
  }
1822
  }
1823
 
1824
- $args = $this->getPostListData_getPostGetFilters_pagination($args, $value, $name, $data);
1825
 
1826
  $args = $this->getPostListData_getCustomQueryFilters($args, $value, $name, $data);
1827
 
@@ -1884,6 +1905,34 @@ class UniteCreatorParamsProcessor extends UniteCreatorParamsProcessorWork{
1884
  if(!$arrPosts)
1885
  $arrPosts = array();
1886
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1887
  //sort sticky posts
1888
  if($getOnlySticky == true && !empty($arrStickyPosts)){
1889
 
@@ -2103,7 +2152,7 @@ class UniteCreatorParamsProcessor extends UniteCreatorParamsProcessorWork{
2103
  $this->saveLastQueryAndPage($query, GlobalsProviderUC::QUERY_TYPE_CURRENT);
2104
 
2105
  $arrPosts = $query->posts;
2106
-
2107
  if(empty($arrPosts))
2108
  $arrPosts = array();
2109
 
@@ -2211,7 +2260,6 @@ class UniteCreatorParamsProcessor extends UniteCreatorParamsProcessorWork{
2211
 
2212
  }
2213
 
2214
-
2215
  $arrPosts = $query->posts;
2216
 
2217
  if(empty($arrPosts))
@@ -2247,9 +2295,15 @@ class UniteCreatorParamsProcessor extends UniteCreatorParamsProcessorWork{
2247
  HelperUC::addDebug("getPostList param", $param);
2248
 
2249
  $source = UniteFunctionsUC::getVal($value, "{$name}_source");
2250
-
 
 
 
 
 
 
2251
  $arrPosts = array();
2252
-
2253
  switch($source){
2254
  case "manual":
2255
 
@@ -2259,10 +2313,10 @@ class UniteCreatorParamsProcessor extends UniteCreatorParamsProcessorWork{
2259
  case "current":
2260
 
2261
  $arrPosts = $this->getPostListData_currentPosts($value, $name, $data);
2262
-
2263
  break;
2264
  default: //custom
2265
-
2266
  $arrPosts = $this->getPostListData_custom($value, $name, $processType, $param, $data);
2267
 
2268
  $filters = array();
@@ -2302,14 +2356,9 @@ class UniteCreatorParamsProcessor extends UniteCreatorParamsProcessorWork{
2302
 
2303
  //prepare listing output. no items prepare for the listing
2304
 
2305
- $useForListing = UniteFunctionsUC::getVal($param, "use_for_listing");
2306
- $useForListing = UniteFunctionsUC::strToBool($useForListing);
2307
-
2308
  $objFilters = new UniteCreatorFiltersProcess();
2309
 
2310
  if($useForListing == true){
2311
-
2312
- $nameListing = UniteFunctionsUC::getVal($param, "name_listing");
2313
 
2314
  //add filterable variables - dynamic
2315
  $data = $objFilters->addWidgetFilterableVarsFromData($data, $value, $nameListing);
@@ -2321,12 +2370,15 @@ class UniteCreatorParamsProcessor extends UniteCreatorParamsProcessorWork{
2321
  //filters additions - regular
2322
 
2323
  $data = $objFilters->addWidgetFilterableVariables($data, $this->addon);
2324
-
2325
  }
2326
-
2327
  $arrData = array();
2328
  foreach($arrPosts as $post){
2329
 
 
 
 
 
2330
  $arrData[] = $this->getPostDataByObj($post, $arrPostAdditions, $arrImageSizes);
2331
  }
2332
 
@@ -3087,7 +3139,7 @@ class UniteCreatorParamsProcessor extends UniteCreatorParamsProcessorWork{
3087
  * get listing data
3088
  */
3089
  private function getListingData($value, $name, $processType, $param, $data){
3090
-
3091
  if($processType != self::PROCESS_TYPE_OUTPUT && $processType != self::PROCESS_TYPE_OUTPUT_BACK)
3092
  return($data);
3093
 
692
 
693
  try{
694
 
695
+ if(is_numeric($post))
696
+ $post = get_post($post);
697
+
698
  $arrPost = (array)$post;
699
  $arrData = array();
700
 
796
  }
797
 
798
  }
799
+
800
+
801
  }catch(Exception $e){
802
 
803
  $message = $e->getMessage();
853
  /**
854
  * get pagination args from the query
855
  */
856
+ private function getPostListData_getPostGetFilters_pagination($args, $value, $name, $data, $param){
857
 
858
+ $nameListing = UniteFunctionsUC::getVal($param, "name_listing");
859
+
860
  //check the single page pagination
861
  $paginationType = UniteFunctionsUC::getVal($value, $name."_pagination_type");
862
 
863
+ //get the type in case of listing
864
+ if(empty($paginationType) && !empty($nameListing)){
865
+ $name = $nameListing;
866
+ $paginationType = UniteFunctionsUC::getVal($value, $name."_pagination_type");
867
+ }
868
+
869
  if(empty($paginationType))
870
  return($args);
871
 
1107
  $isRelatedPosts = $source == "related";
1108
  $relatePostsType = "";
1109
 
1110
+ $addParentType = null;
1111
+ $addParentIDs = null;
1112
+
1113
+
1114
  if(is_single() == false)
1115
  $isRelatedPosts = false;
1116
 
1330
 
1331
  //run custom query if available
1332
  $args = UniteFunctionsWPUC::getPostsArgs($filters);
1333
+
1334
+
1335
  //exclude by authors
1336
 
1337
  if($excludeByAuthors == true){
1530
 
1531
  if(is_array($parent) && count($parent) == 1)
1532
  $parent = $parent[0];
1533
+
1534
+ $addParentType = UniteFunctionsUC::getVal($value, "{$name}_includeby_parent_addparent");
1535
+
1536
+ if($addParentType == "start" || $addParentType == "end")
1537
+ $addParentIDs = $parent;
1538
+
1539
  if(is_array($parent))
1540
  $args["post_parent__in"] = $parent;
1541
  else
1842
  }
1843
  }
1844
 
1845
+ $args = $this->getPostListData_getPostGetFilters_pagination($args, $value, $name, $data, $param);
1846
 
1847
  $args = $this->getPostListData_getCustomQueryFilters($args, $value, $name, $data);
1848
 
1905
  if(!$arrPosts)
1906
  $arrPosts = array();
1907
 
1908
+ //add parent posts
1909
+
1910
+ if(!empty($addParentType) && !empty($addParentIDs)){
1911
+
1912
+ if(is_array($addParentIDs) == false)
1913
+ $addParentIDs = array($addParentIDs);
1914
+
1915
+ $argsParents = array();
1916
+ $argsParents["post_type"] = $postType;
1917
+ $argsParents["post__in"] = $addParentIDs;
1918
+
1919
+ $arrParents = get_posts($argsParents);
1920
+
1921
+ if(!empty($arrParents)){
1922
+
1923
+ if($addParentType == "end")
1924
+ $arrPosts = array_merge($arrPosts, $arrParents);
1925
+ else
1926
+ $arrPosts = array_merge($arrParents, $arrPosts);
1927
+
1928
+ }
1929
+
1930
+ if($showDebugQuery == "true")
1931
+ dmp("adding parent post to ".$addParentType);
1932
+
1933
+ }
1934
+
1935
+
1936
  //sort sticky posts
1937
  if($getOnlySticky == true && !empty($arrStickyPosts)){
1938
 
2152
  $this->saveLastQueryAndPage($query, GlobalsProviderUC::QUERY_TYPE_CURRENT);
2153
 
2154
  $arrPosts = $query->posts;
2155
+
2156
  if(empty($arrPosts))
2157
  $arrPosts = array();
2158
 
2260
 
2261
  }
2262
 
 
2263
  $arrPosts = $query->posts;
2264
 
2265
  if(empty($arrPosts))
2295
  HelperUC::addDebug("getPostList param", $param);
2296
 
2297
  $source = UniteFunctionsUC::getVal($value, "{$name}_source");
2298
+
2299
+ $useForListing = UniteFunctionsUC::getVal($param, "use_for_listing");
2300
+ $useForListing = UniteFunctionsUC::strToBool($useForListing);
2301
+
2302
+ $nameListing = UniteFunctionsUC::getVal($param, "name_listing");
2303
+
2304
+
2305
  $arrPosts = array();
2306
+
2307
  switch($source){
2308
  case "manual":
2309
 
2313
  case "current":
2314
 
2315
  $arrPosts = $this->getPostListData_currentPosts($value, $name, $data);
2316
+
2317
  break;
2318
  default: //custom
2319
+
2320
  $arrPosts = $this->getPostListData_custom($value, $name, $processType, $param, $data);
2321
 
2322
  $filters = array();
2356
 
2357
  //prepare listing output. no items prepare for the listing
2358
 
 
 
 
2359
  $objFilters = new UniteCreatorFiltersProcess();
2360
 
2361
  if($useForListing == true){
 
 
2362
 
2363
  //add filterable variables - dynamic
2364
  $data = $objFilters->addWidgetFilterableVarsFromData($data, $value, $nameListing);
2370
  //filters additions - regular
2371
 
2372
  $data = $objFilters->addWidgetFilterableVariables($data, $this->addon);
 
2373
  }
2374
+
2375
  $arrData = array();
2376
  foreach($arrPosts as $post){
2377
 
2378
+ //protection in case that post is id
2379
+ if(is_numeric($post))
2380
+ $post = get_post($post);
2381
+
2382
  $arrData[] = $this->getPostDataByObj($post, $arrPostAdditions, $arrImageSizes);
2383
  }
2384
 
3139
  * get listing data
3140
  */
3141
  private function getListingData($value, $name, $processType, $param, $data){
3142
+
3143
  if($processType != self::PROCESS_TYPE_OUTPUT && $processType != self::PROCESS_TYPE_OUTPUT_BACK)
3144
  return($data);
3145
 
provider/provider_settings.class.php CHANGED
@@ -1332,6 +1332,23 @@ class UniteCreatorSettings extends UniteCreatorSettingsWork{
1332
 
1333
  $this->addPostIDSelect($name."_includeby_parent", sprintf(__("Select %s Parents"), $textPosts), $arrConditionIncludeParents, $isForWooProducts);
1334
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1335
  //-------- include by recently viewed --------
1336
 
1337
  $params = array();
@@ -2365,7 +2382,44 @@ class UniteCreatorSettings extends UniteCreatorSettingsWork{
2365
 
2366
  }
2367
 
2368
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2369
 
2370
 
2371
  /**
@@ -2380,8 +2434,16 @@ class UniteCreatorSettings extends UniteCreatorSettingsWork{
2380
  $this->addRemoteSettings($name, $value, $title, $param);
2381
  return(false);
2382
  }
2383
-
 
 
 
 
 
 
 
2384
  $isForGallery = ($useFor == "gallery");
 
2385
  $isEnableVideoItems = UniteFunctionsUC::getVal($param, "gallery_enable_video");
2386
  $isEnableVideoItems = UniteFunctionsUC::strToBool($isEnableVideoItems);
2387
 
1332
 
1333
  $this->addPostIDSelect($name."_includeby_parent", sprintf(__("Select %s Parents"), $textPosts), $arrConditionIncludeParents, $isForWooProducts);
1334
 
1335
+ //-------- include by post parent - add the parent page--------
1336
+
1337
+ $params = array();
1338
+ $params["origtype"] = UniteCreatorDialogParam::PARAM_DROPDOWN;
1339
+ $params["elementor_condition"] = $arrConditionIncludeParents;
1340
+
1341
+ $arrItems = array(
1342
+ "no"=>__("No","unlimited-elements-for-elementor"),
1343
+ "start"=>__("To Beginning","unlimited-elements-for-elementor"),
1344
+ "end"=>__("To End","unlimited-elements-for-elementor")
1345
+ );
1346
+
1347
+ $arrItems = array_flip($arrItems);
1348
+
1349
+ $this->addSelect($name."_includeby_parent_addparent", $arrItems, esc_html__("Add The Parent As Well", "unlimited-elements-for-elementor"), "no", $params);
1350
+
1351
+
1352
  //-------- include by recently viewed --------
1353
 
1354
  $params = array();
2382
 
2383
  }
2384
 
2385
+ /**
2386
+ * add items multisource
2387
+ */
2388
+ protected function addItemsMultisourceSettings($name, $value, $title, $param){
2389
+
2390
+ //------ items source ------
2391
+
2392
+ $arrSource = array();
2393
+
2394
+ $arrSource["items"] = __("Items", "unlimited-elements-for-elementor");
2395
+ $arrSource["posts"] = __("Posts", "unlimited-elements-for-elementor");
2396
+
2397
+ $isWooActive = UniteCreatorWooIntegrate::isWooActive();
2398
+ if($isWooActive == true)
2399
+ $arrSource["products"] = __("Products", "unlimited-elements-for-elementor");
2400
+
2401
+ $arrSource["terms"] = __("Terms", "unlimited-elements-for-elementor");
2402
+
2403
+ $isAcfExists = UniteCreatorAcfIntegrate::isAcfActive();
2404
+
2405
+ if($isAcfExists == true)
2406
+ $arrSource["acf_repeater"] = __("ACF Repeater", "unlimited-elements-for-elementor");
2407
+
2408
+ $hasInstagram = HelperProviderCoreUC_EL::isInstagramSetUp();
2409
+
2410
+ if($hasInstagram)
2411
+ $arrSource["instagram"] = __("Instagram", "unlimited-elements-for-elementor");
2412
+
2413
+
2414
+ $arrSource = array_flip($arrSource);
2415
+
2416
+ $params = array();
2417
+ $params["origtype"] = UniteCreatorDialogParam::PARAM_DROPDOWN;
2418
+
2419
+ $this->addSelect($name."_source", $arrSource, __("Items Source", "unlimited-elements-for-elementor"), "items", $params);
2420
+
2421
+
2422
+ }
2423
 
2424
 
2425
  /**
2434
  $this->addRemoteSettings($name, $value, $title, $param);
2435
  return(false);
2436
  }
2437
+
2438
+ if($useFor == "items"){
2439
+
2440
+ $this->addItemsMultisourceSettings($name, $value, $title, $param);
2441
+
2442
+ return(false);
2443
+ }
2444
+
2445
  $isForGallery = ($useFor == "gallery");
2446
+
2447
  $isEnableVideoItems = UniteFunctionsUC::getVal($param, "gallery_enable_video");
2448
  $isEnableVideoItems = UniteFunctionsUC::strToBool($isEnableVideoItems);
2449
 
provider/woocommerce_integrate.class.php CHANGED
@@ -21,6 +21,7 @@ class UniteCreatorWooIntegrate{
21
  private $urlCart;
22
  private $urlSite;
23
  private $urlCurrentPage;
 
24
 
25
  private $isInited = false;
26
 
@@ -79,6 +80,7 @@ class UniteCreatorWooIntegrate{
79
  return(false);
80
 
81
  //init
 
82
  $this->currency = get_woocommerce_currency();
83
  $this->currencySymbol = get_woocommerce_currency_symbol($this->currency);
84
  $this->urlCheckout = wc_get_checkout_url();
@@ -202,7 +204,7 @@ class UniteCreatorWooIntegrate{
202
  /**
203
  * add from/to prices to variable product
204
  */
205
- private function addPricesFromTo($arrProduct, $arrPrices){
206
 
207
  if(empty($arrPrices))
208
  return($arrProduct);
@@ -224,6 +226,9 @@ class UniteCreatorWooIntegrate{
224
  $from = (float)$from;
225
  $to = (float)$to;
226
 
 
 
 
227
  $arrProduct["woo_".$key."_from"] = $from;
228
  $arrProduct["woo_".$key."_to"] = $to;
229
  }
@@ -236,6 +241,11 @@ class UniteCreatorWooIntegrate{
236
  if($regularPriceFrom === $salePriceFrom){
237
  $arrProduct["woo_sale_price_from"] = null;
238
  $arrProduct["woo_sale_price_to"] = null;
 
 
 
 
 
239
  }
240
 
241
  return($arrProduct);
@@ -540,6 +550,35 @@ class UniteCreatorWooIntegrate{
540
  return($arrImages);
541
  }
542
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
543
 
544
  /**
545
  * get product data
@@ -558,18 +597,28 @@ class UniteCreatorWooIntegrate{
558
  $arrData = $objInfo->get_data();
559
  $type = $objInfo->get_type();
560
 
 
 
561
  $arrProperties = $this->getArrPropertyNames();
562
 
563
  $productSku = UniteFunctionsUC::getVal($arrData, "sku");
 
564
  $salePrice = UniteFunctionsUC::getVal($arrData, "sale_price");
565
  $regularPrice = UniteFunctionsUC::getVal($arrData, "regular_price");
566
  $price = UniteFunctionsUC::getVal($arrData, "price");
567
 
 
 
 
 
568
  if(empty($regularPrice) && !empty($price))
569
  $regularPrice = $price;
570
 
571
  $arrData["regular_price"] = $regularPrice;
572
-
 
 
 
573
  $arrProduct = array();
574
 
575
  $arrProduct["woo_type"] = $type;
@@ -597,7 +646,7 @@ class UniteCreatorWooIntegrate{
597
 
598
  $arrPrices = $objInfo->get_variation_prices();
599
 
600
- $arrProduct = $this->addPricesFromTo($arrProduct, $arrPrices);
601
 
602
  $arrProduct["woo_price"] = $arrProduct["woo_price_from"];
603
  $arrProduct["woo_regular_price"] = $arrProduct["woo_regular_price_from"];
@@ -622,10 +671,10 @@ class UniteCreatorWooIntegrate{
622
  $arrProduct["woo_currency"] = $this->currency;
623
  $arrProduct["woo_currency_symbol"] = $this->currencySymbol;
624
 
625
-
626
  //put add to cart link
627
  $arrProduct = $this->addAddToCartData($arrProduct, $productID, $productSku);
628
 
 
629
  return($arrProduct);
630
  }
631
 
21
  private $urlCart;
22
  private $urlSite;
23
  private $urlCurrentPage;
24
+ private $optionIncludingTax;
25
 
26
  private $isInited = false;
27
 
80
  return(false);
81
 
82
  //init
83
+ $this->optionIncludingTax = get_option( 'woocommerce_tax_display_shop' );
84
  $this->currency = get_woocommerce_currency();
85
  $this->currencySymbol = get_woocommerce_currency_symbol($this->currency);
86
  $this->urlCheckout = wc_get_checkout_url();
204
  /**
205
  * add from/to prices to variable product
206
  */
207
+ private function addPricesFromTo($arrProduct, $arrPrices, $objProduct){
208
 
209
  if(empty($arrPrices))
210
  return($arrProduct);
226
  $from = (float)$from;
227
  $to = (float)$to;
228
 
229
+ $from = $this->modifyPrice($from, $objProduct);
230
+ $to = $this->modifyPrice($to, $objProduct);
231
+
232
  $arrProduct["woo_".$key."_from"] = $from;
233
  $arrProduct["woo_".$key."_to"] = $to;
234
  }
241
  if($regularPriceFrom === $salePriceFrom){
242
  $arrProduct["woo_sale_price_from"] = null;
243
  $arrProduct["woo_sale_price_to"] = null;
244
+ }else{
245
+
246
+ $regularPriceFrom = $this->modifyPrice($regularPriceFrom, $objProduct);
247
+ $regularPriceTo = $this->modifyPrice($regularPriceTo, $objProduct);
248
+
249
  }
250
 
251
  return($arrProduct);
550
  return($arrImages);
551
  }
552
 
553
+ /**
554
+ * modify price
555
+ */
556
+ private function modifyPrice($price, $product){
557
+
558
+ if(empty($price))
559
+ return($price);
560
+
561
+ if($this->optionIncludingTax == "incl"){
562
+ $price = wc_get_price_including_tax(
563
+ $product,
564
+ array(
565
+ 'qty' => 1,
566
+ 'price' => $price,
567
+ ));
568
+ }
569
+ else{
570
+ $price = wc_get_price_excluding_tax(
571
+ $product,
572
+ array(
573
+ 'qty' => 1,
574
+ 'price' => $price,
575
+ ));
576
+ }
577
+
578
+
579
+ return($price);
580
+ }
581
+
582
 
583
  /**
584
  * get product data
597
  $arrData = $objInfo->get_data();
598
  $type = $objInfo->get_type();
599
 
600
+ //dmp($arrData);
601
+
602
  $arrProperties = $this->getArrPropertyNames();
603
 
604
  $productSku = UniteFunctionsUC::getVal($arrData, "sku");
605
+
606
  $salePrice = UniteFunctionsUC::getVal($arrData, "sale_price");
607
  $regularPrice = UniteFunctionsUC::getVal($arrData, "regular_price");
608
  $price = UniteFunctionsUC::getVal($arrData, "price");
609
 
610
+ $salePrice = $this->modifyPrice($salePrice, $objInfo);
611
+ $regularPrice = $this->modifyPrice($regularPrice, $objInfo);
612
+ $price = $this->modifyPrice($price, $objInfo);
613
+
614
  if(empty($regularPrice) && !empty($price))
615
  $regularPrice = $price;
616
 
617
  $arrData["regular_price"] = $regularPrice;
618
+ $arrData["price"] = $price;
619
+ $arrData["sale_price"] = $salePrice;
620
+
621
+
622
  $arrProduct = array();
623
 
624
  $arrProduct["woo_type"] = $type;
646
 
647
  $arrPrices = $objInfo->get_variation_prices();
648
 
649
+ $arrProduct = $this->addPricesFromTo($arrProduct, $arrPrices, $objInfo);
650
 
651
  $arrProduct["woo_price"] = $arrProduct["woo_price_from"];
652
  $arrProduct["woo_regular_price"] = $arrProduct["woo_regular_price_from"];
671
  $arrProduct["woo_currency"] = $this->currency;
672
  $arrProduct["woo_currency_symbol"] = $this->currencySymbol;
673
 
 
674
  //put add to cart link
675
  $arrProduct = $this->addAddToCartData($arrProduct, $productID, $productSku);
676
 
677
+
678
  return($arrProduct);
679
  }
680
 
readme.txt CHANGED
@@ -92,31 +92,28 @@ Fully compatible and integrated with Toolset custom post types and fields.
92
 
93
  <h3>Creative Widgets for Elementor</h3>
94
  <ol>
95
- <li><a href="https://unlimited-elements.com/icon-bullets-widget-for-elementor">Icon Bullets Widget for Elementor (Free)</a> - Display feature lists with custom icons and styles. Each list item can have its own icon title and text. Use the bullets widget to display features and highlights on your Elementor website.</li>
96
  <li><a href="https://unlimited-elements.com/flip-box-widget-for-elementor/">Flip Box Widget for Elementor (Free)</a> - Make your content more interesting with the Elementor Flip Box widget. Use the animated Flip Boxes to highlight any content inside your page with a flip effect.</li>
97
- <li><a href="https://unlimited-elements.com/number-box-widget-widget-for-elementor/">Number Box Widget for Elementor (Free)</a> - Create stunning number blocks with various styles. The Number Box widget for Elementor helps you display content for step by step diagrams and instructions.</li>
98
- <li><a href="https://unlimited-elements.com/animated-mouse-scroll-icon-widget-for-elementor/">Animated Mouse Scroll Icon Widget for Elementor (Free)</a> - The Animated Mouse Scroll Icon is a small micro animation that indicates to user they needs to scroll the page. You can make the icon an anchor point which scroll down to any section when clicked on.
99
  </li>
100
  <li><a href="https://unlimited-elements.com/svg-animation-widget-for-elementor">SVG Animation Widget for Elementor (Free)</a> - The SVG animation widget for Elementor makes it easy -to create impressive SVG animations for your websitet, without any coding skills just copy paste your SVG code and your animated icon is ready.</li>
101
- <li><a href="https://unlimited-elements.com/animated-hamburger-icon-for-elementor/">Animated Hamburger Icon Widget for Elementor (Free)</a> - Use the animated hamburger icon widget to toggle Elementor pro popus. You can even put a menu in a popup and create a full screen menu.</li>
102
  <li><a href="https://unlimited-elements.com/timeline-bullets-widget-for-elementor/">Timeline Bullets Widget for Elementor (Free)</a> - List your features or services using bullet points in a timeline layout to make it easier for users to read the important information.</li>
103
  <li><a href="https://unlimited-elements.com/lordicon-animated-icons-widget-for-elementor/">Lordicon: Animated Icons Widget for Elementor (Free)</a> - The most powerful animated icon library with 1500+ free and premium animated Lottie animations.</li>
104
- <li><a href="https://unlimited-elements.com/blob-shape-widget-for-elementor/">Blob Shapes Widget for Elementor (Free)</a> - Create Blob Shapes with animated morphing effects. This free Elementor widget will help you make your images into random, unique, and organic-looking blob shapes. </li>
105
  <li><a href="https://unlimited-elements.com/image-tooltip-widget-for-elementor/">Image Tooltip Widget for Elementor (Free)</a> - The easiest way to set a tooltip to any Image on the page with a short text description or any HTML code.</li>
106
- <li><a href="https://unlimited-elements.com/background-switcher-widget-for-elementor/">Background Switcher Widget for Elementor (Pro)</a> - The background switcher addon lets you set up cool content boxes. When you hover over a box it will change the background for the whole section. </li>
 
107
  <li><a href="https://unlimited-elements.com/image-reveal-on-scroll-widget-for-elementor">Image Reveal On Scroll Widget for Elementor (Pro)</a> - The Image Reveal on Scroll widget adds an awesome reveal on scroll effect to your images to spice up your Elementor website design.</li>
108
- <li><a href="https://unlimited-elements.com/image-shapes-for-elementor-page-builder/">Image Shapes Widget for Elementor (Pro)</a> - The Image Shapes Elementor Widget allows you to make complex shape addons by clipping images using CSS to make various element layouts: circle, ellipse, polygon and more.</li>
109
  <li><a href="https://unlimited-elements.com/image-particle-widget-for-elementor/">Particle Image Widget for Elementor (Pro)</a> - Create a dispersion interactive mouse aware distortion effect for any image using the Particle Image widget for Elementor.</li>
110
- <li><a href="https://unlimited-elements.com/image-zoom-magnifier-widget-for-elementor/">Image Zoom Magnifier Widget for Elementor (Pro)</a> - Image Zoom Magnifier is a Elmentor Widget for creating a direction-aware magnifying glass effect to provide an inner zoom functionality on any given image. Enlarge images on touch, click, or mouseover.</li>
111
  <li><a href="https://unlimited-elements.com/icon-tabs-widget-for-elementor">Icon Tabs Widget for Elementor (Pro)</a> - The Tab Widget for Elementor will help you show your text on your page divided into horizontal or vertical tabs. Customize your tabs using icons and make the content on your website interactive and fun to read.</li>
 
112
  <li><a href="https://unlimited-elements.com/icon-accordion-widget-for-elementor/">Icon Accordion Widget for Elementor (Pro)</a> - Advanced accordion addon for Elementor page builder offers multiple styles to create interactive collapsable content with multiple layouts on your page.</li>
113
  <li><a href="https://unlimited-elements.com/before-after-image-comparison-widget-for-elementor/">Before After Widget for Elementor (Pro)</a> - The Before After widget is an image comparison addon for Elementor. This widget allows you to create the effect for comparing two before and after images.</li>
114
  <li><a href="https://unlimited-elements.com/hotspots-for-elementor-page-builder/">Hotspots Widget for Elementor (Pro)</a> - Add hotspots to your images with a tooltip an option for opening a built in popup. Each hotspot popup can contain and image and description text.</li>
115
- <li><a href="https://unlimited-elements.com/image-accordion-widget-for-elementor/">Image Accordion Widget for Elementor (Pro)</a> - Our image accordion addon for Elementor highlights your images with amazing hover effects and interactive layouts.</li>
116
  <li><a href="https://unlimited-elements.com/shape-bullets-widget-for-elementor/">Shape Bullets Widget for Elementor (Pro)</a> - The Shape Bullets Widget for Elementor, creates an easy-to-manage bulleted list of items. Each item can be highlighted by its own icon.
117
- </li>
118
- <li><a href="https://unlimited-elements.com/interactive-circle-infographic-widget-for-elementor/">Interactive Circle Infographic Widget for Elementor (Pro)</a> - The Circle Infographic widget for Elementor is a simple and engaging way to present data, processes, concepts, structures and more. Helps your audience understand an entire cycle using a circular interactive tab layout.
119
-
120
  </li>
121
  <li><a href="https://unlimited-elements.com/flip-box-carousel-widget-for-elementor/">Flip Box Carousel Widget for Elementor (Pro)</a> - Use the animated Carousel Flip Box to highlight content inside your Elementor page in an interactive way.
122
  </li>
@@ -125,117 +122,120 @@ Fully compatible and integrated with Toolset custom post types and fields.
125
 
126
  <h3>Post Widgets for Elementor</h3>
127
  <ol>
128
- <li><a href="https://unlimited-elements.com/post-news-ticker-widget-for-elementor">Post Ticker Widget for Elementor (Free)</a></li>
 
 
129
  <li><a href="https://unlimited-elements.com/post-blocks-widget-for-elementor">Post Blocks Widget for Elementor (Free)</a></li>
130
  <li><a href="https://unlimited-elements.com/post-pagination-widget-for-elementor/">Post Pagination Widget for Elementor (Free)</a></li>
131
- <li><a href="https://unlimited-elements.com/post-list-widget-for-elementor">Post List Widget for Elementor (Free)</a></li>
132
- <li><a href="https://unlimited-elements.com/post-tabs-for-elementor/">Post Tabs Widget for Elementor (Free)</a></li>
133
- <li><a href="https://unlimited-elements.com/card-post-carousel-widget-for-elementor">Card Post Carousel Widget for Elementor (Free)</a></li>
134
  <li><a href="https://unlimited-elements.com/post-accordions-for-elementor/">Post Accordion Widget for Elementor (Free)</a></li>
135
- <li><a href="https://unlimited-elements.com/post-grid-widget-for-elementor/">Post Grid Widget for Elementor (Pro)</a> - The Post Grid widget places multiple posts in an aesthetic post grid layout. The purpose of this widget is to let you organize and display your posts on your Elementor website.</li>
136
  <li><a href="https://unlimited-elements.com/elementor-author-list-widget/">Author List Widget for Elementor (Pro)</a></li>
137
  <li><a href="https://unlimited-elements.com/masonry-post-grid-widget-for-elementor">Masonry Post Grid Widget for Elementor (Pro)</a></li>
138
  <li><a href="https://unlimited-elements.com/post-tiles-widget-for-elementor">Post Tile Widget for Elementor (Pro)</a></li>
139
  <li><a href="https://unlimited-elements.com/post-sliders/">Post Slider Widget for Elementor (Pro)</a></li>
140
- <li><a href="https://unlimited-elements.com/post-carousels-for-elementor/">Post Carousel Widget for Elementor (Pro)</a></li>
141
  <li><a href="https://unlimited-elements.com/blog-card-slider-widget-for-elementor">Post Card Slider Widget for Elementor (Pro)</a></li>
 
142
  <li><a href="https://unlimited-elements.com/load-more-infinite-scroll-widget-for-elementor/">Load More / Infinite Scroll Widget for Elementor (Pro)</a> - Add a load more button to your post or product grids. You can even make an infinite scroll effect that works with AJAX.</li>
 
143
  <li><a href="https://unlimited-elements.com/post-timeline-widget-for-elementor/">Post Timeline Widget for Elementor (Pro)</a></li>
144
  <li><a href="https://unlimited-elements.com/post-scroll-widget-for-elementor">Post Scroll Widget for Elementor (Pro)</a></li>
145
- <li><a href="https://unlimited-elements.com/post-magazine-grid-widget-for-elementor/">Post Magazine Grid Widget for Elementor (Pro)</a></li>
146
  <li><a href="https://unlimited-elements.com/tabs-filter-widget-for-elementor/">Tabs Filter Widget for Elementor (Pro)</a> - The Tabs Filter is the best post filtering widget for Elementor. You can ad post filters using category and tag taxonomies.</li>
147
  <li><a href="https://unlimited-elements.com/taxonomy-terms-widget-for-elementor/">Taxonomy Terms Widget for Elementor (Pro)</a> - Showcase your WordPress tags and categories in different ways using the Taxonomy Widget for Elementor.
148
 
149
  </li>
 
150
  <li><a href="https://unlimited-elements.com/post-horizontal-timeline-widget-for-elementor/">Post Horizontal Timeline Widget for Elementor (Pro)</a></li>
151
  </ol>
152
 
153
  <h3>Marketing Widgets for Elementor</h3>
154
  <ol>
155
  <li><a href="https://unlimited-elements.com/price-label-product-box-widget-for-elementor/">Product Box Widget for Elementor (Free)</a></li>
156
- <li><a href="https://unlimited-elements.com/notification-widget-for-elementor">Notification Widget for Elementor (Free)</a> - The Notification widget enables you to display a colored alert box and draw attention to important messages on your Elementor website.</li>
157
- <li><a href="https://unlimited-elements.com/overlay-product-box-widget-for-elementor/">Overlay Product Box Widget for Elementor (Free)</a></li>
158
- <li><a href="https://unlimited-elements.com/business-hours-widget-for-elementor">Business Hours Widget for Elementor (Free)</a></li>
159
  <li><a href="https://unlimited-elements.com/timer-countdowns-for-elementor-page-builder/">Timer Countdown Widget for Elementor (Free)</a> - Instantly create a beautiful, animated countdown clock addon, to share on your Elementor website. Count down to a date with your own unique timer.
160
 
161
  </li>
162
  <li><a href="https://unlimited-elements.com/call-to-action-button-widget-for-elementor/">Call To Action Button Widget for Elementor (Free)</a> - The Call to Action Button Widget is a tool for creating beautiful buttons that combine an icon, some text, and message notification.</li>
 
163
  <li><a href="https://unlimited-elements.com/price-list-widget-for-elementor/">Price List Widget for Elementor (Free)</a> - A powerful addon that allows displaying a list of items, products, services or features for your business with easy styling options.</li>
164
  <li><a href="https://unlimited-elements.com/event-box-widget-for-elementor">Event Box Widget for Elementor (Free)</a> - Showcase events & special occasions on your websites using this unique Elementor addon.</li>
165
- <li><a href="https://unlimited-elements.com/statistic-counters-for-elementor">Counter Widget for Elementor (Free)</a> - Showcasing your business statistics and show fun facts and figures on your Elementor website.</li>
166
- <li><a href="https://unlimited-elements.com/review-box-widget-for-elementor">Review Box Widget for Elementor (Free)</a> - Simply create and display reviews on your Elementor website to build customers’ trust and increase SEO.</li>
167
  <li><a href="https://unlimited-elements.com/pricing-table-widget-for-elementor/">Pricing Table Widget for Elementor (Free)</a> - Present the available pricing plans in an easy to read format. Use the Pricing Table widget to help your customers make purchasing decisions.</li>
168
- <li><a href="https://unlimited-elements.com/list-widget-for-elementor/">List Widget for Elementor (Free)</a> - Create styled ordered and unordered lists easily. The ordered list will add index numbers automatically to your list items.</li>
169
  <li><a href="http://unlimited-elements.com/food-menu-box-widget-for-elementor/">Product Card Widget for Elementor (Free)</a></li>
170
- <li><a href="https://unlimited-elements.com/copy-coupon-code-widget-for-elementor">Copy Coupon Code Widget for Elementor (Pro)</a> - Click to copy coupon code to the clipboard. This widgets makes it easy for users to redeem your promotions coupon codes.</li>
171
- <li><a href="https://unlimited-elements.com/google-maps-widget-for-elementor">Unlimited Google Maps Widget for Elementor (Pro)</a></li>
 
172
  <li><a href="https://unlimited-elements.com/timer-countdown-banner-widget-for-elementor">Timer Countdown Banner Widget for Elementor (Pro)</a> - An awesome countdown banner with a a call to action button.</li>
173
  <li><a href="https://unlimited-elements.com/card-testimonial-review-carousel-widget-for-elementor">Review Carousel Widget for Elementor (Pro)</a> - The Reviews Carousel increases the visibility reviews you want to highlight to your users by letting you display them throughout your site in an interactive carousel format. </li>
174
  <li><a href="https://unlimited-elements.com/list-marquee-widget-for-elementor/">List Marquee Widget for Elementor (Pro)</a></li>
 
175
  <li><a href="https://unlimited-elements.com/pricing-flip-box-widget-for-elementor/">Pricing Table Flip Box Widget for Elementor (Pro)</a> - The Pricing Table Flip Box allows you to showcase the prices for your products, services, or packages in a beautiful flip box pricing table.</li>
176
- <li><a href="https://unlimited-elements.com/food-menu-carousel-widget-for-elementor">Product Carousel Widget for Elementor (Pro)</a></li>
177
  <li><a href="https://unlimited-elements.com/event-list-widget-for-elementor/">Event List Widget for Elementor (Pro)</a> - The event list widget is a way to easily show your recent events like concerts, conferences, parties or special occasions.
178
  </li>
 
179
  <li><a href="https://unlimited-elements.com/price-box-widget-for-elementor/">Price Box Widget for Elementor (Pro)</a></li>
180
  <li><a href="https://unlimited-elements.com/icon-mobile-menu-for-elementor">Icon Mobile Menu Widget for Elementor (Pro)</a> - A perfect way to add an icon menu for making your CTA buttons stand out for website visitors using mobile devices.</li>
181
- <li><a href="https://unlimited-elements.com/mobile-conversion-menu-for-elementor">Mobile Conversion Menu Widget for Elementor (Pro)</a> - Floating action buttons that display the primary actions in your Elementor website. Provide quick access to social icons or any important or common actions to increase conversions.</li>
182
  <li><a href="https://unlimited-elements.com/whatsapp-chat-widget-for-elementor">WhatsApp Chat Widget for Elementor (Pro)</a> - A floating WhatsApp button that allows your website visitors to start a chat conversation from your website directly to your WhatsApp phone number with just one click.</li>
183
- <li><a href="https://unlimited-elements.com/product-bullets-widget-for-elementor">Product Bullets Widget for Elementor (Pro)</a></li>
184
- <li><a href="https://unlimited-elements.com/memory-game-widget-for-elementor">Memory Game Widget for Elementor (Pro)</a></li>
185
  <li><a href="https://unlimited-elements.com/two-column-product-bullets-widget-for-elementor/">Product Highlights Widget for Elementor (Pro)</a> - Design a visually attractive product feature lists that will help your potential buyers to make purchase decision and learn more about your products. </li>
186
- <li><a href="https://unlimited-elements.com/pricing-plans-widget-for-elementor">Pricing Plans Widget for Elementor (Pro)</a> - Use the Pricing Plans widget to display all the information to your potential clients in the clearest and comparable way and help them make a choice.</li>
187
- </ol>
188
-
189
- <h3>Infographic Widgets for Elementor</h3>
190
- <ol>
191
- <li><a href="https://unlimited-elements.com/unlimited-timeline-widget-for-elementor">Unlimited Timeline Widget for Elementor (Free)</a> - Showcase your story or company history in a vertical timeline layout using the powerful Unlimited Timeline addon for Elementor.</li>
192
- <li><a href="https://unlimited-elements.com/linear-progress-bar-widget-for-elementor">Linear Progress Bar Widget for Elementor (Free)</a></li>
193
- <li><a href="https://unlimited-elements.com/pie-chart-for-elementor">Pie chart Widget for Elementor (Free)</a></li>
194
- <li><a href="https://unlimited-elements.com/line-chart-for-elementor">Line Chart Widget for Elementor (Free)</a></li>
195
- <li><a href="https://unlimited-elements.com/unlimited-charts-widget-for-elementor">Unlimited Charts Widget for Elementor (Pro)</a> - The easy way to include animated, interactive graphs and charts on your Elementor website. 6 Chart styles included: Bar Chart, Line Chart, Pie Chart, Doughnut Chart, Radar Chart and Polar Area Chart.
196
- </li>
197
- <li><a href="https://unlimited-elements.com/step-process-widget-for-elementor">Step Process Widget for Elementor (Pro)</a> - Showcase process/steps with unique layout variations. Create visual diagrams of step by step instructions to simplify processes to your website visitors.</li>
198
- <li><a href="https://unlimited-elements.com/circle-progress-bar-widget-for-elementor/">Circle Progress Bar Widget for Elementor (Pro)</a></li>
199
- <li><a href="https://unlimited-elements.com/semi-circle-progress-bar-widget-for-elementor/">Semi Circle Progress Bar Widget for Elementor (Pro)</a></li>
200
- <li><a href="https://unlimited-elements.com/vertical-progress-bar-widget-for-elementor">Vertical Progress Bar Widget for Elementor (Pro)</a></li>
201
  </ol>
202
 
203
- <h3>Woocommerce for Elementor</h3>
204
  <ol>
205
- <li><a href="https://unlimited-elements.com/woocommerce-product-list-widget-for-elementor/">Woocommerce Product List Widget for Elementor (Free)</a></li>
206
- <li><a href="https://unlimited-elements.com/woocommerce-product-slider-widget-for-elementor">Woocommerce Product Slider Widget for Elementor (Pro)</a></li>
207
- <li><a href="https://unlimited-elements.com/woocommerce-product-carousel-widget-for-elementor">Woocommerce Product Carousel Widget for Elementor (Pro)</a></li>
208
- <li><a href="https://unlimited-elements.com/woocommerce-product-grid-widget-for-elementor/">Woocommerce Product Grid Widget for Elementor (Pro)</a></li>
209
- <li><a href="https://unlimited-elements.com/woocommerce-category-grid-for-elemenetor/">Woocommerce Category Grid Widget for Elementor (Pro)</a></li>
210
- <li><a href="https://unlimited-elements.com/woocommerce-category-carousel-widget-for-elementor/">Woocommerce Category Carousel Widget for Elementor (Pro)</a></li>
211
  </ol>
212
 
213
- <h3>Dynamic Loops for Elementor</h3>
214
  <ol>
215
- <li><a href="https://unlimited-elements.com/dynamic-template-grid-widget-for-elementor/">Dynamic Template Grid Widget for Elementor (Pro)</a></li>
216
- <li><a href="https://unlimited-elements.com/dynamic-template-carousel-widget-for-elementor/">Dynamic Template Carousel Widget for Elementor (Pro)</a></li>
217
- <li><a href="https://unlimited-elements.com/dynamic-template-tabs-widget-for-elementor/">Dynamic Template Tabs Widget for Elementor (Pro)</a></li>
218
- <li><a href="https://unlimited-elements.com/dynamic-template-slider-widget-for-elementor">Dynamic Template Slider Widget for Elementor (Pro)</a></li>
219
- <li><a href="https://unlimited-elements.com/dynamic-template-accordion-widget-for-elementor/">Dynamic Template Accordion Widget for Elementor (Pro)</a></li>
 
220
  </ol>
221
 
222
  <h3>Menu Widgets for Elementor</h3>
223
  <ol>
224
  <li><a href="https://unlimited-elements.com/fullscreen-menu-widget-for-elementor/">Fullscreen Menu Widget for Elementor (Free)</a> - Create an awesome Elementor Full-Screen Menu​ easily using this widget. The easiest way to add a hamburger icon that triggers a fullscreen menu overlay with a close button.
225
  </li>
226
- <li><a href="https://unlimited-elements.com/simple-list-menu-widget-for-elementor">List Menu Widget for Elementor (Free)</a></li>
227
  <li><a href="http://unlimited-elements.com/side-menu-widget-for-elementor">Side Menu Widget for Elementor (Pro)</a> - Off Canvas sidebar with a WordPress menu inside that can include icon links and a search bar. Use the toggle button to open the side menu and the close icon to close it.</li>
228
- <li><a href="https://unlimited-elements.com/liquid-fullscreen-menu-widget-for-elementor">Liquid Full Screen Menu Widget for Elementor (Pro)</a> - Code Credit:
 
 
229
  https://github.com/ykob/shape-overlays</li>
230
  <li><a href="https://unlimited-elements.com/one-page-scroll-navigation-widget-for-elementor">One Page Scroll Navigation Widget for Elementor (Pro)</a></li>
231
  <li><a href="http://unlimited-elements.com/circle-menu-widget-for-elementor">Circle Menu Widget for Elementor (Pro)</a></li>
232
- <li><a href="https://unlimited-elements.com/accordion-menu-widget-for-elementor">Accordion Menu Widget for Elementor (Pro)</a></li>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
233
  </ol>
234
 
235
  <h3>Carousel Widgets for Elementor</h3>
236
  <ol>
237
  <li><a href="https://unlimited-elements.com/card-carousel-widget-for-elementor/">Card Carousel Widget for Elementor (Free)</a> - Use the card carousel widget to display two or more pieces of content in a carousel format. Create any kind of carousel you can think about.</li>
238
- <li><a href="https://unlimited-elements.com/coverflow-carousel-widget-for-elementor/">Coverflow Carousel Widget for Elementor (Pro)</a></li>
239
  <li><a href="https://unlimited-elements.com/icon-carousel-widget-for-elementor/">Icon Carousel Widget for Elementor (Pro)</a></li>
240
  <li><a href="https://unlimited-elements.com/image-card-carousel-widget-for-elementor">Image Card Carousel Widget for Elementor (Pro)</a></li>
241
  <li><a href="https://unlimited-elements.com/material-carousel-widget-for-elementor/">Material Carousel Widget for Elementor (Pro)</a></li>
@@ -245,14 +245,31 @@ https://github.com/ykob/shape-overlays</li>
245
  <li><a href="https://unlimited-elements.com/justified-image-carousel-widget-for-elementor/">Justified Image Carousel Widget for Elementor (Pro)</a></li>
246
  </ol>
247
 
248
- <h3>Remote Control Widgets for Elementor</h3>
249
  <ol>
250
- <li><a href="https://unlimited-elements.com/remote-control-widgets">Remote Arrows Widget for Elementor (Free)</a></li>
251
- <li><a href="https://unlimited-elements.com/remote-control-widgets">Remote Bullets Widget for Elementor (Free)</a></li>
252
- <li><a href="https://unlimited-elements.com/remote-control-widgets">Remote Counter Widget for Elementor (Free)</a></li>
253
- <li><a href="https://unlimited-elements.com/remote-control-widgets">Remote Play Pause Widget for Elementor (Free)</a></li>
254
- <li><a href="https://unlimited-elements.com/remote-tabs-widget-for-elementor">Remote Tabs Widget for Elementor (Pro)</a> - Control your content using remote control tabs to create advanced interactive layouts.</li>
255
- <li><a href="https://unlimited-elements.com/remote-control-widgets">Remote Item Navigation Widget for Elementor (Pro)</a></li>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
256
  </ol>
257
 
258
  <h3>Media Widgets for Elementor</h3>
@@ -272,20 +289,6 @@ https://github.com/ykob/shape-overlays</li>
272
  <li><a href="https://unlimited-elements.com/thumb-list-video-gallery-widget-for-elementor/">Play List Video Gallery Widget for Elementor (Pro)</a></li>
273
  </ol>
274
 
275
- <h3>Content Widgets for Elementor</h3>
276
- <ol>
277
- <li><a href="https://unlimited-elements.com/content-tabs-widget-for-elementor/">Content Tabs Widget for Elementor (Free)</a></li>
278
- <li><a href="https://unlimited-elements.com/content-accordion-widget-for-elementor/">Content Accordion Widget for Elementor (Free)</a></li>
279
- <li><a href="https://unlimited-elements.com/unlimited-grid-widget-for-elementor/">Unlimited Grid Widget for Elementor (Pro)</a> - Create advanced content layouts using an easy-to-use grid system with ultimate flexibility.</li>
280
- <li><a href="https://unlimited-elements.com/content-switcher-widget-for-elementor/">Content Switcher Widget for Elementor (Pro)</a> - Allow users to switch between two or more types of content using interactive toggle buttons. You can even load Elementor templates as content to make advanced content switcher layouts.
281
-
282
- </li>
283
- <li><a href="https://unlimited-elements.com/content-slider-widget-for-elementor">Content Slider Widget for Elementor (Pro)</a> - Content slider is the most extensive and user-friendly Elementor widget for building amazing sliders. Create stunning animated sliders inside of your web designs in seconds.</li>
284
- <li><a href="https://unlimited-elements.com/content-carousel-widget-for-elementor/">Content Carousel Widget for Elementor (Pro)</a> - Content carousel allows you to create an interactive carousel where the content for each slide can be anything you want: images, text, HTML, and even Elementor templates.</li>
285
- <li><a href="https://unlimited-elements.com/content-grid-widget-for-elementor/">Content Grid Widget for Elementor (Pro)</a></li>
286
- <li><a href="https://unlimited-elements.com/content-ticker-widget-for-elementor/">Content Ticker Widget for Elementor (Pro)</a></li>
287
- </ol>
288
-
289
  <h3>Testimonials for Elementor</h3>
290
  <ol>
291
  <li><a href="https://unlimited-elements.com/box-testimonial-widget-for-elementor/">Testimonial Box Widget for Elementor (Free)</a></li>
@@ -306,7 +309,7 @@ https://github.com/ykob/shape-overlays</li>
306
 
307
  <h3>Content Boxes for Elementor</h3>
308
  <ol>
309
- <li><a href="https://unlimited-elements.com/image-zoom-content-box-widget-for-elementor/">Image Zoom Content Box Widget for Elementor (Free)</a></li>
310
  <li><a href="https://unlimited-elements.com/image-card-content-box-widget-for-elementor/">Image Card Widget for Elementor (Free)</a></li>
311
  <li><a href="https://unlimited-elements.com/hover-text-reveal-content-box-widget-for-elementor/">Content Box Hover Text Reveal Widget for Elementor (Free)</a></li>
312
  <li><a href="https://unlimited-elements.com/icon-image-content-box-widget-for-elementor">Icon Image Content Box Widget for Elementor (Free)</a></li>
@@ -320,7 +323,7 @@ https://github.com/ykob/shape-overlays</li>
320
  <h3>Instagram Widgets for Elementor</h3>
321
  <ol>
322
  <li><a href="https://unlimited-elements.com/latest-instagram-image-widget-for-elementor">Instagram Latest Image Widget for Elementor (Free)</a></li>
323
- <li><a href="https://unlimited-elements.com/grid-instagram-widget-for-elementor">Instagram Grid Widget for Elementor (Pro)</a></li>
324
  <li><a href="https://unlimited-elements.com/instagram-teaser-box-for-elementor/">Instagram Box Widget for Elementor (Pro)</a></li>
325
  <li><a href="https://unlimited-elements.com/instagram-card-widget-for-elementor/">Instagram Card Widget for Elementor (Pro)</a></li>
326
  <li><a href="https://unlimited-elements.com/metro-instagram-widget-for-elementor">Instagram Metro Grid Widget for Elementor (Pro)</a></li>
@@ -338,7 +341,7 @@ https://github.com/ykob/shape-overlays</li>
338
  <ol>
339
  <li><a href="https://unlimited-elements.com/link-hover-effects/">Link Hover Effects Widget for Elementor (Free)</a></li>
340
  <li><a href="https://unlimited-elements.com/icon-hover-effects-for-elementor/">Icon Hover Effects Widget for Elementor (Free)</a></li>
341
- <li><a href="https://unlimited-elements.com/creative-button-hover-widget-for-elementor/">Creative Button Hovers Widget for Elementor (Free)</a></li>
342
  <li><a href="https://unlimited-elements.com/banner-hover-effect-widgets-for-elementor/">Banner Hover Effects Widget for Elementor (Pro)</a></li>
343
  <li><a href="https://unlimited-elements.com/scrolling-screenshot-widget-for-elementor">Scrolling Screenshot Widget for Elementor (Pro)</a> - Add a long screenshot that will scroll when you hover over it.</li>
344
  <li><a href="https://unlimited-elements.com/ihover-for-elementor/">iHover Effect Widget for Elementor (Pro)</a></li>
@@ -351,7 +354,7 @@ https://github.com/ykob/shape-overlays</li>
351
  <li><a href="https://unlimited-elements.com/video-play-button-popup-widget-for-elementor/">Video Play Button Widget for Elementor (Free)</a></li>
352
  <li><a href="https://unlimited-elements.com/button-group-widget-for-elementor/">Button Group Widget for Elementor (Free)</a></li>
353
  <li><a href="https://unlimited-elements.com/underline-animated-button-widget-for-elementor/">Underline Animated Button Widget for Elementor (Free)</a></li>
354
- <li><a href="https://unlimited-elements.com/multi-line-button-widget-for-elementor/">Multi Line Button Widget for Elementor (Free)</a></li>
355
  <li><a href="https://unlimited-elements.com/toggle-text-button-widget-for-elementor/">Toggle Text Button Widget for Elementor (Free)</a></li>
356
  <li><a href="https://unlimited-elements.com/parellogram-button-widget-for-elementor/">Parallelogram Button Widget for Elementor (Free)</a></li>
357
  <li><a href="https://unlimited-elements.com/icon-pointer-button-widget-for-elementor/">Icon Pointer Button Widget for Elementor (Free)</a></li>
@@ -376,7 +379,7 @@ https://github.com/ykob/shape-overlays</li>
376
  <li><a href="https://unlimited-elements.com/dual-color-heading-widget-for-elementor/">Dual Color Heading Widget for Elementor (Free)</a></li>
377
  <li><a href="https://unlimited-elements.com/stroke-text-effect-widget-for-elementor/">Stroke Text Effect Widget for Elementor (Free)</a></li>
378
  <li><a href="https://unlimited-elements.com/gradient-text-effect-for-elementor/">Gradient Text Effect Widget for Elementor (Free)</a></li>
379
- <li><a href="https://unlimited-elements.com/text-marquee-for-elementor/">Text Marquee Effect Widget for Elementor (Free)</a></li>
380
  <li><a href="https://unlimited-elements.com/futuristic-typing-text-effect-widget-for-elementor/">Futuristic Typing Text Effect Widget for Elementor (Pro)</a></li>
381
  <li><a href="https://unlimited-elements.com/animated-split-text-widget-for-elementor/">Animated Split Text Widget for Elementor (Pro)</a></li>
382
  <li><a href="https://unlimited-elements.com/sideways-vertical-text-widget-for-elementor">Sideways Vertical Text Widget for Elementor (Pro)</a></li>
@@ -456,6 +459,7 @@ https://github.com/ykob/shape-overlays</li>
456
 
457
 
458
 
 
459
  == Installation ==
460
 
461
  Note : This plugin works with Elementor. Make sure you have [Elementor](https://wordpress.org/plugins/elementor/) installed.
@@ -466,6 +470,22 @@ Note : This plugin works with Elementor. Make sure you have [Elementor](https://
466
 
467
  == Changelog ==
468
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
469
  version 1.5.10: 2022-04-04
470
 
471
  * Fix: fixed title and description source in gallery source selection
@@ -1601,7 +1621,7 @@ Absolutely! It will work with any theme where Elementor works.
1601
 
1602
  = What if i update to the Premium version after using the Free version? =
1603
 
1604
- Your existing elements/content will work with the premium version. So you wont lose your any of your hard work.
1605
 
1606
  = Can i get a refund? =
1607
 
92
 
93
  <h3>Creative Widgets for Elementor</h3>
94
  <ol>
95
+ <li><a href="https://unlimited-elements.com/blob-shape-widget-for-elementor/">Blob Shapes Widget for Elementor (Free)</a> - Create Blob Shapes with animated morphing effects. This free Elementor widget will help you make your images into random, unique, and organic-looking blob shapes. </li>
96
  <li><a href="https://unlimited-elements.com/flip-box-widget-for-elementor/">Flip Box Widget for Elementor (Free)</a> - Make your content more interesting with the Elementor Flip Box widget. Use the animated Flip Boxes to highlight any content inside your page with a flip effect.</li>
97
+ <li><a href="https://unlimited-elements.com/number-box-widget-widget-for-elementor/">Number Box Widget for Elementor (Free)</a> - Create stunning number blocks with various styles. The Number Box widget for Elementor helps you display content for step-by-step diagrams and instructions.</li>
98
+ <li><a href="https://unlimited-elements.com/animated-mouse-scroll-icon-widget-for-elementor/">Animated Mouse Scroll Icon Widget for Elementor (Free)</a> - The Animated Mouse Scroll Icon is a small micro animation to indicate to users they need to scroll down the page to view more. You can make the icon an anchor point that scrolls down to any section when clicked on.
99
  </li>
100
  <li><a href="https://unlimited-elements.com/svg-animation-widget-for-elementor">SVG Animation Widget for Elementor (Free)</a> - The SVG animation widget for Elementor makes it easy -to create impressive SVG animations for your websitet, without any coding skills just copy paste your SVG code and your animated icon is ready.</li>
101
+ <li><a href="https://unlimited-elements.com/animated-hamburger-icon-for-elementor/">Animated Hamburger Icon Widget for Elementor (Free)</a> - Use the animated hamburger icon widget to toggle Elementor pro popups. You can even put a menu in a popup and create a full-screen menu.</li>
102
  <li><a href="https://unlimited-elements.com/timeline-bullets-widget-for-elementor/">Timeline Bullets Widget for Elementor (Free)</a> - List your features or services using bullet points in a timeline layout to make it easier for users to read the important information.</li>
103
  <li><a href="https://unlimited-elements.com/lordicon-animated-icons-widget-for-elementor/">Lordicon: Animated Icons Widget for Elementor (Free)</a> - The most powerful animated icon library with 1500+ free and premium animated Lottie animations.</li>
104
+ <li><a href="https://unlimited-elements.com/icon-bullets-widget-for-elementor">Icon Bullets Widget for Elementor (Free)</a> - Display feature lists with custom icons and styles. Each list item can have its own icon title and text. Use the bullets widget to display features and highlights on your Elementor website.</li>
105
  <li><a href="https://unlimited-elements.com/image-tooltip-widget-for-elementor/">Image Tooltip Widget for Elementor (Free)</a> - The easiest way to set a tooltip to any Image on the page with a short text description or any HTML code.</li>
106
+ <li><a href="https://unlimited-elements.com/image-accordion-widget-for-elementor/">Image Accordion Widget for Elementor (Pro)</a> - Our image accordion addon for Elementor highlights your images with amazing hover effects and interactive layouts.</li>
107
+ <li><a href="https://unlimited-elements.com/image-zoom-magnifier-widget-for-elementor/">Image Zoom Magnifier Widget for Elementor (Pro)</a> - Image Zoom Magnifier is a Elmentor Widget for creating a direction-aware magnifying glass effect to provide an inner zoom functionality on any given image. Enlarge images on touch, click, or mouseover.</li>
108
  <li><a href="https://unlimited-elements.com/image-reveal-on-scroll-widget-for-elementor">Image Reveal On Scroll Widget for Elementor (Pro)</a> - The Image Reveal on Scroll widget adds an awesome reveal on scroll effect to your images to spice up your Elementor website design.</li>
109
+ <li><a href="https://unlimited-elements.com/image-shapes-for-elementor-page-builder/">Image Shapes Widget for Elementor (Pro)</a> - The Image Shapes Elementor Widget allows you to make complex shape addons by clipping images using CSS to make various element layouts: circle, ellipse, polygon, and more.</li>
110
  <li><a href="https://unlimited-elements.com/image-particle-widget-for-elementor/">Particle Image Widget for Elementor (Pro)</a> - Create a dispersion interactive mouse aware distortion effect for any image using the Particle Image widget for Elementor.</li>
 
111
  <li><a href="https://unlimited-elements.com/icon-tabs-widget-for-elementor">Icon Tabs Widget for Elementor (Pro)</a> - The Tab Widget for Elementor will help you show your text on your page divided into horizontal or vertical tabs. Customize your tabs using icons and make the content on your website interactive and fun to read.</li>
112
+ <li><a href="https://unlimited-elements.com/background-switcher-widget-for-elementor/">Background Switcher Widget for Elementor (Pro)</a> - The background switcher addon lets you set up cool content boxes. When you hover over a box it will change the background for the whole section. </li>
113
  <li><a href="https://unlimited-elements.com/icon-accordion-widget-for-elementor/">Icon Accordion Widget for Elementor (Pro)</a> - Advanced accordion addon for Elementor page builder offers multiple styles to create interactive collapsable content with multiple layouts on your page.</li>
114
  <li><a href="https://unlimited-elements.com/before-after-image-comparison-widget-for-elementor/">Before After Widget for Elementor (Pro)</a> - The Before After widget is an image comparison addon for Elementor. This widget allows you to create the effect for comparing two before and after images.</li>
115
  <li><a href="https://unlimited-elements.com/hotspots-for-elementor-page-builder/">Hotspots Widget for Elementor (Pro)</a> - Add hotspots to your images with a tooltip an option for opening a built in popup. Each hotspot popup can contain and image and description text.</li>
 
116
  <li><a href="https://unlimited-elements.com/shape-bullets-widget-for-elementor/">Shape Bullets Widget for Elementor (Pro)</a> - The Shape Bullets Widget for Elementor, creates an easy-to-manage bulleted list of items. Each item can be highlighted by its own icon.
 
 
 
117
  </li>
118
  <li><a href="https://unlimited-elements.com/flip-box-carousel-widget-for-elementor/">Flip Box Carousel Widget for Elementor (Pro)</a> - Use the animated Carousel Flip Box to highlight content inside your Elementor page in an interactive way.
119
  </li>
122
 
123
  <h3>Post Widgets for Elementor</h3>
124
  <ol>
125
+ <li><a href="https://unlimited-elements.com/post-tabs-for-elementor/">Post Tabs Widget for Elementor (Free)</a> - The Post Tabs widget allows you to create custom-made tab designs and display your WordPress posts in an interactive tabs layout.</li>
126
+ <li><a href="https://unlimited-elements.com/post-news-ticker-widget-for-elementor">Post Ticker Widget for Elementor (Free)</a> - Display a horizontal post news ticker on your website using WordPress posts, pages, products, or any other custom post type with the help of the Post News Ticker.</li>
127
+ <li><a href="https://unlimited-elements.com/card-post-carousel-widget-for-elementor">Post Carousel Lite Widget for Elementor (Free)</a> - The Post Carousel widget allows you to choose a set of posts, pages, products, or any custom post type based on category, tags, or author and present them in an interactive carousel format.</li>
128
  <li><a href="https://unlimited-elements.com/post-blocks-widget-for-elementor">Post Blocks Widget for Elementor (Free)</a></li>
129
  <li><a href="https://unlimited-elements.com/post-pagination-widget-for-elementor/">Post Pagination Widget for Elementor (Free)</a></li>
130
+ <li><a href="https://unlimited-elements.com/post-list-widget-for-elementor">Post List Widget for Elementor (Free)</a> - The Post List widget lets you display your WordPress posts in a list layout with multiple columns. You can also add advanced filtering, pagination, load more button, and even infinite scroll to any post list your desire. </li>
 
 
131
  <li><a href="https://unlimited-elements.com/post-accordions-for-elementor/">Post Accordion Widget for Elementor (Free)</a></li>
 
132
  <li><a href="https://unlimited-elements.com/elementor-author-list-widget/">Author List Widget for Elementor (Pro)</a></li>
133
  <li><a href="https://unlimited-elements.com/masonry-post-grid-widget-for-elementor">Masonry Post Grid Widget for Elementor (Pro)</a></li>
134
  <li><a href="https://unlimited-elements.com/post-tiles-widget-for-elementor">Post Tile Widget for Elementor (Pro)</a></li>
135
  <li><a href="https://unlimited-elements.com/post-sliders/">Post Slider Widget for Elementor (Pro)</a></li>
 
136
  <li><a href="https://unlimited-elements.com/blog-card-slider-widget-for-elementor">Post Card Slider Widget for Elementor (Pro)</a></li>
137
+ <li><a href="https://unlimited-elements.com/post-grid-widget-for-elementor/">Post Grid Widget for Elementor (Pro)</a> - The Post Grid widget places multiple posts in an aesthetic post grid layout. The purpose of this widget is to let you organize and display your posts on your Elementor website.</li>
138
  <li><a href="https://unlimited-elements.com/load-more-infinite-scroll-widget-for-elementor/">Load More / Infinite Scroll Widget for Elementor (Pro)</a> - Add a load more button to your post or product grids. You can even make an infinite scroll effect that works with AJAX.</li>
139
+ <li><a href="https://unlimited-elements.com/post-magazine-grid-widget-for-elementor/">Post Magazine Grid Widget for Elementor (Pro)</a></li>
140
  <li><a href="https://unlimited-elements.com/post-timeline-widget-for-elementor/">Post Timeline Widget for Elementor (Pro)</a></li>
141
  <li><a href="https://unlimited-elements.com/post-scroll-widget-for-elementor">Post Scroll Widget for Elementor (Pro)</a></li>
 
142
  <li><a href="https://unlimited-elements.com/tabs-filter-widget-for-elementor/">Tabs Filter Widget for Elementor (Pro)</a> - The Tabs Filter is the best post filtering widget for Elementor. You can ad post filters using category and tag taxonomies.</li>
143
  <li><a href="https://unlimited-elements.com/taxonomy-terms-widget-for-elementor/">Taxonomy Terms Widget for Elementor (Pro)</a> - Showcase your WordPress tags and categories in different ways using the Taxonomy Widget for Elementor.
144
 
145
  </li>
146
+ <li><a href="https://unlimited-elements.com/post-carousels-for-elementor/">Post Carousel Widget for Elementor (Pro)</a> - The Post Carousel widget allows you to quickly showcase posts, pages, products, or custom post types in a beautiful interactive carousel layout.</li>
147
  <li><a href="https://unlimited-elements.com/post-horizontal-timeline-widget-for-elementor/">Post Horizontal Timeline Widget for Elementor (Pro)</a></li>
148
  </ol>
149
 
150
  <h3>Marketing Widgets for Elementor</h3>
151
  <ol>
152
  <li><a href="https://unlimited-elements.com/price-label-product-box-widget-for-elementor/">Product Box Widget for Elementor (Free)</a></li>
 
 
 
153
  <li><a href="https://unlimited-elements.com/timer-countdowns-for-elementor-page-builder/">Timer Countdown Widget for Elementor (Free)</a> - Instantly create a beautiful, animated countdown clock addon, to share on your Elementor website. Count down to a date with your own unique timer.
154
 
155
  </li>
156
  <li><a href="https://unlimited-elements.com/call-to-action-button-widget-for-elementor/">Call To Action Button Widget for Elementor (Free)</a> - The Call to Action Button Widget is a tool for creating beautiful buttons that combine an icon, some text, and message notification.</li>
157
+ <li><a href="https://unlimited-elements.com/statistic-counters-for-elementor">Counter Widget for Elementor (Free)</a> - Showcasing your business statistics and show fun facts and figures on your Elementor website.</li>
158
  <li><a href="https://unlimited-elements.com/price-list-widget-for-elementor/">Price List Widget for Elementor (Free)</a> - A powerful addon that allows displaying a list of items, products, services or features for your business with easy styling options.</li>
159
  <li><a href="https://unlimited-elements.com/event-box-widget-for-elementor">Event Box Widget for Elementor (Free)</a> - Showcase events & special occasions on your websites using this unique Elementor addon.</li>
160
+ <li><a href="https://unlimited-elements.com/notification-widget-for-elementor">Notification Widget for Elementor (Free)</a> - The Notification widget enables you to display a colored alert box and draw attention to important messages on your Elementor website.</li>
 
161
  <li><a href="https://unlimited-elements.com/pricing-table-widget-for-elementor/">Pricing Table Widget for Elementor (Free)</a> - Present the available pricing plans in an easy to read format. Use the Pricing Table widget to help your customers make purchasing decisions.</li>
162
+ <li><a href="https://unlimited-elements.com/business-hours-widget-for-elementor">Business Hours Widget for Elementor (Free)</a></li>
163
  <li><a href="http://unlimited-elements.com/food-menu-box-widget-for-elementor/">Product Card Widget for Elementor (Free)</a></li>
164
+ <li><a href="https://unlimited-elements.com/overlay-product-box-widget-for-elementor/">Overlay Product Box Widget for Elementor (Free)</a></li>
165
+ <li><a href="https://unlimited-elements.com/review-box-widget-for-elementor">Review Box Widget for Elementor (Free)</a> - Simply create and display reviews on your Elementor website to build customers’ trust and increase SEO.</li>
166
+ <li><a href="https://unlimited-elements.com/list-widget-for-elementor/">List Widget for Elementor (Free)</a> - Create styled ordered and unordered lists easily. The ordered list will add index numbers automatically to your list items.</li>
167
  <li><a href="https://unlimited-elements.com/timer-countdown-banner-widget-for-elementor">Timer Countdown Banner Widget for Elementor (Pro)</a> - An awesome countdown banner with a a call to action button.</li>
168
  <li><a href="https://unlimited-elements.com/card-testimonial-review-carousel-widget-for-elementor">Review Carousel Widget for Elementor (Pro)</a> - The Reviews Carousel increases the visibility reviews you want to highlight to your users by letting you display them throughout your site in an interactive carousel format. </li>
169
  <li><a href="https://unlimited-elements.com/list-marquee-widget-for-elementor/">List Marquee Widget for Elementor (Pro)</a></li>
170
+ <li><a href="https://unlimited-elements.com/copy-coupon-code-widget-for-elementor">Copy Coupon Code Widget for Elementor (Pro)</a> - Click to copy coupon code to the clipboard. This widgets makes it easy for users to redeem your promotions coupon codes.</li>
171
  <li><a href="https://unlimited-elements.com/pricing-flip-box-widget-for-elementor/">Pricing Table Flip Box Widget for Elementor (Pro)</a> - The Pricing Table Flip Box allows you to showcase the prices for your products, services, or packages in a beautiful flip box pricing table.</li>
 
172
  <li><a href="https://unlimited-elements.com/event-list-widget-for-elementor/">Event List Widget for Elementor (Pro)</a> - The event list widget is a way to easily show your recent events like concerts, conferences, parties or special occasions.
173
  </li>
174
+ <li><a href="https://unlimited-elements.com/pricing-plans-widget-for-elementor">Pricing Plans Widget for Elementor (Pro)</a> - Use the Pricing Plans widget to display all the information to your potential clients in the clearest and comparable way and help them make a choice.</li>
175
  <li><a href="https://unlimited-elements.com/price-box-widget-for-elementor/">Price Box Widget for Elementor (Pro)</a></li>
176
  <li><a href="https://unlimited-elements.com/icon-mobile-menu-for-elementor">Icon Mobile Menu Widget for Elementor (Pro)</a> - A perfect way to add an icon menu for making your CTA buttons stand out for website visitors using mobile devices.</li>
 
177
  <li><a href="https://unlimited-elements.com/whatsapp-chat-widget-for-elementor">WhatsApp Chat Widget for Elementor (Pro)</a> - A floating WhatsApp button that allows your website visitors to start a chat conversation from your website directly to your WhatsApp phone number with just one click.</li>
178
+ <li><a href="https://unlimited-elements.com/food-menu-carousel-widget-for-elementor">Product Carousel Widget for Elementor (Pro)</a></li>
 
179
  <li><a href="https://unlimited-elements.com/two-column-product-bullets-widget-for-elementor/">Product Highlights Widget for Elementor (Pro)</a> - Design a visually attractive product feature lists that will help your potential buyers to make purchase decision and learn more about your products. </li>
180
+ <li><a href="https://unlimited-elements.com/memory-game-widget-for-elementor">Memory Game Widget for Elementor (Pro)</a></li>
181
+ <li><a href="https://unlimited-elements.com/floating-chat-buttons-widget-for-elementor">Floating Chat Buttons Widget for Elementor (Pro)</a> - Floating action buttons that display the primary actions in your Elementor website. Provide quick access to social icons or any important or common actions to increase conversions.</li>
182
+ <li><a href="https://unlimited-elements.com/google-maps-widget-for-elementor">Unlimited Google Maps Widget for Elementor (Pro)</a> - Display beautiful google maps with multiple markers on your Elementor website in a matter of seconds.</li>
183
+ <li><a href="https://unlimited-elements.com/product-bullets-widget-for-elementor">Product Bullets Widget for Elementor (Pro)</a></li>
 
 
 
 
 
 
 
 
 
 
 
184
  </ol>
185
 
186
+ <h3>WooCommerce for Elementor</h3>
187
  <ol>
188
+ <li><a href="https://unlimited-elements.com/woocommerce-product-list-widget-for-elementor/">WooCommerce Product List Widget for Elementor (Free)</a> - Showcase your WooCommerce products in an attractive list layout with many customization options. You can choose how many products to show per page, what information to display about each product, and much more.</li>
189
+ <li><a href="https://unlimited-elements.com/woocommerce-product-grid-widget-for-elementor/">WooCommerce Product Grid Widget for Elementor (Pro)</a> - The WooCommerce Product Grid is a powerful widget that allows you to present your products in the most appealing style on your Elementor pages. Showcase your products in multiple layouts and design the with unlimited customization possibilities.</li>
190
+ <li><a href="https://unlimited-elements.com/woocommerce-product-carousel-widget-for-elementor">WooCommerce Product Carousel Widget for Elementor (Pro)</a> - The Woocommerce product carousel helps showcase your Woocommerce products on any Elementor page in an interactive carousel format.</li>
191
+ <li><a href="https://unlimited-elements.com/woocommerce-product-slider-widget-for-elementor">WooCommerce Product Slider Widget for Elementor (Pro)</a></li>
192
+ <li><a href="https://unlimited-elements.com/woocommerce-category-grid-for-elemenetor/">WooCommerce Category Grid Widget for Elementor (Pro)</a></li>
193
+ <li><a href="https://unlimited-elements.com/woocommerce-category-carousel-widget-for-elementor/">WooCommerce Category Carousel Widget for Elementor (Pro)</a></li>
194
  </ol>
195
 
196
+ <h3>Remote Control Widgets for Elementor</h3>
197
  <ol>
198
+ <li><a href="https://unlimited-elements.com/remote-control-widgets">Remote Arrows Widget for Elementor (Free)</a></li>
199
+ <li><a href="https://unlimited-elements.com/remote-control-widgets">Remote Bullets Widget for Elementor (Free)</a></li>
200
+ <li><a href="https://unlimited-elements.com/remote-control-widgets">Remote Counter Widget for Elementor (Free)</a></li>
201
+ <li><a href="https://unlimited-elements.com/remote-control-widgets">Remote Play Pause Widget for Elementor (Free)</a></li>
202
+ <li><a href="https://unlimited-elements.com/remote-tabs-widget-for-elementor">Remote Tabs Widget for Elementor (Pro)</a> - Control your content using remote control tabs to create advanced interactive layouts.</li>
203
+ <li><a href="https://unlimited-elements.com/remote-control-widgets">Remote Item Navigation Widget for Elementor (Pro)</a></li>
204
  </ol>
205
 
206
  <h3>Menu Widgets for Elementor</h3>
207
  <ol>
208
  <li><a href="https://unlimited-elements.com/fullscreen-menu-widget-for-elementor/">Fullscreen Menu Widget for Elementor (Free)</a> - Create an awesome Elementor Full-Screen Menu​ easily using this widget. The easiest way to add a hamburger icon that triggers a fullscreen menu overlay with a close button.
209
  </li>
210
+ <li><a href="https://unlimited-elements.com/simple-list-menu-widget-for-elementor">List Menu Widget for Elementor (Free)</a> - The List Menu widget is a responsive and free WordPress menu for Elementor. You can easily use the widget to add an awesome menu to your website and improve website navigation. It is easy to customize and configure.</li>
211
  <li><a href="http://unlimited-elements.com/side-menu-widget-for-elementor">Side Menu Widget for Elementor (Pro)</a> - Off Canvas sidebar with a WordPress menu inside that can include icon links and a search bar. Use the toggle button to open the side menu and the close icon to close it.</li>
212
+ <li><a href="https://unlimited-elements.com/liquid-fullscreen-menu-widget-for-elementor">Liquid Full Screen Menu Widget for Elementor (Pro)</a> - A toggle button that animates into a fullscreen menu with a trendy liquid goo effect.
213
+
214
+ Code Credit:
215
  https://github.com/ykob/shape-overlays</li>
216
  <li><a href="https://unlimited-elements.com/one-page-scroll-navigation-widget-for-elementor">One Page Scroll Navigation Widget for Elementor (Pro)</a></li>
217
  <li><a href="http://unlimited-elements.com/circle-menu-widget-for-elementor">Circle Menu Widget for Elementor (Pro)</a></li>
218
+ <li><a href="https://unlimited-elements.com/accordion-menu-widget-for-elementor">Accordion Menu Widget for Elementor (Pro)</a> - This widget is an excellent way of adding an interactive accordion menu to your Elementor website. It works with the WordPress menu system and allows you to create attractive accordion menus with just a couple of clicks.</li>
219
+ </ol>
220
+
221
+ <h3>Content Widgets for Elementor</h3>
222
+ <ol>
223
+ <li><a href="https://unlimited-elements.com/content-tabs-widget-for-elementor/">Content Tabs Widget for Elementor (Free)</a> - The Content Tabs widget allows users to navigate various types of content on your website in an interactive tabs layout.</li>
224
+ <li><a href="https://unlimited-elements.com/content-accordion-widget-for-elementor/">Content Accordion Widget for Elementor (Free)</a></li>
225
+ <li><a href="https://unlimited-elements.com/unlimited-grid-widget-for-elementor/">Unlimited Grid Widget for Elementor (Pro)</a> - Create advanced content layouts using an easy-to-use grid system with ultimate flexibility.</li>
226
+ <li><a href="https://unlimited-elements.com/content-switcher-widget-for-elementor/">Content Switcher Widget for Elementor (Pro)</a> - Allow users to switch between two or more types of content using interactive toggle buttons. You can even load Elementor templates as content to make advanced content switcher layouts.
227
+
228
+ </li>
229
+ <li><a href="https://unlimited-elements.com/content-slider-widget-for-elementor">Content Slider Widget for Elementor (Pro)</a> - Content slider is the most extensive and user-friendly Elementor widget for building amazing sliders. Create stunning animated sliders inside of your web designs in seconds.</li>
230
+ <li><a href="https://unlimited-elements.com/content-carousel-widget-for-elementor/">Content Carousel Widget for Elementor (Pro)</a> - Content carousel allows you to create an interactive carousel where the content for each slide can be anything you want: images, text, HTML, and even Elementor templates.</li>
231
+ <li><a href="https://unlimited-elements.com/content-grid-widget-for-elementor/">Content Grid Widget for Elementor (Pro)</a></li>
232
+ <li><a href="https://unlimited-elements.com/content-ticker-widget-for-elementor/">Content Ticker Widget for Elementor (Pro)</a></li>
233
  </ol>
234
 
235
  <h3>Carousel Widgets for Elementor</h3>
236
  <ol>
237
  <li><a href="https://unlimited-elements.com/card-carousel-widget-for-elementor/">Card Carousel Widget for Elementor (Free)</a> - Use the card carousel widget to display two or more pieces of content in a carousel format. Create any kind of carousel you can think about.</li>
238
+ <li><a href="https://unlimited-elements.com/coverflow-carousel-widget-for-elementor/">Coverflow Carousel Widget for Elementor (Pro)</a> - Coverflow carousel is a special kind of widget, that shows slides next to each other with a 3D effect and a reflection. This widget supports 4 different styles: Coverflow, Flat, Wheel, and Carousel.</li>
239
  <li><a href="https://unlimited-elements.com/icon-carousel-widget-for-elementor/">Icon Carousel Widget for Elementor (Pro)</a></li>
240
  <li><a href="https://unlimited-elements.com/image-card-carousel-widget-for-elementor">Image Card Carousel Widget for Elementor (Pro)</a></li>
241
  <li><a href="https://unlimited-elements.com/material-carousel-widget-for-elementor/">Material Carousel Widget for Elementor (Pro)</a></li>
245
  <li><a href="https://unlimited-elements.com/justified-image-carousel-widget-for-elementor/">Justified Image Carousel Widget for Elementor (Pro)</a></li>
246
  </ol>
247
 
248
+ <h3>Infographic Widgets for Elementor</h3>
249
  <ol>
250
+ <li><a href="https://unlimited-elements.com/unlimited-timeline-widget-for-elementor">Unlimited Timeline Widget for Elementor (Free)</a> - Showcase your story or company history in a vertical timeline layout using the powerful Unlimited Timeline addon for Elementor.</li>
251
+ <li><a href="https://unlimited-elements.com/linear-progress-bar-widget-for-elementor">Linear Progress Bar Widget for Elementor (Free)</a></li>
252
+ <li><a href="https://unlimited-elements.com/pie-chart-for-elementor">Pie chart Widget for Elementor (Free)</a></li>
253
+ <li><a href="https://unlimited-elements.com/line-chart-for-elementor">Line Chart Widget for Elementor (Free)</a></li>
254
+ <li><a href="https://unlimited-elements.com/unlimited-charts-widget-for-elementor">Unlimited Charts Widget for Elementor (Pro)</a> - The easy way to include animated, interactive graphs and charts on your Elementor website. 6 Chart styles included: Bar Chart, Line Chart, Pie Chart, Doughnut Chart, Radar Chart and Polar Area Chart.
255
+ </li>
256
+ <li><a href="https://unlimited-elements.com/interactive-circle-infographic-widget-for-elementor/">Interactive Circle Infographic Widget for Elementor (Pro)</a> - The Circle Infographic widget for Elementor is a simple and engaging way to present data, processes, concepts, structures and more. Helps your audience understand an entire cycle using a circular interactive tab layout.
257
+
258
+ </li>
259
+ <li><a href="https://unlimited-elements.com/funnel-pyramid-widget-for-elementor/">Funnel & Pyramid Widget for Elementor (Pro)</a> - Funnel & Pyramid charts are in the shape of a triangle. These charts are best used when your data is organized in some kind of hierarchical way and the levels indicate some kind of progressive order.</li>
260
+ <li><a href="https://unlimited-elements.com/step-process-widget-for-elementor">Step Process Widget for Elementor (Pro)</a> - Showcase process/steps with unique layout variations. Create visual diagrams of step by step instructions to simplify processes to your website visitors.</li>
261
+ <li><a href="https://unlimited-elements.com/circle-progress-bar-widget-for-elementor/">Circle Progress Bar Widget for Elementor (Pro)</a></li>
262
+ <li><a href="https://unlimited-elements.com/semi-circle-progress-bar-widget-for-elementor/">Semi Circle Progress Bar Widget for Elementor (Pro)</a></li>
263
+ <li><a href="https://unlimited-elements.com/vertical-progress-bar-widget-for-elementor">Vertical Progress Bar Widget for Elementor (Pro)</a></li>
264
+ </ol>
265
+
266
+ <h3>Dynamic Loops for Elementor</h3>
267
+ <ol>
268
+ <li><a href="https://unlimited-elements.com/dynamic-template-grid-widget-for-elementor/">Dynamic Template Grid Widget for Elementor (Pro)</a></li>
269
+ <li><a href="https://unlimited-elements.com/dynamic-template-carousel-widget-for-elementor/">Dynamic Template Carousel Widget for Elementor (Pro)</a></li>
270
+ <li><a href="https://unlimited-elements.com/dynamic-template-tabs-widget-for-elementor/">Dynamic Template Tabs Widget for Elementor (Pro)</a> - The Dynamic Template Tabs widget allows you to design a loop item from a single post template and create an interactive tabs layout to showcase posts with custom fields and layout.</li>
271
+ <li><a href="https://unlimited-elements.com/dynamic-template-slider-widget-for-elementor">Dynamic Template Slider Widget for Elementor (Pro)</a></li>
272
+ <li><a href="https://unlimited-elements.com/dynamic-template-accordion-widget-for-elementor/">Dynamic Template Accordion Widget for Elementor (Pro)</a></li>
273
  </ol>
274
 
275
  <h3>Media Widgets for Elementor</h3>
289
  <li><a href="https://unlimited-elements.com/thumb-list-video-gallery-widget-for-elementor/">Play List Video Gallery Widget for Elementor (Pro)</a></li>
290
  </ol>
291
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
292
  <h3>Testimonials for Elementor</h3>
293
  <ol>
294
  <li><a href="https://unlimited-elements.com/box-testimonial-widget-for-elementor/">Testimonial Box Widget for Elementor (Free)</a></li>
309
 
310
  <h3>Content Boxes for Elementor</h3>
311
  <ol>
312
+ <li><a href="https://unlimited-elements.com/image-zoom-content-box-widget-for-elementor/">Image Zoom Content Box Widget for Elementor (Free)</a> - Use the widget to draw attention to vital facts in a professional yet fun way. It will allow your audience to learn about your products, features, services, or events in one spot.</li>
313
  <li><a href="https://unlimited-elements.com/image-card-content-box-widget-for-elementor/">Image Card Widget for Elementor (Free)</a></li>
314
  <li><a href="https://unlimited-elements.com/hover-text-reveal-content-box-widget-for-elementor/">Content Box Hover Text Reveal Widget for Elementor (Free)</a></li>
315
  <li><a href="https://unlimited-elements.com/icon-image-content-box-widget-for-elementor">Icon Image Content Box Widget for Elementor (Free)</a></li>
323
  <h3>Instagram Widgets for Elementor</h3>
324
  <ol>
325
  <li><a href="https://unlimited-elements.com/latest-instagram-image-widget-for-elementor">Instagram Latest Image Widget for Elementor (Free)</a></li>
326
+ <li><a href="https://unlimited-elements.com/grid-instagram-widget-for-elementor">Instagram Feed Widget for Elementor (Pro)</a> - The Instagram Feed widget is the best solution for showcasing images from your Instagram profile on your Elementor website. It's a flexible and simple solution for amazing-looking Instagram layouts.</li>
327
  <li><a href="https://unlimited-elements.com/instagram-teaser-box-for-elementor/">Instagram Box Widget for Elementor (Pro)</a></li>
328
  <li><a href="https://unlimited-elements.com/instagram-card-widget-for-elementor/">Instagram Card Widget for Elementor (Pro)</a></li>
329
  <li><a href="https://unlimited-elements.com/metro-instagram-widget-for-elementor">Instagram Metro Grid Widget for Elementor (Pro)</a></li>
341
  <ol>
342
  <li><a href="https://unlimited-elements.com/link-hover-effects/">Link Hover Effects Widget for Elementor (Free)</a></li>
343
  <li><a href="https://unlimited-elements.com/icon-hover-effects-for-elementor/">Icon Hover Effects Widget for Elementor (Free)</a></li>
344
+ <li><a href="https://unlimited-elements.com/creative-button-hover-widget-for-elementor/">Creative Button Hovers Widget for Elementor (Free)</a> - Quickly add awesome buttons with creative hover effects in your Elementor pages. There is no limit to your creativity with our button hover effects widget.</li>
345
  <li><a href="https://unlimited-elements.com/banner-hover-effect-widgets-for-elementor/">Banner Hover Effects Widget for Elementor (Pro)</a></li>
346
  <li><a href="https://unlimited-elements.com/scrolling-screenshot-widget-for-elementor">Scrolling Screenshot Widget for Elementor (Pro)</a> - Add a long screenshot that will scroll when you hover over it.</li>
347
  <li><a href="https://unlimited-elements.com/ihover-for-elementor/">iHover Effect Widget for Elementor (Pro)</a></li>
354
  <li><a href="https://unlimited-elements.com/video-play-button-popup-widget-for-elementor/">Video Play Button Widget for Elementor (Free)</a></li>
355
  <li><a href="https://unlimited-elements.com/button-group-widget-for-elementor/">Button Group Widget for Elementor (Free)</a></li>
356
  <li><a href="https://unlimited-elements.com/underline-animated-button-widget-for-elementor/">Underline Animated Button Widget for Elementor (Free)</a></li>
357
+ <li><a href="https://unlimited-elements.com/multi-line-button-widget-for-elementor/">Multi Line Button Widget for Elementor (Free)</a> - A button with more than one line of text and an optional icon.</li>
358
  <li><a href="https://unlimited-elements.com/toggle-text-button-widget-for-elementor/">Toggle Text Button Widget for Elementor (Free)</a></li>
359
  <li><a href="https://unlimited-elements.com/parellogram-button-widget-for-elementor/">Parallelogram Button Widget for Elementor (Free)</a></li>
360
  <li><a href="https://unlimited-elements.com/icon-pointer-button-widget-for-elementor/">Icon Pointer Button Widget for Elementor (Free)</a></li>
379
  <li><a href="https://unlimited-elements.com/dual-color-heading-widget-for-elementor/">Dual Color Heading Widget for Elementor (Free)</a></li>
380
  <li><a href="https://unlimited-elements.com/stroke-text-effect-widget-for-elementor/">Stroke Text Effect Widget for Elementor (Free)</a></li>
381
  <li><a href="https://unlimited-elements.com/gradient-text-effect-for-elementor/">Gradient Text Effect Widget for Elementor (Free)</a></li>
382
+ <li><a href="https://unlimited-elements.com/text-marquee-for-elementor/">Text Marquee Effect Widget for Elementor (Free)</a> - The Text Marquee widget is a scrolling piece of text displayed horizontally across your Elementor webpage.</li>
383
  <li><a href="https://unlimited-elements.com/futuristic-typing-text-effect-widget-for-elementor/">Futuristic Typing Text Effect Widget for Elementor (Pro)</a></li>
384
  <li><a href="https://unlimited-elements.com/animated-split-text-widget-for-elementor/">Animated Split Text Widget for Elementor (Pro)</a></li>
385
  <li><a href="https://unlimited-elements.com/sideways-vertical-text-widget-for-elementor">Sideways Vertical Text Widget for Elementor (Pro)</a></li>
459
 
460
 
461
 
462
+
463
  == Installation ==
464
 
465
  Note : This plugin works with Elementor. Make sure you have [Elementor](https://wordpress.org/plugins/elementor/) installed.
470
 
471
  == Changelog ==
472
 
473
+ version 1.5.11: 2022-04-13
474
+
475
+ * Feature: made option to put elementor post_content inside post widget if the post made by elementor
476
+ * Feature: added additional fields to getPostAuthor function like avatar url and author meta
477
+ * Feature: show the "no posts" message with filters in post list / grid
478
+ * Feature: add background location (back/front) to background widgets
479
+ * Feature: done option to get post parent with the posts in posts selection
480
+ * Fix: set prices display in woocommerce widgets including tax
481
+ * Fix: fixed editor js files didn't loaded bug
482
+ * Fix: fixed css output with dynamic template and inline css mode
483
+ * Fix: fixed the ajax pagination that now works with post based gallery widget
484
+ * Fix: fixed filters scripts loading before jquery in js
485
+ * Fix: allow to select empty terms in term selection control
486
+ * Change: set default values of responsive number / slider / dropdown controls to desktop default values
487
+
488
+
489
  version 1.5.10: 2022-04-04
490
 
491
  * Fix: fixed title and description source in gallery source selection
1621
 
1622
  = What if i update to the Premium version after using the Free version? =
1623
 
1624
+ Your existing elements/content will work with the premium version. So you won’t lose your any of your hard work.
1625
 
1626
  = Can i get a refund? =
1627
 
release_log.txt CHANGED
@@ -1,4 +1,22 @@
1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
  version 1.5.10:
3
 
4
  -bug fix: fixed title and description source in gallery source selection
@@ -8,7 +26,6 @@ version 1.5.10:
8
  -feature: added option for second items html refresh in ajax filters
9
 
10
 
11
-
12
  version 1.5.9:
13
 
14
  -bug fix: fixed simple meta output for post list
1
 
2
+ version 1.5.11:
3
+
4
+ -feature: made option to put elementor post_content inside post widget if the post made by elementor
5
+ -feature: added additional fields to getPostAuthor function like avatar url and author meta
6
+ -bug fix: set prices display in woocommerce widgets including tax
7
+ -bug fix: fixed editor js files didn't loaded bug
8
+ -bug fix: fixed css output with dynamic template and inline css mode
9
+ -feature: done option to get post parent with the posts in posts selection
10
+ -bug fix: fixed the ajax pagination that now works with post based gallery widget
11
+ -bug fix: fixed filters scripts loading before jquery in js
12
+ -change: set default values of responsive number / slider / dropdown controls to desktop default values
13
+ -bug fix: allow to select empty terms in term selection control
14
+ -feature: show the "no posts" message with filters in post list / grid
15
+ -feature: add background location (back/front) to background widgets
16
+
17
+
18
+
19
+
20
  version 1.5.10:
21
 
22
  -bug fix: fixed title and description source in gallery source selection
26
  -feature: added option for second items html refresh in ajax filters
27
 
28
 
 
29
  version 1.5.9:
30
 
31
  -bug fix: fixed simple meta output for post list
unlimited_elements.php CHANGED
@@ -4,7 +4,7 @@
4
  * Plugin URI: http://unlimited-elements.com
5
  * Description: Unlimited Elements - Huge Widgets Pack for Elementor Website Builder, with html/css/js widget creator and editor
6
  * Author: Unlimited Elements
7
- * Version: 1.5.10
8
  * Author URI: http://unlimited-elements.com
9
  * Text Domain: unlimited-elements-for-elementor
10
  * Domain Path: /languages
4
  * Plugin URI: http://unlimited-elements.com
5
  * Description: Unlimited Elements - Huge Widgets Pack for Elementor Website Builder, with html/css/js widget creator and editor
6
  * Author: Unlimited Elements
7
+ * Version: 1.5.11
8
  * Author URI: http://unlimited-elements.com
9
  * Text Domain: unlimited-elements-for-elementor
10
  * Domain Path: /languages
views/objects/addon_view_childparams.class.php CHANGED
@@ -777,6 +777,21 @@ function {{uc_id}}_start(){
777
  return($arrParams);
778
  }
779
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
780
  /**
781
  * get custom fields text
782
  */
@@ -872,9 +887,12 @@ function {{uc_id}}_start(){
872
  */
873
  private function getChildParams_post_addAuthor($arrParams){
874
 
875
- $strCode = "";
876
  $strCode .= "{% set author = getPostAuthor([param_prefix].author_id) %}\n\n";
877
- $strCode .= "{{author.id}} {{author.name}} {{author.email}}\n";
 
 
 
878
 
879
  $arrParams[] = $this->createChildParam("getPostAuthor", null, array("raw_insert_text"=>$strCode));
880
 
@@ -1160,6 +1178,7 @@ function {{uc_id}}_start(){
1160
  $arrParams = $this->getChildParams_post_addAuthor($arrParams);
1161
  $arrParams = $this->getChildParams_post_addPostMeta($arrParams);
1162
  $arrParams = $this->getChildParams_post_putHtmlData($arrParams);
 
1163
 
1164
  $isWooAdded = false;
1165
 
777
  return($arrParams);
778
  }
779
 
780
+ /**
781
+ * get number of post comments
782
+ */
783
+ private function getChildParams_post_numComments($arrParams){
784
+
785
+ $strText = "\n";
786
+ $strText .= "{% set num_comments = ucfunc(\"get_num_comments\", [param_prefix].id) %} \n\n";
787
+ $strText .= "{{num_comments}} \n\n";
788
+
789
+ $arrParams[] = $this->createChildParam("num_comments", null, array("raw_insert_text"=>$strText));
790
+
791
+ return($arrParams);
792
+ }
793
+
794
+
795
  /**
796
  * get custom fields text
797
  */
887
  */
888
  private function getChildParams_post_addAuthor($arrParams){
889
 
890
+ $strCode = "{# Use this function this way: getPostAuthor(username, getMeta=true/false, getAvatar=true/false) #}\n\n";
891
  $strCode .= "{% set author = getPostAuthor([param_prefix].author_id) %}\n\n";
892
+ $strCode .= "{{author.id}} {{author.name}} {{author.email}}\n\n";
893
+ $strCode .= "{% set author2 = getPostAuthor([param_prefix].author_id,true,true) %}\n\n";
894
+ $strCode .= "<img src=\"{{author2.avatar_url|raw}}\">\n\n";
895
+ $strCode .= "{{printVar(author2)}}\n";
896
 
897
  $arrParams[] = $this->createChildParam("getPostAuthor", null, array("raw_insert_text"=>$strCode));
898
 
1178
  $arrParams = $this->getChildParams_post_addAuthor($arrParams);
1179
  $arrParams = $this->getChildParams_post_addPostMeta($arrParams);
1180
  $arrParams = $this->getChildParams_post_putHtmlData($arrParams);
1181
+ $arrParams = $this->getChildParams_post_numComments($arrParams);
1182
 
1183
  $isWooAdded = false;
1184