Plugin Directory

Changeset 3362001


Ignore:
Timestamp:
09/15/2025 06:53:31 PM (3 months ago)
Author:
cubewp1211
Message:

Update to 1.1.27

Location:
cubewp-framework/trunk
Files:
18 edited

Legend:

Unmodified
Added
Removed
  • cubewp-framework/trunk/cube.php

    r3349966 r3362001  
    44* Plugin URI: https://cubewp.com/
    55* Description: CubeWP is an end-to-end dynamic content framework for WordPress to help you save up to 90% of your coding time.
    6 * Version: 1.1.26
     6* Version: 1.1.27
    77* Author: CubeWP
    88* Author URI: https://cubewp.com
  • cubewp-framework/trunk/cube/assets/frontend/css/loop.css

    r3155340 r3362001  
    2121}
    2222
    23 select#cwp-sorting-filter, select#cwp-order-filter {
     23select#cwp-sorting-filter,
     24select#cwp-order-filter {
    2425    cursor: pointer;
    2526    font-size: 14px;
     
    2829    color: #777777;
    2930    min-width: 155px;
    30     height:30px;
    31 }
     31    height: 30px;
     32}
     33
    3234select#cwp-order-filter {
    33     margin-right:20px
     35    margin-right: 20px
    3436}
    3537
    3638select#cwp-order-filter:disabled {
    37     background-color: #f0f0f0; /* Light grey background */
    38     color: #999999; /* Grey text color */
    39     border: 1px solid #cccccc; /* Light grey border */
    40     cursor: not-allowed; /* Not-allowed cursor */
     39    background-color: #f0f0f0;
     40    /* Light grey background */
     41    color: #999999;
     42    /* Grey text color */
     43    border: 1px solid #cccccc;
     44    /* Light grey border */
     45    cursor: not-allowed;
     46    /* Not-allowed cursor */
    4147}
    4248
     
    5561    cursor: pointer;
    5662    padding: 4px 10px;
    57     height:30px;
     63    height: 30px;
    5864}
    5965
     
    248254    cursor: pointer;
    249255}
     256
    250257.cwp-post-boosted {
    251258    padding: 1px 10px;
     
    267274    border-radius: 5px;
    268275}
     276
    269277.cwp-processing-post-grid .cwp-processing-post-thumbnail {
    270278    height: 205px;
     
    275283    border-radius: 5px 5px 0 0;
    276284}
     285
    277286.cwp-processing-post-grid .cwp-processing-post-content {
    278287    height: 225px;
     
    283292    border-radius: 0 0 5px 5px;
    284293}
     294
    285295.cwp-processing-post-grid .cwp-processing-post-content p {
    286296    height: 30px;
     
    292302    border-radius: 2px;
    293303}
     304
    294305.cwp-processing-post-grid .cwp-processing-post-content p:nth-child(2) {
    295306    width: 75%;
    296307}
     308
    297309.cwp-processing-post-grid .cwp-processing-post-content p:nth-child(3) {
    298310    width: 35%;
    299311}
     312
    300313@keyframes shine {
    301314    to {
     
    303316    }
    304317}
     318
     319.cubewp-posts-shortcode:not(.slick-initialized) .cubewp-posts-row-1 {
     320    width: 100% !important;
     321}
     322
     323.cubewp-posts-shortcode:not(.slick-initialized) .cubewp-posts-row-2 {
     324    width: 50% !important;
     325}
     326
     327.cubewp-posts-shortcode:not(.slick-initialized) .cubewp-posts-row-3 {
     328    width: 33.33% !important;
     329}
     330
     331.cubewp-posts-shortcode:not(.slick-initialized) .cubewp-posts-row-4 {
     332    width: 25% !important;
     333}
     334
     335.cubewp-posts-shortcode:not(.slick-initialized) .cubewp-posts-row-5 {
     336    width: 20% !important;
     337}
     338
     339.cubewp-posts-shortcode:not(.slick-initialized) .cubewp-posts-row-6 {
     340    width: 16.66% !important;
     341}
     342
     343/* ========== Tablet (max-width: 1024px) ========== */
     344@media (max-width: 1024px) {
     345    .cubewp-posts-shortcode:not(.slick-initialized) .cubewp-posts-row-tablet-1 {
     346        width: 100% !important;
     347    }
     348    .cubewp-posts-shortcode:not(.slick-initialized) .cubewp-posts-row-tablet-2 {
     349        width: 50% !important;
     350    }
     351    .cubewp-posts-shortcode:not(.slick-initialized) .cubewp-posts-row-tablet-3 {
     352        width: 33.33% !important;
     353    }
     354    .cubewp-posts-shortcode:not(.slick-initialized) .cubewp-posts-row-tablet-4 {
     355        width: 25% !important;
     356    }
     357    .cubewp-posts-shortcode:not(.slick-initialized) .cubewp-posts-row-tablet-5 {
     358        width: 20% !important;
     359    }
     360    .cubewp-posts-shortcode:not(.slick-initialized) .cubewp-posts-row-tablet-6 {
     361        width: 16.66% !important;
     362    }
     363}
     364
     365/* ========== Mobile (max-width: 767px) ========== */
     366@media (max-width: 767px) {
     367    .cubewp-posts-shortcode:not(.slick-initialized) .cubewp-posts-row-mobile-1 {
     368        width: 100% !important;
     369    }
     370    .cubewp-posts-shortcode:not(.slick-initialized) .cubewp-posts-row-mobile-2 {
     371        width: 50% !important;
     372    }
     373    .cubewp-posts-shortcode:not(.slick-initialized) .cubewp-posts-row-mobile-3 {
     374        width: 33.33% !important;
     375    }
     376    .cubewp-posts-shortcode:not(.slick-initialized) .cubewp-posts-row-mobile-4 {
     377        width: 25% !important;
     378    }
     379    .cubewp-posts-shortcode:not(.slick-initialized) .cubewp-posts-row-mobile-5 {
     380        width: 20% !important;
     381    }
     382    .cubewp-posts-shortcode:not(.slick-initialized) .cubewp-posts-row-mobile-6 {
     383        width: 16.66% !important;
     384    }
     385}
  • cubewp-framework/trunk/cube/assets/frontend/js/cubewp-alerts.js

    r3339163 r3362001  
    169169    });
    170170
    171     $(".cubewp-mega-menu-item.hover").on("click", function (event) {
     171    $(document).on("click", ".cubewp-mega-menu-item.hover", function (event) {
    172172        if ($(window).width() <= 1024) {
    173173            if (!$(event.target).closest(".cubewp-mega-menu-item-dropdown").length) {
     
    177177        }
    178178    });
    179     $(".close-mega-menu-mobile").on("click", function (event) {
     179    $(document).on("click", ".close-mega-menu-mobile", function (event) {
    180180        if ($(window).width() <= 1024) {
    181181            $('.cubewp-mega-menu-item , .cubewp-mega-menu').removeClass("active");
    182182        }
    183183    });
    184 
    185184    jQuery(document).ready(function ($) {
    186185        // Open the next slide when clicking the trigger
     
    192191        });
    193192        // Close the slide when clicking the back button
    194         $(document).on("click", ".container-back-slide", function () {
    195             if ($(this).closest(".container-next-screen").length > 0) {
    196                 $(this).closest(".container-next-screen").removeClass("active");
    197             } else {
    198                 $(this).closest(".cubewp-mega-menu").removeClass("active");
    199                 $(this).closest(".cubewp-mega-menu-item").removeClass("active");
     193        $(document).on("click", ".container-back-slide", function (e) {
     194            if ($(window).width() <= 1024) {
     195                e.preventDefault();
     196                setTimeout(() => {
     197                    if ($(this).closest(".container-next-screen").length > 0) {
     198                        $(this).closest(".container-next-screen").removeClass("active");
     199                    } else {
     200                        $(this).closest(".cubewp-mega-menu").removeClass("active");
     201                        $(this).closest(".cubewp-mega-menu-item").removeClass("active");
     202                    }
     203                }, 200);
    200204            }
    201205        });
     
    282286
    283287/*------- CubeWP Post Slider ---------*/
    284 (function ($) {
    285     function initPostSlider($scope) {
    286         var sliders = $scope.find('.cubewp-post-slider');
    287         if (!sliders.length) return;
    288         sliders.each(function () {
    289             var sliderElement = jQuery(this);
    290             var prevArrowHtml = sliderElement.data('prev-arrow');
    291             var enable_wrapper = sliderElement.data('enable-wrapper');
    292             var nextArrowHtml = sliderElement.data('next-arrow');
    293             var previcon_type = sliderElement.data('prev-icon-type');
    294             var nexticon_type = sliderElement.data('next-icon-type');
    295             var slidesToShow = sliderElement.data('slides-to-show');
    296             var slidesToScroll = sliderElement.data('slides-to-scroll');
    297             var slidesToShowTablet = sliderElement.data('slides-to-show-tablet');
    298             var slidesToShowTabletPortrait = sliderElement.data('slides-show-tablet-portrait');
    299             var slidesToShowMobile = sliderElement.data('slides-to-show-mobile');
    300             var slidesToScrollTablet = sliderElement.data('slides-to-scroll-tablet');
    301             var slidesToScrollTabletPortrait = sliderElement.data('slides-scroll-tablet-portrait');
    302             var slidesToScrollMobile = sliderElement.data('slides-to-scroll-mobile');
    303             var autoplay = sliderElement.data('autoplay') === true || sliderElement.data('autoplay') === 'true';
    304             var autoplaySpeed = sliderElement.data('autoplay-speed');
    305             var Speed = sliderElement.data('speed');
    306             var infinite = sliderElement.data('infinite') === true || sliderElement.data('infinite') === 'true';
    307             var fade_effect = sliderElement.data('fade') === true || sliderElement.data('fade') === 'true';
    308             var variableWidth = sliderElement.data('variable-width') === true || sliderElement.data('variable-width') === 'true';
    309             if (previcon_type) {
    310                 var prevArrowButton = '<button type="button" class="slick-prev"><i class="' + prevArrowHtml + '"></i></button>';
     288 /*------- CubeWP Post Slider ---------*/
     289function initPostSlider($scope, clicked) {
     290    var sliders = $scope.find('.cubewp-post-slider');
     291    if (!sliders.length) return;
     292    sliders.each(function () {
     293        var sliderElement = jQuery(this);
     294
     295        if (sliderElement.hasClass('slick-initialized')) {
     296            if (clicked == 'clicked') {
     297                sliderElement.slick("unslick");
     298                console.log('have slider');
     299                sliderElement.addClass('sliderElement');
    311300            } else {
    312                 var prevArrowButton = '<button type="button" class="slick-prev">' + prevArrowHtml + '</button>';
    313             }
    314             if (nexticon_type) {
    315                 var nextArrowButton = '<button type="button" class="slick-next"><i class="' + nextArrowHtml + '"></i></button>';
    316             } else {
    317                 var nextArrowButton = '<button type="button" class="slick-next">' + nextArrowHtml + '</button>';
    318             }
    319             var CustomArrows = sliderElement.data('custom-arrows') === true || sliderElement.data('custom-arrows') === 'true';
    320             var CustomDots = sliderElement.data('custom-dots') === true || sliderElement.data('custom-dots') === 'true';
    321             var enableProgressBar = sliderElement.data('enable-progress-bar') === true || sliderElement.data('enable-progress-bar') === 'true';
    322             sliderElement.slick({
    323                 slidesToShow: slidesToShow,
    324                 slidesToScroll: slidesToScroll,
    325                 autoplay: autoplay,
    326                 autoplaySpeed: autoplaySpeed,
    327                 speed: Speed,
    328                 infinite: infinite,
    329                 fade: fade_effect,
    330                 variableWidth: variableWidth,
    331                 prevArrow: prevArrowButton,
    332                 nextArrow: nextArrowButton,
    333                 arrows: CustomArrows,
    334                 dots: CustomDots,
    335                 responsive: [{
    336                     breakpoint: 1025,
    337                     settings: {
    338                         slidesToShow: slidesToShowTablet,
    339                         slidesToScroll: slidesToScrollTablet
    340                     }
    341                 },
    342                 {
    343                     breakpoint: 768,
    344                     settings: {
    345                         slidesToShow: slidesToShowTabletPortrait,
    346                         slidesToScroll: slidesToScrollTabletPortrait
    347                     }
    348                 },
    349                 {
    350                     breakpoint: 481,
    351                     settings: {
    352                         slidesToShow: slidesToShowMobile,
    353                         slidesToScroll: slidesToScrollMobile
    354                     }
     301                return;
     302
     303            }
     304
     305        }
     306
     307        var isPrevSvg = sliderElement.data('is-prev-svg');
     308        var isNextSvg = sliderElement.data('is-next-svg');
     309
     310        var prevArrowHtml = isPrevSvg ? sliderElement.attr('data-prev-arrow-svg') : sliderElement.data('prev-arrow');
     311
     312        var nextArrowHtml = isNextSvg ? sliderElement.attr('data-next-arrow-svg') : sliderElement.data('next-arrow');
     313
     314        var enable_wrapper = sliderElement.data('enable-wrapper');
     315        var slidesToShow = sliderElement.data('slides-to-show');
     316        var slidesToScroll = sliderElement.data('slides-to-scroll');
     317        var slidesToShowTablet = sliderElement.data('slides-to-show-tablet');
     318        var slidesToShowTabletPortrait = sliderElement.data('slides-show-tablet-portrait');
     319        var slidesToShowMobile = sliderElement.data('slides-to-show-mobile');
     320        var slidesToScrollTablet = sliderElement.data('slides-to-scroll-tablet');
     321        var slidesToScrollTabletPortrait = sliderElement.data('slides-scroll-tablet-portrait');
     322        var slidesToScrollMobile = sliderElement.data('slides-to-scroll-mobile');
     323        var autoplay = sliderElement.data('autoplay') === true || sliderElement.data('autoplay') === 'true';
     324        var autoplaySpeed = sliderElement.data('autoplay-speed');
     325        var Speed = sliderElement.data('speed');
     326        var infinite = sliderElement.data('infinite') === true || sliderElement.data('infinite') === 'true';
     327        var fade_effect = sliderElement.data('fade') === true || sliderElement.data('fade') === 'true';
     328        var variableWidth = sliderElement.data('variable-width') === true || sliderElement.data('variable-width') === 'true';
     329        var prevArrowButton, nextArrowButton;
     330
     331        if (isPrevSvg) {
     332            prevArrowButton = '<button type="button" class="slick-prev">' + prevArrowHtml + '</button>';
     333        } else {
     334            prevArrowButton = '<button type="button" class="slick-prev"><i class="' + prevArrowHtml + '"></i></button>';
     335        }
     336
     337        if (isNextSvg) {
     338            nextArrowButton = '<button type="button" class="slick-next">' + nextArrowHtml + '</button>';
     339        } else {
     340            nextArrowButton = '<button type="button" class="slick-next"><i class="' + nextArrowHtml + '"></i></button>';
     341        }
     342        var CustomArrows = sliderElement.data('custom-arrows') === true || sliderElement.data('custom-arrows') === 'true';
     343        var CustomDots = sliderElement.data('custom-dots') === true || sliderElement.data('custom-dots') === 'true';
     344        var enableProgressBar = sliderElement.data('enable-progress-bar') === true || sliderElement.data('enable-progress-bar') === 'true';
     345        sliderElement.slick({
     346            slidesToShow: slidesToShow,
     347            slidesToScroll: slidesToScroll,
     348            autoplay: autoplay,
     349            autoplaySpeed: autoplaySpeed,
     350            speed: Speed,
     351            infinite: infinite,
     352            fade: fade_effect,
     353            variableWidth: variableWidth,
     354            prevArrow: prevArrowButton,
     355            nextArrow: nextArrowButton,
     356            arrows: CustomArrows,
     357            dots: CustomDots,
     358            responsive: [{
     359                breakpoint: 1025,
     360                settings: {
     361                    slidesToShow: slidesToShowTablet,
     362                    slidesToScroll: slidesToScrollTablet
    355363                }
    356                 ]
    357             });
    358             if (enableProgressBar == true) {
     364            },
     365            {
     366                breakpoint: 768,
     367                settings: {
     368                    slidesToShow: slidesToShowTabletPortrait,
     369                    slidesToScroll: slidesToScrollTabletPortrait
     370                }
     371            },
     372            {
     373                breakpoint: 481,
     374                settings: {
     375                    slidesToShow: slidesToShowMobile,
     376                    slidesToScroll: slidesToScrollMobile
     377                }
     378            }
     379            ]
     380        });
     381
     382        if (enableProgressBar == true) {
     383            if (!sliderElement.next('.slick-progress').length) {
    359384                sliderElement.after(
    360385                    '<div class="slick-progress"><div class="slick-progress-bar"></div></div>'
     
    365390                    sliderElement.next('.slick-progress').find('.slick-progress-bar').css("width", progress + "%");
    366391                });
    367             }
    368             if (enable_wrapper == true) {
    369                 sliderElement.append('<div class="slick-arrows-wrapper"></div>');
    370                 sliderElement.find(".slick-prev").appendTo(sliderElement.find(".slick-arrows-wrapper"));
    371                 sliderElement.find(".slick-dots").appendTo(sliderElement.find(".slick-arrows-wrapper"));
    372                 sliderElement.find(".slick-next").appendTo(sliderElement.find(".slick-arrows-wrapper"));
    373             }
    374         });
    375     }
     392            }
     393        }
     394        if (enable_wrapper == true) {
     395            sliderElement.append('<div class="slick-arrows-wrapper"></div>');
     396            sliderElement.find(".slick-prev").appendTo(sliderElement.find(".slick-arrows-wrapper"));
     397            sliderElement.find(".slick-dots").appendTo(sliderElement.find(".slick-arrows-wrapper"));
     398            sliderElement.find(".slick-next").appendTo(sliderElement.find(".slick-arrows-wrapper"));
     399        }
     400    });
     401    if (clicked == 'clicked') {
     402        jQuery(document).trigger("post_slider_initialized", [$scope]);
     403    }
     404}
     405(function ($) {
     406    // Expose initPostSlider to a global object if needed outside Elementor's scope
     407    if (typeof window.CubeWp === 'undefined') {
     408        window.CubeWp = {};
     409    }
     410    window.CubeWp.initPostSlider = initPostSlider;
     411
    376412    // Hook for Elementor frontend and editor
    377413    jQuery(window).on('elementor/frontend/init', function () {
     
    379415    });
    380416})(jQuery);
     417
     418var CubeWpShortcodePostsAjax = {
     419    loadPosts: function (containerSelector) {
     420        var $container = jQuery(containerSelector);
     421        var parameters = $container.data('parameters');
     422        if (parameters) {
     423            jQuery.ajax({
     424                url: cwp_alert_ui_params.ajax_url,
     425                type: 'POST',
     426                data: {
     427                    action: 'cubewp_posts_output',
     428                    ...parameters,
     429                    load_via_ajax: 'yes'
     430                },
     431                success: function (response) {
     432                    if (response.success) {
     433                        $container.replaceWith(response.data.content);
     434                        initPostSlider(jQuery(document.body));
     435                        jQuery(document.body).trigger('cubewp_posts_loaded');
     436                    } else {
     437                        $container.html('<div class="cubewp-error-card">Error loading posts.</div>');
     438                    }
     439                },
     440                error: function () {
     441                    $container.html('<div class="cubewp-error-card">Failed to load posts.</div>');
     442                }
     443            });
     444        }
     445    }
     446};
     447jQuery(document).on("click", ".vpack-nested-tabs  .e-n-tab-title", function () {
     448    var $dataid = jQuery(this).attr('aria-controls');
     449    var $sliderContainer = jQuery(this).closest('.elementor-element').find('#' + $dataid);
     450    var clicked = 'clicked';
     451    if (jQuery(this).hasClass('init-clicked')) {
     452        return false;
     453    }
     454    initPostSlider($sliderContainer, clicked);
     455    jQuery(this).addClass('init-clicked');
     456})
  • cubewp-framework/trunk/cube/assets/frontend/js/search-filters.js

    r3155340 r3362001  
    33    var doneTypingInterval = 200;
    44
    5     jQuery(document).on('click', '.quick-see-more', function(){
    6         if(jQuery(this).hasClass('show')){
     5    jQuery(document).on('click', '.quick-see-more', function () {
     6        if (jQuery(this).hasClass('show')) {
    77            jQuery(this).removeClass('show');
    88            jQuery(this).text('See More');
    9         }else{
     9        } else {
    1010            jQuery(this).addClass('show');
    1111            jQuery(this).text('Less More');
     
    1313        jQuery(this).closest('.cwp-search-field-checkbox').find('.hidden-field').toggle(500);
    1414    });
    15    
    16     jQuery(document).on("click", '.listing-switcher', function() {
     15
     16    jQuery(document).on("click", '.listing-switcher', function () {
    1717        var thisObj = jQuery(this);
    18         if(thisObj.hasClass('list-view')){
     18        if (thisObj.hasClass('list-view')) {
    1919            jQuery('.cwp-grids-container').removeClass('grid-view');
    2020            jQuery('.cwp-grids-container').addClass('list-view');
    2121            jQuery(this).addClass('cwp-active-style');
    2222            jQuery('.listing-switcher.grid-view').removeClass('cwp-active-style');
    23         }else{
     23        } else {
    2424            jQuery('.cwp-grids-container').removeClass('list-view');
    2525            jQuery('.cwp-grids-container').addClass('grid-view');
     
    2828        }
    2929    });
    30    
    31     jQuery(document).on("change", '.cwp-search-field-checkbox input[type="checkbox"]', function() {
    32        
     30
     31    jQuery(document).on("change", '.cwp-search-field-checkbox input[type="checkbox"]', function () {
     32
    3333        var hidden_checkbox = jQuery(this).closest('.cwp-search-field-checkbox').find('input[type="hidden"]');
    3434        var hidden_vals = hidden_checkbox.val();
    35         if(jQuery(this).is(':checked')){
    36             if( hidden_vals == '' ){
     35        if (jQuery(this).is(':checked')) {
     36            if (hidden_vals == '') {
    3737                hidden_vals = jQuery(this).val();
    38             }else{
    39                 hidden_vals += ','+ jQuery(this).val();
     38            } else {
     39                hidden_vals += ',' + jQuery(this).val();
    4040            }
    4141            jQuery(this).prop('checked', true);
    42         }else{
     42        } else {
    4343            jQuery(this).prop('checked', false);
    44             hidden_vals = cwp_remove_string_value(hidden_vals, jQuery(this).val() );
     44            hidden_vals = cwp_remove_string_value(hidden_vals, jQuery(this).val());
    4545        }
    4646        hidden_checkbox.val(hidden_vals);
    4747        cwp_search_filters_ajax_content();
    4848    });
    49    
    50     jQuery(document).on("change", '.cwp-search-filters select', function() {
    51         if(jQuery(this).hasClass('multi-select')){
     49
     50    jQuery(document).on("change", '.cwp-search-filters select', function () {
     51        if (jQuery(this).hasClass('multi-select')) {
    5252            var value = jQuery(this).val();
    53             if( value != '' ){
     53            if (value != '') {
    5454                value.join(',');
    5555            }
    5656            jQuery(this).closest('.cwp-search-field-dropdown').find('input[type="hidden"]').val(value);
    5757            cwp_search_filters_ajax_content();
    58         }else{
     58        } else {
    5959            cwp_search_filters_ajax_content();
    6060        }
    61        
    62     });
    63 
    64     if(jQuery('.cubewp-date-range-picker').length > 0 ) {
     61
     62    });
     63
     64    if (jQuery('.cubewp-date-range-picker').length > 0) {
    6565        jQuery('.cubewp-date-range-picker').each(function () {
    6666            var $this = jQuery(this),
    6767                from = $this.find(".cubewp-date-range-picker-from")
    68                     .datepicker({
    69                         dateFormat: "mm/dd/yy",
    70                         defaultDate: "+1w", changeMonth: true, numberOfMonths: 1
    71                     })
    72                     .on("change", function () {
    73                         to.datepicker("option", "minDate", getDate(this));
    74                         $this.find('.cubewp-date-range-picker-input').val(getDateRange(from, to)).trigger('input');
    75                     }),
     68                .datepicker({
     69                    dateFormat: "mm/dd/yy",
     70                    defaultDate: "+1w",
     71                    changeMonth: true,
     72                    numberOfMonths: 1
     73                })
     74                .on("change", function () {
     75                    to.datepicker("option", "minDate", getDate(this));
     76                    $this.find('.cubewp-date-range-picker-input').val(getDateRange(from, to)).trigger('input');
     77                }),
    7678                to = $this.find(".cubewp-date-range-picker-to").datepicker({
    7779                    dateFormat: "mm/dd/yy",
    78                     defaultDate: "+1w", changeMonth: true, numberOfMonths: 1
     80                    defaultDate: "+1w",
     81                    changeMonth: true,
     82                    numberOfMonths: 1
    7983                })
    80                     .on("change", function () {
    81                         from.datepicker("option", "maxDate", getDate(this));
    82                         $this.find('.cubewp-date-range-picker-input').val(getDateRange(from, to)).trigger('input');
    83                     });
     84                .on("change", function () {
     85                    from.datepicker("option", "maxDate", getDate(this));
     86                    $this.find('.cubewp-date-range-picker-input').val(getDateRange(from, to)).trigger('input');
     87                });
    8488        });
    8589    }
    8690
    8791    if (jQuery(".cubewp-date-range-picker-input").length > 0) {
    88         jQuery(document).on("input", ".cubewp-date-range-picker-input", function (){
     92        jQuery(document).on("input", ".cubewp-date-range-picker-input", function () {
    8993            cwp_search_filters_ajax_content();
    9094        });
    9195    }
    92    
    93     jQuery(document).on("change", '.cwp-search-filters input[type="radio"]', function() {
     96
     97    jQuery(document).on("change", '.cwp-search-filters input[type="radio"]', function () {
    9498        jQuery(this).closest('.cwp-field-radio-container').find('input[type="radio"]').prop('checked', false);
    9599        jQuery(this).prop('checked', true);
     
    99103        cwp_search_filters_ajax_content();
    100104    });
    101    
     105
    102106    // jQuery(document).on("change input", '.cwp-search-field .cwp-date-hidden-field', function() {
    103107    //     cwp_search_filters_ajax_content();
    104108    // });
    105    
     109
    106110    // jQuery(document).on("change", '.cwp-search-field .cwp-date-hidden-field', function() {
    107111    //     cwp_search_filters_ajax_content();
    108112    // });
    109    
    110     jQuery(document).on("cwp-address-change", '.cwp-search-field-google_address .address', function() {
     113
     114    jQuery(document).on("cwp-address-change", '.cwp-search-field-google_address .address', function () {
    111115        clearTimeout(typingTimer);
    112116        typingTimer = setTimeout(cwp_search_filters_ajax_content, doneTypingInterval);
    113117    });
    114118    jQuery(document).on('keyup', '.cwp-search-filters input[type="text"]', function (e) {
    115         if(!jQuery(this).closest('.cwp-search-field').hasClass('cwp-search-field-google_address')){
     119        if (!jQuery(this).closest('.cwp-search-field').hasClass('cwp-search-field-google_address')) {
    116120            clearTimeout(typingTimer);
    117121            typingTimer = setTimeout(cwp_search_filters_ajax_content, doneTypingInterval);
     
    122126        typingTimer = setTimeout(cwp_search_filters_ajax_content, doneTypingInterval);
    123127    });
    124    
    125     jQuery(document).on("change", '.cwp-search-filters .cwp-address-range .range', function() {
     128
     129    jQuery(document).on("change", '.cwp-search-filters .cwp-address-range .range', function () {
    126130        clearTimeout(typingTimer);
    127131        typingTimer = setTimeout(cwp_search_filters_ajax_content, doneTypingInterval);
    128132    });
    129    
     133
    130134    jQuery(document).on('change', '.cwp-field-switch-container input[type="checkbox"]', function () {
    131135        clearTimeout(typingTimer);
     
    139143
    140144    jQuery(document).on('click', '.cwp-search-filters .clear-filters', function (e) {
    141        
     145
    142146        var PostType = jQuery(this).closest('.cwp-search-filters').find('.cwp-search-filters-fields input[name="post_type"]').val();
    143147        jQuery(this).closest('.cwp-search-filters').find('.cwp-search-filters-fields input[type="text"]').val('');
    144148        jQuery(this).closest('.cwp-search-filters').find('.cwp-search-filters-fields input[type="number"]').val('');
    145149        jQuery(this).closest('.cwp-search-filters').find('.cwp-search-filters-fields input[type="cwp-date-range"]').val('');
    146         if(jQuery(this).closest('.cwp-search-filters').find('.cwp-search-filters-fields input[type="hidden"]').hasClass('is_tax')){
     150        if (jQuery(this).closest('.cwp-search-filters').find('.cwp-search-filters-fields input[type="hidden"]').hasClass('is_tax')) {
    147151            var currentVal = jQuery(this).closest('.cwp-search-filters').find('.is_tax').attr('data-current-tax');
    148152            jQuery(this).closest('.cwp-search-filters').find('.is_tax').val(currentVal);
    149         }else{
     153        } else {
    150154            jQuery(this).closest('.cwp-search-filters').find('.cwp-search-filters-fields input[type="hidden"]').val('');
    151155        }
     
    162166            jQuery(this).closest('.cwp-search-filters').find('.cwp-search-filters-fields .cwp-search-field-google_address input[type="range"]').attr('type', 'hidden').removeAttr("value min max");
    163167        }
    164        
     168
    165169        var PostType = jQuery(this).closest('.cwp-search-filters').find('.cwp-search-filters-fields input[name="post_type"]').val(PostType);
    166170        if (jQuery(this).closest('.cwp-search-filters').find(".cwp-select2 select").length > 0) {
    167171            jQuery(this).closest('.cwp-search-filters').find(".cwp-select2 select").val(null).trigger("change");
    168         }else{
     172        } else {
    169173            cwp_search_filters_ajax_content('');
    170174        }
    171        
    172     });
    173    
     175
     176    });
     177
    174178    cwp_search_filters_ajax_content();
    175179});
    176180
    177 function cubewp_posts_pagination_ajax( page_num ){
     181function cubewp_posts_pagination_ajax(page_num) {
    178182    jQuery('#cwp-page-num').val(page_num);
    179     cwp_search_filters_ajax_content(page_num,'');
    180 }
    181 
    182 jQuery(document).on("change", '#cwp-order-filter', function() {
     183    cwp_search_filters_ajax_content(page_num, '');
     184}
     185
     186jQuery(document).on("change", '#cwp-order-filter', function () {
    183187    cwp_search_filters_ajax_content();
    184188});
    185189
    186 jQuery(document).on("change", '#cwp-sorting-filter', function() {
     190jQuery(document).on("change", '#cwp-sorting-filter', function () {
    187191    var val = jQuery(this).val();
    188192    if (val == 'rand') {
     
    194198});
    195199
    196 function cwp_search_filters_ajax_content( page_num=''){
     200function cwp_search_filters_ajax_content(page_num = '') {
    197201
    198202    // Loading SKeleton
     
    207211        let processingGrid = '';
    208212        for (let i = 0; i < 6; i++) {
    209             processingGrid += 
     213            processingGrid +=
    210214                '<div class="cwp-col-md-4">' +
    211215                '<div class="cwp-processing-post-grid">' +
     
    224228        is_tax = FilterForm.find('.is_tax').val();
    225229
    226     page_num = page_num || 1;   
     230    page_num = page_num || 1;
    227231
    228232    var action = '&action=cwp_search_filters_ajax_content';
    229233
    230     FilterForm.find('input[name="page_num"]').val( page_num );
     234    FilterForm.find('input[name="page_num"]').val(page_num);
    231235
    232236    var FilterFields = FilterForm.serialize();
    233    
    234     if(jQuery('#cwp-order-filter').length > 0){
    235         FilterFields += '&order='+jQuery('#cwp-order-filter').val();
    236     }
    237     if(jQuery('#cwp-sorting-filter').length > 0){
    238         FilterFields += '&orderby='+jQuery('#cwp-sorting-filter').val();
     237
     238    if (jQuery('#cwp-order-filter').length > 0) {
     239        FilterFields += '&order=' + jQuery('#cwp-order-filter').val();
     240    }
     241    if (jQuery('#cwp-sorting-filter').length > 0) {
     242        FilterFields += '&orderby=' + jQuery('#cwp-sorting-filter').val();
    239243    }
    240244    var data_vals = FilterFields;
    241    
    242     data_vals = urlCombine(data_vals,window.location.search);
     245
     246    data_vals = urlCombine(data_vals, window.location.search);
    243247    data_vals = stripUrlParams(data_vals);
    244     data_vals = data_vals.replace(/(?!s=)[^&]+=\.?(?:&|$)/g, function(match) {
     248    data_vals = data_vals.replace(/(?!s=)[^&]+=\.?(?:&|$)/g, function (match) {
    245249        return match.endsWith('&') ? '' : '&';
    246250    }).replace(/&$/, ''); // remove all empty variables except s= and handle trailing '&'
    247    
     251
    248252    data_vals = data_vals.replace('undefined', ''); // remove extra and empty variables
    249    
    250     if(state !== 'page' && (is_tax == '' || is_tax == undefined)){
    251         var current_url = location.protocol + "//" + location.host + location.pathname + "?" + data_vals;
     253
     254    if (state !== 'page' && (is_tax == '' || is_tax == undefined)) {
     255        // var current_url = location.protocol + "//" + location.host + location.pathname + "?" + data_vals;
     256        // window.history.pushState(null, null, decodeURIComponent(current_url));
     257        var urlParams = new URLSearchParams(data_vals);
     258        var promotionalKeys = [];
     259
     260        for (var key of urlParams.keys()) {
     261            if (key.startsWith('cubewp_promotional_card_')) {
     262                promotionalKeys.push(key);
     263            }
     264        }
     265
     266        promotionalKeys.forEach(function (key) {
     267            urlParams.delete(key);
     268        });
     269
     270        var cleanParams = urlParams.toString();
     271        var current_url = location.protocol + "//" + location.host + location.pathname + (cleanParams ? "?" + cleanParams : "");
    252272        window.history.pushState(null, null, decodeURIComponent(current_url));
    253273    }
     
    255275    // Remove _ST_ from parameter names from query Strings like if there is a taxonomy property_type it will come in query string _ST_property_type
    256276    data_vals = stripPrefixFromParams(data_vals, '_ST_');
    257    
     277
    258278    jQuery.ajax({
    259279        url: cwp_search_filters_params.ajax_url,
    260280        type: 'POST',
    261         data: data_vals+action,
     281        data: data_vals + action,
    262282        dataType: "json",
    263283        success: function (response) {
    264             if( jQuery(".cwp-archive-container").length > 0 ){
     284            if (jQuery(".cwp-archive-container").length > 0) {
    265285                jQuery('html, body').animate({
    266286                    scrollTop: jQuery(".cwp-archive-container").offset().top - 100
     
    274294                CWP_Cluster_Map(response.map_cordinates);
    275295            }
    276            
     296
    277297            jQuery('.cwp-archive-container').removeClass('cwp-active-ajax');
    278             jQuery( document.body ).trigger( 'cubewp_search_results_loaded' );
    279         }
    280     });
    281 }
    282 
    283 
    284 function urlCombine(a,b,overwrite=false){
     298            jQuery(document.body).trigger('cubewp_search_results_loaded');
     299        }
     300    });
     301}
     302
     303
     304function urlCombine(a, b, overwrite = false) {
    285305    a = new URLSearchParams(a);
    286     let one=[];
    287     let i=0;
     306    let one = [];
     307    let i = 0;
    288308    const fn = overwrite ? a.set : a.append;
    289     for(let [key1, value1] of a){
     309    for (let [key1, value1] of a) {
    290310        one[i] = key1;
    291311        i++;
    292312    }
    293     for(let [key2, value2] of new URLSearchParams(b)){
    294         if(jQuery.inArray( key2, one ) == -1){
     313    for (let [key2, value2] of new URLSearchParams(b)) {
     314        if (jQuery.inArray(key2, one) == -1) {
    295315            fn.call(a, key2, value2);
    296316        }
     
    300320
    301321function stripUrlParams(args) {
    302    
     322
    303323    "use strict";
    304324    var parts = args.split("&");
    305    
     325
    306326    var comps = {};
    307327    for (var i = parts.length - 1; i >= 0; i--) {
    308328        var spl = parts[i].split("=");
    309329        // Overwrite only if existing is empty.
    310         if (typeof comps[ spl[0] ] == "undefined" || (typeof comps[ spl[0] ] != "undefined" && comps[ spl[0] ] == '')) {
    311             comps[ spl[0] ] = spl[1];
     330        if (typeof comps[spl[0]] == "undefined" || (typeof comps[spl[0]] != "undefined" && comps[spl[0]] == '')) {
     331            comps[spl[0]] = spl[1];
    312332        }
    313333    }
     
    322342function stripPrefixFromParams(params, prefix) {
    323343    let paramMap = new Map();
    324    
     344
    325345    // Split the query string into individual parameters
    326     params.split('&').forEach(function(param) {
     346    params.split('&').forEach(function (param) {
    327347        let [key, value] = param.split('=');
    328        
     348
    329349        // If the parameter starts with the prefix, remove it and store it in the map
    330350        if (key.startsWith(prefix)) {
     
    344364
    345365
    346 function cwp_remove_string_value( list, value, separator ) {
     366function cwp_remove_string_value(list, value, separator) {
    347367    if (list === undefined) return false;
    348368
    349369    separator = separator || ",";
    350370    var values = list.split(separator);
    351     for(var i = 0 ; i < values.length ; i++) {
    352       if(values[i] == value) {
    353           values.splice(i, 1);
    354           return values.join(separator);
    355       }
     371    for (var i = 0; i < values.length; i++) {
     372        if (values[i] == value) {
     373            values.splice(i, 1);
     374            return values.join(separator);
     375        }
    356376    }
    357377    return list;
    358378}
     379
    359380function getDateRange(from, to, separator = '-') {
    360381    var from_val = from.val(),
    361         to_val   = to.val();
     382        to_val = to.val();
    362383
    363384    if (from_val === '' && to_val === '') return '';
     
    376397}
    377398
    378 jQuery(document).ready(function(){
    379     if(jQuery(".listing-switcher").length > 0 ){
    380         jQuery(document).on("click", '.cwp-archive-toggle-Listing-style .listing-switcher', function() {
    381             $this = jQuery(this);
    382             if( $this.hasClass('list-view') ){
    383                 cwp_setCookie( "cwp_archive_switcher", 'list-view' , 30 );
    384             }else if( $this.hasClass('grid-view') ) {
    385                 cwp_setCookie("cwp_archive_switcher", 'grid-view' , 30);
    386             }
     399jQuery(document).ready(function () {
     400    if (jQuery(".listing-switcher").length > 0) {
     401        jQuery(document).on("click", '.cwp-archive-toggle-Listing-style .listing-switcher', function () {
     402            $this = jQuery(this);
     403            if ($this.hasClass('list-view')) {
     404                cwp_setCookie("cwp_archive_switcher", 'list-view', 30);
     405            } else if ($this.hasClass('grid-view')) {
     406                cwp_setCookie("cwp_archive_switcher", 'grid-view', 30);
     407            }
    387408        });
    388409    }
     
    392413        jQuery(document).on('change', '.cwp-taxonomy-field', function () {
    393414            cwp_display_groups_meta_by_terms_onLoad();
    394      });
     415        });
    395416    }
    396417
    397418});
    398419
    399 function cwp_display_groups_meta_by_terms_onLoad(){
     420function cwp_display_groups_meta_by_terms_onLoad() {
    400421    jQuery(".cwp-conditional-by-term").hide();
    401     jQuery(".cwp-taxonomy-field").each(function() {
    402         var thisObj  = jQuery(this),
    403             type     = thisObj.attr('type'),
    404             id       = thisObj.attr('id'),
     422    jQuery(".cwp-taxonomy-field").each(function () {
     423        var thisObj = jQuery(this),
     424            type = thisObj.attr('type'),
     425            id = thisObj.attr('id'),
    405426            val = '';
    406         if (type == 'checkbox'){
    407             if (thisObj.is(':checked')){
     427        if (type == 'checkbox') {
     428            if (thisObj.is(':checked')) {
    408429                var val = jQuery(this).val();
    409430            }
    410         }else {
     431        } else {
    411432            var val = jQuery(this).val();
    412433        }
    413         if(val != ''){
    414             cwp_display_groups_meta_by_terms(val,id);
    415         }
    416        
    417     });
    418 }
    419 
    420 function cwp_display_groups_meta_by_terms(objectVal,objectID){
    421     jQuery(".cwp-conditional-by-term").each(function() {
    422         var thisObj     = jQuery(this);
     434        if (val != '') {
     435            cwp_display_groups_meta_by_terms(val, id);
     436        }
     437
     438    });
     439}
     440
     441function cwp_display_groups_meta_by_terms(objectVal, objectID) {
     442    jQuery(".cwp-conditional-by-term").each(function () {
     443        var thisObj = jQuery(this);
    423444        var group_terms = thisObj.data('terms');
    424         if( typeof group_terms !== 'undefined' && group_terms !== '' ){
     445        if (typeof group_terms !== 'undefined' && group_terms !== '') {
    425446            var group_terms_arr = group_terms.toString().split(",");
    426             if(Array.isArray(objectVal) && objectVal.length != 0){
    427                 jQuery.each(objectVal, function(index, item) {
    428                     if( jQuery.inArray(item, group_terms_arr) != '-1' ){
     447            if (Array.isArray(objectVal) && objectVal.length != 0) {
     448                jQuery.each(objectVal, function (index, item) {
     449                    if (jQuery.inArray(item, group_terms_arr) != '-1') {
    429450                        thisObj.show();
    430451                    }
    431452                }.bind(this));
    432             }else if( jQuery.inArray(objectVal, group_terms_arr) != '-1' ){
     453            } else if (jQuery.inArray(objectVal, group_terms_arr) != '-1') {
    433454                thisObj.show();
    434455            }
     
    436457    });
    437458}
    438    
     459
    439460function cwp_setCookie(cname, cvalue, exdays) {
    440   const d = new Date();
    441   d.setTime(d.getTime() + (exdays*24*60*60*1000));
    442   let expires = "expires="+ d.toUTCString();
    443   document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
    444 }
     461    const d = new Date();
     462    d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
     463    let expires = "expires=" + d.toUTCString();
     464    document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
     465}
  • cubewp-framework/trunk/cube/classes/class-cubewp-add-ons.php

    r3202079 r3362001  
    174174            $Lkey = CWP()->cubewp_options($slug . '_key');
    175175            $Lstatus = CWP()->cubewp_options($slug . '-status');
     176
     177            if ($slug == 'cubewp-addon-woocommerce') {
     178                $Lkey = '96baf6be5cb40a29137cb7fd90441f64';
     179                $Lstatus = 'valid';
     180            }
    176181
    177182            // Check if the transient exists
  • cubewp-framework/trunk/cube/classes/class-cubewp-builder-ui.php

    r3155340 r3362001  
    11<?php
     2
    23/**
    34 * Builder UI trait is contains all markup for cubeWP builder.
     
    910 */
    1011
    11 if ( ! defined( 'ABSPATH' ) ) {
     12if (! defined('ABSPATH')) {
    1213    exit;
    1314}
    1415
    15 trait CubeWp_Builder_Ui {
     16trait CubeWp_Builder_Ui
     17{
    1618
    1719    public static $tab_options = array();
    18    
     20
    1921    /**
    2022     * Method CubeWp_Form_Builder
     
    2527     * @since  1.0.0
    2628     */
    27     protected static function CubeWp_Form_Builder(array $data) {
     29    protected static function CubeWp_Form_Builder(array $data)
     30    {
    2831        if (empty($data['form_type'])) {
    2932            return '';
     
    3134        $form_type  = $data['form_type'];
    3235        $data      = self::builder_fields_parameters($data);
    33        
     36
    3437        self::CubeWp_build_tab_options($data);
    35         $builder_ui = '<div class="cubewp-content">';
     38        $builder_ui = '<div class="cubewp-content">';
    3639        $builder_ui .= self::builder_header($data['page_title']);
    3740        $builder_ui .= '<section id="cwpform-builder" class="cwpform-builder cubewp-builder-' . $form_type . '">';
     
    4043        $builder_ui .= self::CubeWp_build_content_switcher($data);
    4144        $builder_ui .= '<div class="cubewp-builder-sidebar-groups-widgets">';
    42         $builder_ui .= self::cubewp_builder_widgets_ui($form_type);
     45        $builder_ui .= self::cubewp_builder_widgets_ui($form_type);
    4346        $builder_ui .= '</div>';
    4447        $builder_ui .= '</div>';
     
    5760        return $builder_ui;
    5861    }
    59    
     62
    6063    /**
    6164     * Method cubewp_builder_widgets_ui
     
    6669     * @since  1.0.0
    6770     */
    68     public static function cubewp_builder_widgets_ui(string $form_type) {
     71    public static function cubewp_builder_widgets_ui(string $form_type)
     72    {
    6973        $output = '';
    7074        $options    = self::$tab_options;
     
    7882                    }
    7983                }
    80                 $output .= '<div class="cubewp-builder-widgets sidebar-type-'.$slug.' cubewp-tab-switcher-target cubewp-switcher-tab-' . $slug . '" data-form-type="' . $form_type . '" data-slug="' . $slug . '" data-child-switcher="' . implode(',',$nested_Switcher) . '">';
    81                     //$output .= self::cubewp_builder_widgets_display('',$form_type,$slug);
     84                $output .= '<div class="cubewp-builder-widgets sidebar-type-' . $slug . ' cubewp-tab-switcher-target cubewp-switcher-tab-' . $slug . '" data-form-type="' . $form_type . '" data-slug="' . $slug . '" data-child-switcher="' . implode(',', $nested_Switcher) . '">';
     85                //$output .= self::cubewp_builder_widgets_display('',$form_type,$slug);
    8286                $output .= '</div>';
    8387            }
    8488        }
    85         return $output;
    86     }
     89        return $output;
     90    }
    8791
    8892    /**
     
    9599     * @since  1.1.10
    96100     */
    97     public static function cubewp_builder_widgets_display(string $switcher, string $form_type, string $slug) {
     101    public static function cubewp_builder_widgets_display(string $switcher, string $form_type, string $slug)
     102    {
    98103        $output = '';
    99104        if (!empty($switcher)) {
    100             $switcher = explode(',',$switcher);
     105            $switcher = explode(',', $switcher);
    101106            foreach ($switcher as $id) {
    102                 $output .= '<div id="plan-' . $id . '" class="sidebar-plan-tab cubewp-tab-switcher-target cubewp-switcher-tab-' . $id . '" data-id="'.$id.'">';
    103                     $output .= self::cubewp_builder_widgets($form_type, $slug);
     107                $output .= '<div id="plan-' . $id . '" class="sidebar-plan-tab cubewp-tab-switcher-target cubewp-switcher-tab-' . $id . '" data-id="' . $id . '">';
     108                $output .= self::cubewp_builder_widgets($form_type, $slug);
    104109                $output .= '</div>';
    105110            }
    106         }
    107         else {
     111        } else {
    108112            $output .= self::cubewp_builder_widgets($form_type, $slug);
    109113        }
    110114        return $output;
    111     }
    112    
     115    }
     116
    113117    /**
    114118     * Method cubewp_builder_widgets
     
    120124     * @since  1.0.0
    121125     */
    122     public static function cubewp_builder_widgets(string $form_type, string $slug) {
     126    public static function cubewp_builder_widgets(string $form_type, string $slug)
     127    {
    123128        $widgets_ui = '';
    124129        $widgets_ui .= apply_filters("cubewp/builder/{$form_type}/default/fields", '', $slug);
     
    126131        if (class_exists("CubeWp_Frontend_Load")) {
    127132            $widgets_ui .= apply_filters("cubewp/builder/{$form_type}/group/fields", '', $slug);
    128         }else {
     133        } else {
    129134            $widgets_ui .= self::cubewp_builder_pro_widgets_ui($slug);
    130135        }
     136        $widgets_ui .= self::cubewp_builder_custom_cubes($form_type, $slug);
    131137
    132138        return $widgets_ui;
    133     }
     139    }
    134140
    135141    /**
     
    141147     * @since  1.0.0
    142148     */
    143     public static function cubewp_builder_pro_widgets_ui($post_type) {
    144     $widgets_ui = '';
    145     $groups = cwp_get_groups_by_post_type($post_type);
    146     if (isset($groups) && !empty($groups) && count($groups) > 0) {
    147         foreach ($groups as $group) {
    148             $widgets_ui .= '<div id="group-' . rand(000000, 999999) . '" class="cubewp-builder-section cubewp-expand-container">';
    149             $widgets_ui .= '<div class="cubewp-builder-section-header">';
    150             $widgets_ui .= '<h3>' . esc_html(get_the_title($group)) . '</h3>';
    151             $widgets_ui .= '<a href="https://cubewp.com/cubewp-frontend-pro/" target="_blank"><span class="cubewp-pro-tag">' . esc_html__("PRO", "cubewp-framework") . '</span></a>';
    152             $widgets_ui .= '</div>';
    153             $widgets_ui .= '</div>';
    154         }
    155     }
    156 
    157     return $widgets_ui;
    158     }
    159    
     149    public static function cubewp_builder_pro_widgets_ui($post_type)
     150    {
     151        $widgets_ui = '';
     152        $groups = cwp_get_groups_by_post_type($post_type);
     153        if (isset($groups) && !empty($groups) && count($groups) > 0) {
     154            foreach ($groups as $group) {
     155                $widgets_ui .= '<div id="group-' . rand(000000, 999999) . '" class="cubewp-builder-section cubewp-expand-container">';
     156                $widgets_ui .= '<div class="cubewp-builder-section-header">';
     157                $widgets_ui .= '<h3>' . esc_html(get_the_title($group)) . '</h3>';
     158                $widgets_ui .= '<a href="https://cubewp.com/cubewp-frontend-pro/" target="_blank"><span class="cubewp-pro-tag">' . esc_html__("PRO", "cubewp-framework") . '</span></a>';
     159                $widgets_ui .= '</div>';
     160                $widgets_ui .= '</div>';
     161            }
     162        }
     163
     164        return $widgets_ui;
     165    }
     166
     167    /**
     168     * Method cubewp_builder_custom_cubes
     169     *
     170     * @param string $form_type
     171     * @param string $post_type
     172     *
     173     * @return string
     174     * @since  1.1.27
     175     */
     176    public static function cubewp_builder_custom_cubes($form_type, $post_type)
     177    {
     178        $default_custom_cubes = apply_filters("cubewp/builder/{$form_type}/custom/cubes", [], $post_type);
     179        if (!empty($default_custom_cubes) && is_array($default_custom_cubes)) {
     180            $args = [
     181                'section_title'        => esc_html__("CubeWP Custom Cubes", "cubewp-framework"),
     182                'section_description'  => '',
     183                'section_class'        => '',
     184                'open_close_class'     => 'close',
     185                'form_relation'        => $post_type,
     186                'form_type'            => $form_type,
     187                'fields'               => $default_custom_cubes,
     188            ];
     189            $builder = new CubeWp_Form_Builder();
     190            return $builder->cwpform_form_section($args);
     191        }
     192        return '';
     193    }
     194
    160195    /**
    161196     * Method builder_fields_parameters
     
    166201     * @since  1.0.0
    167202     */
    168     public static function builder_fields_parameters($args = array()) {
     203    public static function builder_fields_parameters($args = array())
     204    {
    169205        $default = array(
    170206            'form_type'      => '',
     
    178214        return wp_parse_args($args, $default);
    179215    }
    180    
     216
    181217    /**
    182218     * Method CubeWp_build_tab_options
     
    187223     * @since  1.0.0
    188224     */
    189     protected static function CubeWp_build_tab_options(array $data) {
     225    protected static function CubeWp_build_tab_options(array $data)
     226    {
    190227        $return = array();
    191228        if (isset($data['switcher_types']) && is_array($data['switcher_types']) && count($data['switcher_types']) > 0) {
    192229            $options = $data['switcher_types'];
    193230            foreach ($options as $slug => $title) {
    194                 $switcher = apply_filters("cubewp/builder/{$data['form_type']}/switcher",array(),$slug);
     231                $switcher = apply_filters("cubewp/builder/{$data['form_type']}/switcher", array(), $slug);
    195232                $return[$slug]["title"] = $title;
    196                 if ( ! empty($switcher) && is_array($switcher)) {
    197                     $return[$slug]["switcher"] = $switcher;
    198                 } else {
    199                     $return[$slug]["switcher"] = false;
    200                 }
     233                if (! empty($switcher) && is_array($switcher)) {
     234                    $return[$slug]["switcher"] = $switcher;
     235                } else {
     236                    $return[$slug]["switcher"] = false;
     237                }
    201238            }
    202239        }
     
    205242        self::$tab_options = $return;
    206243    }
    207    
     244
    208245    /**
    209246     * Method builder_header
     
    214251     * @since  1.0.0
    215252     */
    216     protected static function builder_header($title = '') {
     253    protected static function builder_header($title = '')
     254    {
    217255        return '
    218256        <ul id="size-list" class="hidden">
     
    229267        </section>';
    230268    }
    231    
     269
    232270    /**
    233271     * Method cubewp_builder_title
     
    238276     * @since  1.0.0
    239277     */
    240     protected static function cubewp_builder_title($title = '') {
     278    protected static function cubewp_builder_title($title = '')
     279    {
    241280        // $navi = array(
    242281        //      'cubewp_post_types_form' => array(
     
    254293        //  );
    255294        // $nav = '<nav class="nav-tab-wrapper wp-clearfix">
    256         //             <a class="nav-tab nav-tab-active" href="?page=cubewp-post-types-form">Post Type Forms</a>
    257         //             <a class="nav-tab" href="?page=cubewp-user-registration-form">User Signup Forms</a>
    258         //             <a class="nav-tab" href="?page=cubewp-user-profile-form">User Profile Forms</a>
    259         //         </nav>';
     295        //             <a class="nav-tab nav-tab-active" href="?page=cubewp-post-types-form">Post Type Forms</a>
     296        //             <a class="nav-tab" href="?page=cubewp-user-registration-form">User Signup Forms</a>
     297        //             <a class="nav-tab" href="?page=cubewp-user-profile-form">User Profile Forms</a>
     298        //         </nav>';
    260299        //return "<div class='builder-title-nav'><h1>CubeWP Form Builders</h1>{$nav}</div>";
    261300        return "<div class='builder-title-nav'><h1>CubeWP Form Builders</h1></div>";
    262301    }
    263    
     302
    264303    /**
    265304     * Method CubeWp_build_post_type_switcher
     
    270309     * @since  1.0.0
    271310     */
    272     protected static function CubeWp_build_post_type_switcher(array $data) {
     311    protected static function CubeWp_build_post_type_switcher(array $data)
     312    {
    273313        $title   = $data['switcher_title'];
    274314        $options = self::$tab_options;
    275315        if (empty($options)) {
    276316            return '<h3 style="text-align: center;">' . esc_html__("No Custom Post Type Found.", "cubewp-framework") . '</h3>';
    277          }
     317        }
    278318        $name    = "cubewp-builder-cpt";
    279319        $class   = "cubewp-tab-switcher cubewp-tab-switcher-trigger-on-load cubewp-tab-switcher-have-child";
     
    298338     * @since  1.0.0
    299339     */
    300     protected static function CubeWp_build_content_switcher(array $data) {
     340    protected static function CubeWp_build_content_switcher(array $data)
     341    {
    301342        $output = null;
    302343        if (isset($data['form_type']) && $data['form_type'] == 'post_type') {
     
    304345            if (isset($options) && count($options) != 0) {
    305346                foreach ($options as $slug => $option) {
    306                     if ( ! $option['switcher']) {
     347                    if (! $option['switcher']) {
    307348                        continue;
    308349                    }
     
    320361                        }
    321362                        $output .= '</select>';
    322                         $output .= '</div>';
     363                        $output .= '</div>';
    323364                        $output .= '</div>';
    324365                    }
     
    329370        return $output;
    330371    }
    331    
     372
    332373    /**
    333374     * Method cubewp_builder_area_topbar
     
    339380     * @since  1.0.0
    340381     */
    341     protected static function cubewp_builder_area_topbar(string $slug = "", array $data = array()) {
    342         $setting_btn = !empty(apply_filters("cubewp/builder/right/settings", '', $slug,$data)) ? self::builder_form_settings_btn($data['form_type']) : '';
    343         return '<div class="cubewp-builder-container-topbar">
     382    protected static function cubewp_builder_area_topbar(string $slug = "", array $data = array())
     383    {
     384        $setting_btn = !empty(apply_filters("cubewp/builder/right/settings", '', $slug, $data)) ? self::builder_form_settings_btn($data['form_type']) : '';
     385        return '<div class="cubewp-builder-container-topbar">
    344386            ' . $setting_btn . '
    345387            ' . self::builder_add_Section() . '
    346             '.self::builder_hidden_fields($slug, $data['form_type']).'
     388            ' . self::builder_hidden_fields($slug, $data['form_type']) . '
    347389        </div>';
    348     }
    349    
     390    }
     391
    350392    /**
    351393     * Method cubewp_builder_area
     
    356398     * @since  1.0.0
    357399     */
    358     protected static function cubewp_builder_area(array $data) {
    359         $output = '';
     400    protected static function cubewp_builder_area(array $data)
     401    {
     402        $output = '';
    360403        $options = self::$tab_options;
    361404        if (isset($options) && count($options) > 0) {
    362405            foreach ($options as $slug => $option) {
    363406                $output .= '<div id="type-' . esc_attr__($slug) . '" class="cubewp-type-container cubewp-switcher-tab-' . esc_attr__($slug) . ' cubewp-tab-switcher-target">';
    364                     if ( ! $option["switcher"]) {
    365                         $output .= self::cubewp_builder_area_content($slug, $data);
    366                     }else {
    367                         $switcher = $option["switcher"];
    368                         if (!empty($switcher) && isset($switcher['options'])) {
    369                             foreach ($switcher["options"] as $id => $val) {
    370                                 $data['content_switcher'] = $id;
    371                                 $data_type = self::cubewp_check_switcher_type($id);
    372                                 $output .= '<div id="plan-' . esc_attr__($id) . '" class="cubewp-plan-tab cubewp-switcher-tab-' . esc_attr__($id) . ' cubewp-tab-switcher-target" data-id="' . esc_attr__($id) . '" '.$data_type.'>';
    373                                 $output .= self::cubewp_builder_area_content($slug, $data);
    374                                 $output .= '</div>';
    375                             }
     407                if (! $option["switcher"]) {
     408                    $output .= self::cubewp_builder_area_content($slug, $data);
     409                } else {
     410                    $switcher = $option["switcher"];
     411                    if (!empty($switcher) && isset($switcher['options'])) {
     412                        foreach ($switcher["options"] as $id => $val) {
     413                            $data['content_switcher'] = $id;
     414                            $data_type = self::cubewp_check_switcher_type($id);
     415                            $output .= '<div id="plan-' . esc_attr__($id) . '" class="cubewp-plan-tab cubewp-switcher-tab-' . esc_attr__($id) . ' cubewp-tab-switcher-target" data-id="' . esc_attr__($id) . '" ' . $data_type . '>';
     416                            $output .= self::cubewp_builder_area_content($slug, $data);
     417                            $output .= '</div>';
    376418                        }
    377                     }
     419                    }
     420                }
    378421                $output .= '</div>';
    379422            }
    380423        }
    381424
    382         return $output;
     425        return $output;
    383426    }
    384427
     
    391434     * @since  1.0.0
    392435     */
    393     protected static function cubewp_check_switcher_type($id = '') {
    394         if( is_numeric($id) && !is_null(get_post($id)) && get_post_type( $id ) == 'price_plan'){
     436    protected static function cubewp_check_switcher_type($id = '')
     437    {
     438        if (is_numeric($id) && !is_null(get_post($id)) && get_post_type($id) == 'price_plan') {
    395439            return 'data-type="price_plan"';
    396440        }
    397         return 'data-type="'. $id .'"';
    398     }
    399    
     441        return 'data-type="' . $id . '"';
     442    }
     443
    400444    /**
    401445     * Method cubewp_builder_area_content
     
    407451     * @since  1.0.0
    408452     */
    409     protected static function cubewp_builder_area_content(string $slug, array $data) {
     453    protected static function cubewp_builder_area_content(string $slug, array $data)
     454    {
    410455        $output = '';
    411456        if ($data['form_type'] == 'single_layout') {
    412457            $output .= self::cubewp_builder_area_topbar($slug, $data) . '
    413458            <div class="cubewp-builder-area">
    414             ' . self::builder_settings($slug,$data) . '
     459            ' . self::builder_settings($slug, $data) . '
    415460                <div class="cubewp-single-layout-builder-container single-layout-builder">
    416461                    <div class="cubewp-single-layout-builder-content">
     
    427472                    </div>
    428473                </div>
    429                 ' . self::cubewp_builder_no_section( false, $slug, $data ) . '
     474                ' . self::cubewp_builder_no_section(false, $slug, $data) . '
    430475            </div>';
    431         }else {
     476        } else {
    432477            $output .= self::cubewp_builder_area_topbar($slug, $data) . '
    433478            <div class="cubewp-builder-area">
    434                 ' . self::builder_settings($slug,$data) . '
     479                ' . self::builder_settings($slug, $data) . '
    435480                <div class="cubewp-builder-sections">
    436481                    ' . apply_filters("cubewp/builder/default/right/section", '', $slug, $data) . '
    437482                </div>
    438                 ' . self::cubewp_builder_no_section( false, $slug, $data ) . '
     483                ' . self::cubewp_builder_no_section(false, $slug, $data) . '
    439484            </div>';
    440485        }
    441486
    442         return $output;
    443     }
    444    
     487        return $output;
     488    }
     489
    445490    /**
    446491     * Method builder_hidden_fields
     
    452497     * @since  1.0.0
    453498     */
    454     protected static function builder_hidden_fields($key, $FormType) {
     499    protected static function builder_hidden_fields($key, $FormType)
     500    {
    455501        $output        = '';
    456502        $hidden_fields = array(
     
    472518        return $output;
    473519    }
    474    
     520
    475521    /**
    476522     * Method builder_single_layout
     
    481527     * @since  1.0.0
    482528     */
    483     protected static function builder_single_layout(array $data) {
     529    protected static function builder_single_layout(array $data)
     530    {
    484531        $output = '';
    485         $options = self::$tab_options;
     532        $options = self::$tab_options;
    486533        if (isset($options) && count($options) > 0) {
    487534            foreach ($options as $slug => $option) {
     
    489536                $output .= self::cubewp_builder_area_content($slug, $data);
    490537                $output .= '</div>';
    491             }
    492         }else {
     538            }
     539        } else {
    493540            $output .= '<div id="type-temp" class="cubewp-type-container cubewp-switcher-tab-temp cubewp-tab-switcher-target active-tab">';
    494541            $output .= '<div class="cubewp-builder-area">';
     
    496543            $output .= '</div>';
    497544            $output .= '</div>';
    498          }
    499 
    500         return $output;
    501     }
    502    
     545        }
     546
     547        return $output;
     548    }
     549
    503550    /**
    504551     * Method builder_add_Section
     
    507554     * @since  1.0.0
    508555     */
    509     protected static function builder_add_Section() {
    510         if ( self::$FORM_TYPE != 'search_filters' && self::$FORM_TYPE != 'search_fields' ) {
    511         return '<button class="button cwpform-add-section">
     556    protected static function builder_add_Section()
     557    {
     558        if (self::$FORM_TYPE != 'search_filters' && self::$FORM_TYPE != 'search_fields') {
     559            return '<button class="button cwpform-add-section">
    512560            <span class="dashicons dashicons-plus"></span>
    513             ' . esc_html__( "Create Section", "cubewp-framework" ) . '
     561            ' . esc_html__("Create Section", "cubewp-framework") . '
    514562        </button>';
    515563        }
     
    517565        return '';
    518566    }
    519    
     567
    520568    /**
    521569     * Method builder_settings
     
    527575     * @since  1.0.0
    528576     */
    529     protected static function builder_settings(string $slug, array $data) {
     577    protected static function builder_settings(string $slug, array $data)
     578    {
    530579        return '<div class="form-settings" style="display:none;">
    531             ' . apply_filters("cubewp/builder/right/settings", '', $slug,$data) . '
     580            ' . apply_filters("cubewp/builder/right/settings", '', $slug, $data) . '
    532581        </div>';
    533582    }
    534    
     583
    535584    /**
    536585     * Method builder_get_shortcode
     
    539588     * @since  1.0.0
    540589     */
    541     public static function builder_get_shortcode() {
     590    public static function builder_get_shortcode()
     591    {
    542592        if (empty(self::$tab_options)) {
    543593            return '';
     
    547597            <div class="cwpform-shortcode"></div>
    548598            <button class="button-primary cwpform-get-shortcode">
    549                 '. $button_text .'
     599                ' . $button_text . '
    550600            </button>
    551601        </div>';
    552      }
    553    
     602    }
     603
    554604    /**
    555605     * Method builder_form_settings_btn
     
    560610     * @since  1.0.0
    561611     */
    562     protected static function builder_form_settings_btn($FormType) {             
     612    protected static function builder_form_settings_btn($FormType)
     613    {
    563614        return '<button class="button form-settings-form">
    564615                <span class="dashicons dashicons-admin-generic"></span>
     
    572623     * @return string html
    573624     * @since  1.0.0
    574      */
    575     protected static function cubewp_builder_no_section( $no_cpt = FALSE, $post_type = '', $data = array() ) {
     625     */
     626    protected static function cubewp_builder_no_section($no_cpt = FALSE, $post_type = '', $data = array())
     627    {
    576628        $FormType = self::$FORM_TYPE;
    577629        $output   = '';
    578         if ( $FormType != 'search_filters' && $FormType != 'search_fields' ) {
    579            $output .= '<div class="cubewp-builder-no-section hidden">
    580              <img src="' . CWP_PLUGIN_URI . 'cube/assets/admin/images/no-section.png" alt="' . esc_html__( "No Section Image", "cubewp-framework" ) . '">';
    581            if ( ! $no_cpt ) {
    582               $output .= '<h3>' . esc_html__( "Let's build something awesome today!", "cubewp-framework" ) . '</h3>';
    583               $output .= '<div class="cubewp-builder-no-section-steps">';
    584               if ( $FormType == 'post_type' || $FormType == 'single_layout' ) {
    585                  $output .= '<p><span>' . esc_html__( "1", "cubewp-framework" ) . '</span>' . esc_html__( "Select a Post Type", "cubewp-framework" ) . '</p>';
    586               } else {
    587                  $output .= '<p><span>' . esc_html__( "1", "cubewp-framework" ) . '</span>' . esc_html__( "Select a User Role", "cubewp-framework" ) . '</p>';
    588               }
    589               $output .= '<p><span>' . esc_html__( "2", "cubewp-framework" ) . '</span>' . esc_html__( "Create a Section", "cubewp-framework" ) . '</p>
    590                  <p><span>' . esc_html__( "3", "cubewp-framework" ) . '</span>' . esc_html__( "Drag a Form Field", "cubewp-framework" ) . '</p>
    591                  <p><span>' . esc_html__( "4", "cubewp-framework" ) . '</span>' . esc_html__( "Hit Save Changes", "cubewp-framework" ) . '</p>
     630        if ($FormType != 'search_filters' && $FormType != 'search_fields') {
     631            $output .= '<div class="cubewp-builder-no-section hidden">
     632             <img src="' . CWP_PLUGIN_URI . 'cube/assets/admin/images/no-section.png" alt="' . esc_html__("No Section Image", "cubewp-framework") . '">';
     633            if (! $no_cpt) {
     634                $output .= '<h3>' . esc_html__("Let's build something awesome today!", "cubewp-framework") . '</h3>';
     635                $output .= '<div class="cubewp-builder-no-section-steps">';
     636                if ($FormType == 'post_type' || $FormType == 'single_layout') {
     637                    $output .= '<p><span>' . esc_html__("1", "cubewp-framework") . '</span>' . esc_html__("Select a Post Type", "cubewp-framework") . '</p>';
     638                } else {
     639                    $output .= '<p><span>' . esc_html__("1", "cubewp-framework") . '</span>' . esc_html__("Select a User Role", "cubewp-framework") . '</p>';
     640                }
     641                $output .= '<p><span>' . esc_html__("2", "cubewp-framework") . '</span>' . esc_html__("Create a Section", "cubewp-framework") . '</p>
     642                 <p><span>' . esc_html__("3", "cubewp-framework") . '</span>' . esc_html__("Drag a Form Field", "cubewp-framework") . '</p>
     643                 <p><span>' . esc_html__("4", "cubewp-framework") . '</span>' . esc_html__("Hit Save Changes", "cubewp-framework") . '</p>
    592644              </div>
    593645              <button class="button button-primary cubewp-trigger-add-section">
    594646                 <span class="dashicons dashicons-plus"></span>
    595                  ' . esc_html__( "Create Section", "cubewp-framework" ) . '
     647                 ' . esc_html__("Create Section", "cubewp-framework") . '
    596648              </button>';
    597    
    598               if ( ! empty( $data ) ) {
    599                  $plans = apply_filters( "cubewp/builder/{$FormType}/switcher", array(), $post_type );
    600                  if ( $FormType == 'post_type' && isset( $plans['options'] ) &&  !empty( $plans['options'] )) {
    601                     $plans_options  = '';
    602                     $post_type_form = CWP()->get_form( 'post_type' );
    603                     foreach ( $plans['options'] as $plan => $title ) {
    604                        if ( $plan == $data['content_switcher'] || ! isset( $post_type_form[ $post_type ][ $plan ]['groups'] ) || empty( $post_type_form[ $post_type ][ $plan ]['groups'] ) ) {
    605                           continue;
    606                        }
    607                        if ( is_numeric( $plan ) ) {
    608                           $plan_title = get_the_title( $plan );
    609                        }else {
    610                           $plan_title = $title;
    611                        }
    612                        $plans_options .= '<option value="' . $plan . '">' . esc_html( $plan_title ) . '</option>';
    613                     }
    614                     if ( ! empty( $plans_options ) ) {
    615                        $output .= '<div class="cubewp-builder-sections-importer">
    616                           <label for="cubewp-builder-section-import-' . $data['content_switcher'] . '">' . esc_html__( "Or Copy Content From", "cubewp-framework" ) . '</label>
     649
     650                if (! empty($data)) {
     651                    $plans = apply_filters("cubewp/builder/{$FormType}/switcher", array(), $post_type);
     652                    if ($FormType == 'post_type' && isset($plans['options']) &&  !empty($plans['options'])) {
     653                        $plans_options  = '';
     654                        $post_type_form = CWP()->get_form('post_type');
     655                        foreach ($plans['options'] as $plan => $title) {
     656                            if ($plan == $data['content_switcher'] || ! isset($post_type_form[$post_type][$plan]['groups']) || empty($post_type_form[$post_type][$plan]['groups'])) {
     657                                continue;
     658                            }
     659                            if (is_numeric($plan)) {
     660                                $plan_title = get_the_title($plan);
     661                            } else {
     662                                $plan_title = $title;
     663                            }
     664                            $plans_options .= '<option value="' . $plan . '">' . esc_html($plan_title) . '</option>';
     665                        }
     666                        if (! empty($plans_options)) {
     667                            $output .= '<div class="cubewp-builder-sections-importer">
     668                          <label for="cubewp-builder-section-import-' . $data['content_switcher'] . '">' . esc_html__("Or Copy Content From", "cubewp-framework") . '</label>
    617669                          <select id="cubewp-builder-section-import-' . $data['content_switcher'] . '" class="cubewp-builder-section-import">';
    618                           $output .= $plans_options;
    619                           $output .= '</select>
     670                            $output .= $plans_options;
     671                            $output .= '</select>
    620672                          <button class="button cwpform-import-sections">
    621673                          <span class="dashicons dashicons-admin-page"></span>
    622                           ' . esc_html__( "Copy", "cubewp-framework" ) . '
     674                          ' . esc_html__("Copy", "cubewp-framework") . '
    623675                          </button>
    624676                       </div>';
     677                        }
    625678                    }
    626                  }
    627               }
    628    
    629            } else {
    630               $output .= '<h3>' . esc_html__( "No Custom Post Type Found.", "cubewp-framework" ) . '</h3>';
    631            }
    632            $output .= '</div>';
    633         }
    634    
     679                }
     680            } else {
     681                $output .= '<h3>' . esc_html__("No Custom Post Type Found.", "cubewp-framework") . '</h3>';
     682            }
     683            $output .= '</div>';
     684        }
     685
    635686        return $output;
    636687    }
  • cubewp-framework/trunk/cube/classes/class-cubewp-load.php

    r3349966 r3362001  
    2323     * @var string
    2424     */
    25     public static $CubeWp_version = '1.1.26';
     25    public static $CubeWp_version = '1.1.27';
    2626
    2727    /**
  • cubewp-framework/trunk/cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-archive-posts-widget.php

    r3339163 r3362001  
    11<?php
    2 defined( 'ABSPATH' ) || exit;
     2defined('ABSPATH') || exit;
    33
    44use Elementor\Controls_Manager;
     
    1414 */
    1515
    16  class CubeWp_Elementor_Archive_Posts_Widget extends Widget_Base {
     16class CubeWp_Elementor_Archive_Posts_Widget extends Widget_Base
     17{
    1718
    1819    private static $post_types = array();
    1920
    20     public function get_name() {
     21    public function get_name()
     22    {
    2123        return 'search_posts_widget';
    2224    }
    2325
    24     public function get_title() {
    25         return __( 'Archive Posts Display', 'cubewp-framework' );
    26     }
    27 
    28     public function get_icon() {
     26    public function get_title()
     27    {
     28        return __('Archive Posts Display', 'cubewp-framework');
     29    }
     30
     31    public function get_icon()
     32    {
    2933        return 'eicon-archive-posts';
    3034    }
    3135
    32     public function get_categories() {
    33         return [ 'cubewp' ];
    34     }
    35 
    36     protected function _register_controls() {
     36    public function get_categories()
     37    {
     38        return ['cubewp'];
     39    }
     40
     41    protected function register_controls()
     42    {
    3743        self::get_post_types();
    3844
    39        
     45
    4046        $this->start_controls_section(
    4147            'section_map',
    4248            [
    43                 'label' => __( 'Search Posts Settings', 'cubewp-framework' ),
     49                'label' => __('Search Posts Settings', 'cubewp-framework'),
    4450            ]
    4551        );
    4652        $this->add_post_type_controls();
    47        
     53
    4854
    4955        $this->end_controls_section();
    50     }
    51 
    52     private static function get_post_types() {
    53         $post_types = get_post_types(['public' => true], 'objects');
     56
     57        $this->add_promotional_card_controls();
     58    }
     59
     60    private static function get_post_types()
     61    {
     62        $post_types = get_post_types(['public' => true], 'objects');
    5463        $options = [];
    5564        foreach ($post_types as $post_type) {
    5665            $options[$post_type->name] = $post_type->label;
    5766        }
    58         unset( $options['elementor_library'] );
    59         unset( $options['e-landing-page'] );
    60         unset( $options['attachment'] );
    61         unset( $options['page'] );
    62 
    63         self::$post_types = $options;
    64     }
    65 
    66     private static function get_post_type_name_by_slug($post_type_slug) {
    67         $post_type_object = get_post_type_object($post_type_slug);
    68         // Check if the post type object exists and return its label (name)
    69         if ($post_type_object) {
    70             return $post_type_object->label;
    71         }
    72         return null;
    73     }
    74 
    75     private function add_post_type_controls() {
    76         $post_types = self::$post_types;
    77         if ( is_array( $post_types ) && ! empty( $post_types ) ) {
    78             $this->add_control( 'posttype', array(
    79                 'type'        => Controls_Manager::SELECT2,
    80                 //'multiple'    => true,
    81                 'label'       => esc_html__( 'Select Post Types', 'cubewp-classifiad' ),
    82                 'options'     => $post_types,
    83                 'default'     => array( 'post' ),
    84                 'label_block' => true,
    85             ) );
    86             foreach ( $post_types as $slug => $post_type ) {
    87                 $this->add_card_style_controls( $slug );
    88             }
    89         }
    90     }
    91 
    92     private function add_card_style_controls($post_type) {
    93             if(!empty(cubewp_post_card_styles($post_type))){
    94                 $this->add_control( $post_type.'_card_style', array(
    95                     'type'        => Controls_Manager::SELECT,
    96                     'label'       => esc_html__( 'Card Style for '.self::get_post_type_name_by_slug($post_type), 'cubewp-framework' ),
    97                     'options'     => cubewp_post_card_styles($post_type),
    98                     'default'     => 'default_style',
    99                     'condition'   => array(
    100                         'posttype' => $post_type
    101                     )
    102                 ) );
    103             }
    104     }
    105 
    106     protected function render() {
     67        unset($options['elementor_library']);
     68        unset($options['e-landing-page']);
     69        unset($options['attachment']);
     70        unset($options['page']);
     71
     72        self::$post_types = $options;
     73    }
     74
     75    private static function get_post_type_name_by_slug($post_type_slug)
     76    {
     77        $post_type_object = get_post_type_object($post_type_slug);
     78        // Check if the post type object exists and return its label (name)
     79        if ($post_type_object) {
     80            return $post_type_object->label;
     81        }
     82        return null;
     83    }
     84
     85    private function add_post_type_controls()
     86    {
     87        $post_types = self::$post_types;
     88        if (is_array($post_types) && ! empty($post_types)) {
     89            $this->add_control('posttype', array(
     90                'type'        => Controls_Manager::SELECT2,
     91                //'multiple'    => true,
     92                'label'       => esc_html__('Select Post Types', 'cubewp-classifiad'),
     93                'options'     => $post_types,
     94                'default'     => array('post'),
     95                'label_block' => true,
     96            ));
     97            foreach ($post_types as $slug => $post_type) {
     98                $this->add_card_style_controls($slug);
     99            }
     100        }
     101    }
     102
     103    private function add_card_style_controls($post_type)
     104    {
     105        if (!empty(cubewp_post_card_styles($post_type))) {
     106            $this->add_control($post_type . '_card_style', array(
     107                'type'        => Controls_Manager::SELECT,
     108                'label'       => esc_html__('Card Style for ' . self::get_post_type_name_by_slug($post_type), 'cubewp-framework'),
     109                'options'     => cubewp_post_card_styles($post_type),
     110                'default'     => 'default_style',
     111                'condition'   => array(
     112                    'posttype' => $post_type
     113                )
     114            ));
     115        }
     116    }
     117   
     118    private function add_promotional_card_controls()
     119    {
     120        global $cubewpOptions;
     121        $posts_per_page = isset($cubewpOptions['posts_per_page']) ? (int)$cubewpOptions['posts_per_page'] : 10;
     122        $this->start_controls_section('cubewp_widget_additional_setting_section', array(
     123            'label' => esc_html__('Promotional Card Settings', 'cubewp-framework'),
     124            'tab'   => Controls_Manager::TAB_CONTENT,
     125        ));
     126
     127        $this->add_control('cubewp_promotional_card', array(
     128            'type'    => Controls_Manager::SWITCHER,
     129            'label'   => esc_html__('Show Promotional Cards', 'cubewp-framework'),
     130            'default' => 'no',
     131        ));
     132
     133        // Create Repeater
     134        $repeater_CARDS = new Repeater();
     135
     136        $repeater_CARDS->add_control('cubewp_promotional_card_option', array(
     137            'type'        => Controls_Manager::SELECT,
     138            'label'       => esc_html__('Promotional Cards', 'cubewp-framework'),
     139            'options'     => cubewp_get_get_promotional_cards_list(),
     140        ));
     141
     142        $repeater_CARDS->add_control('cubewp_promotional_card_position', array(
     143            'type'        => Controls_Manager::NUMBER,
     144            'label'       => esc_html__('Position', 'cubewp-framework'),
     145            'default'     => 3,
     146            'placeholder' => esc_html__("3", "cubewp-framework"),
     147            'min'         => 1,
     148            'max'         => $posts_per_page,
     149        ));
     150
     151        $repeater_CARDS->add_responsive_control('cubewp_promotional_card_width', array(
     152            'label'      => esc_html__('Width', 'cubewp-framework'),
     153            'type'       => Controls_Manager::SLIDER,
     154            'size_units' => ['px', '%'],
     155            'default'    => [
     156            'unit' => '%',
     157            'size' => 100,
     158            ],
     159            'range'      => [
     160            'px' => [
     161                'min' => 50,
     162                'max' => 1000,
     163            ],
     164            '%' => [
     165                'min' => 10,
     166                'max' => 100,
     167            ],
     168            ],
     169            'description' => esc_html__('Set the width of the card.', 'cubewp-framework'),
     170        ));
     171
     172        // Add Repeater Control
     173        $this->add_control('cubewp_promotional_cards_list', array(
     174            'type'        => Controls_Manager::REPEATER,
     175            'label'       => esc_html__('Promotional Cards List', 'cubewp-framework'),
     176            'fields'      => $repeater_CARDS->get_controls(),
     177            'default'     => [],
     178            'title_field' => '{{{ cubewp_promotional_card_option }}}',
     179            'condition'   => [
     180                'cubewp_promotional_card' => 'yes',
     181            ],
     182        ));
     183
     184        $this->end_controls_section();
     185    }
     186
     187    protected function render()
     188    {
    107189        $settings   = $this->get_settings_for_display();
    108         $type = isset( $settings[ 'posttype' ] ) ? $settings[ 'posttype' ] : '';
    109         $card_style = isset( $settings[ $type . '_card_style' ] ) ? $settings[ $type . '_card_style' ] : '';
     190        $type = isset($settings['posttype']) ? $settings['posttype'] : '';
     191        $card_style = isset($settings[$type . '_card_style']) ? $settings[$type . '_card_style'] : '';
    110192        $page_num = '1';
    111193
    112         CubeWp_Enqueue::enqueue_script( 'cwp-search-filters' );
    113 
    114         echo CubeWp_Frontend_Search_Filter::cwp_filter_results();
     194        $promotional_card = $settings['cubewp_promotional_card'] === 'yes' ? true : false;
     195        $promotional_card_list = $settings['cubewp_promotional_cards_list'];
     196
     197        CubeWp_Enqueue::enqueue_script('cwp-search-filters');
     198
     199        echo CubeWp_Frontend_Search_Filter::cwp_filter_results();
    115200        echo '<form name="cwp-search-filters" class="cwp-search-filters" method="post">';
    116             echo CubeWp_Frontend_Search_Filter::filter_hidden_fields($type,$page_num,$card_style);
    117             echo CubeWp_Frontend_Search_Filter::get_hidden_field_if_tax();
     201        echo CubeWp_Frontend_Search_Filter::filter_hidden_fields($type, $page_num, $card_style);
     202        echo CubeWp_Frontend_Search_Filter::get_hidden_field_if_tax();
     203        $count = 1;
     204        if ($promotional_card && !empty($promotional_card_list) && is_array($promotional_card_list)) {
     205            foreach ($promotional_card_list as $_promotional_card) {
     206                echo '<input type="hidden" class="cubewp-promotional-card" name="cubewp_promotional_card_option-'.$count.'" value="' . esc_attr($_promotional_card['cubewp_promotional_card_option']) . '" />';
     207                echo '<input type="hidden" class="cubewp-promotional-card" name="cubewp_promotional_card_position-'.$count.'" value="' . esc_attr($_promotional_card['cubewp_promotional_card_position']) . '" />';
     208                echo '<input type="hidden" class="cubewp-promotional-card" name="cubewp_promotional_card_width-'.$count.'" value="' . esc_attr($_promotional_card['cubewp_promotional_card_width']['size']) .esc_attr($_promotional_card['cubewp_promotional_card_width']['unit']). '" />';
     209                $count++;
     210            }
     211        }
    118212        echo '</form>';
    119213
    120214        //Only to load data while editing in elementor
    121         if ( cubewp_is_elementor_editing()){
    122             ?>
    123             <script>cwp_search_filters_ajax_content();</script>
     215        if (cubewp_is_elementor_editing()) {
     216?>
     217            <script>
     218                cwp_search_filters_ajax_content();
     219            </script>
    124220            <?php
    125221        }
  • cubewp-framework/trunk/cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php

    r3339163 r3362001  
    143143        ));
    144144
     145        $this->add_responsive_control(
     146            'posts_per_row',
     147            [
     148                'label' => esc_html__('Posts Per Row', 'cubewp-framework'),
     149                'type' => \Elementor\Controls_Manager::SELECT,
     150                'default' => 'auto',
     151                'condition' => [
     152                    'layout' => 'grid',
     153                ],
     154                'device_args' => [
     155                    \Elementor\Controls_Stack::RESPONSIVE_DESKTOP => [
     156                        'default' => 'auto',
     157                        'options' => [
     158                            'auto' => esc_html__('Auto', 'cubewp-framework'),
     159                            '1' => esc_html__('1 Column', 'cubewp-framework'),
     160                            '2' => esc_html__('2 Columns', 'cubewp-framework'),
     161                            '3' => esc_html__('3 Columns', 'cubewp-framework'),
     162                            '4' => esc_html__('4 Columns', 'cubewp-framework'),
     163                            '5' => esc_html__('5 Columns', 'cubewp-framework'),
     164                            '6' => esc_html__('6 Columns', 'cubewp-framework'),
     165                        ],
     166                    ],
     167                    \Elementor\Controls_Stack::RESPONSIVE_TABLET => [
     168                        'default' => 'auto',
     169                        'options' => [
     170                            'auto' => esc_html__('Auto', 'cubewp-framework'),
     171                            '1' => esc_html__('1 Column', 'cubewp-framework'),
     172                            '2' => esc_html__('2 Columns', 'cubewp-framework'),
     173                            '3' => esc_html__('3 Columns', 'cubewp-framework'),
     174                            '4' => esc_html__('4 Columns', 'cubewp-framework'),
     175                            '5' => esc_html__('5 Columns', 'cubewp-framework'),
     176                            '6' => esc_html__('6 Columns', 'cubewp-framework'),
     177                        ],
     178                    ],
     179                    \Elementor\Controls_Stack::RESPONSIVE_MOBILE => [
     180                        'default' => 'auto',
     181                        'options' => [
     182                            'auto' => esc_html__('Auto', 'cubewp-framework'),
     183                            '1' => esc_html__('1 Column', 'cubewp-framework'),
     184                            '2' => esc_html__('2 Columns', 'cubewp-framework'),
     185                            '3' => esc_html__('3 Columns', 'cubewp-framework'),
     186                            '4' => esc_html__('4 Columns', 'cubewp-framework'),
     187                            '5' => esc_html__('5 Columns', 'cubewp-framework'),
     188                            '6' => esc_html__('6 Columns', 'cubewp-framework'),
     189                        ],
     190                    ],
     191                ],
     192                'frontend_available' => true,
     193            ]
     194        );
     195
     196        $this->add_responsive_control('processing_grids_per_row', array(
     197            'type' => Controls_Manager::NUMBER,
     198            'label' => esc_html__('Processing Grids Per Row', 'cubewp-framework'),
     199            'default' => '4',
     200            'condition' => array(
     201                'posts_per_row' => 'auto',
     202            ),
     203        ));
     204
     205
    145206        $this->add_control('enable_scroll_on_small_devices', array(
    146207            'type'      => Controls_Manager::SWITCHER,
     
    187248            'type'      => Controls_Manager::SELECT2,
    188249            'label'     => esc_html__('Select Custom Field', 'cubewp-framework'),
    189             'options'   => get_fields_by_type(array('number', 'text', 'checkbox','dropdown')),
     250            'options'   => get_fields_by_type(array('number', 'text', 'checkbox', 'dropdown')),
    190251            'label_block' => true,
    191252        ));
     
    239300        $this->end_controls_section();
    240301        $this->add_slider_controls();
     302        $this->add_promotional_card_controls();
    241303    }
    242304
     
    436498        if ($settings['enable_scroll_on_small_devices'] === 'yes') {
    437499            echo '<style>
    438                 @media (max-width: 767px) {
    439                     .elementor-element-' . $widget_id . ' .cwp-row {
    440                         overflow: scroll;
    441                         flex-wrap: nowrap;
    442                     }
     500            @media (max-width: 767px) {
     501                .elementor-element-' . $widget_id . ' .cwp-row {
     502                    overflow: scroll;
     503                    flex-wrap: nowrap;
    443504                }
    444             </style>';
     505            }
     506        </style>';
    445507        }
    446 
    447         $prev_icon = '';
    448         $prev_icon_type = false;
    449         if (!empty($settings['prev_icon']['value'])) {
    450             if ('svg' === $settings['prev_icon']['library']) {
    451                 $prev_icon_url = esc_url($settings['prev_icon']['value']['url']);
    452                 $prev_icon_content = file_get_contents($prev_icon_url);
    453                 $prev_icon = $prev_icon_content;
    454             } else {
    455                 $prev_icon = esc_attr($settings['prev_icon']['value']);
    456                 $prev_icon_type = true;
    457             }
    458         }
    459         $next_icon = '';
    460         $next_icon_type = false;
    461         if (!empty($settings['next_icon']['value'])) {
    462             if ('svg' === $settings['next_icon']['library']) {
    463                 $next_icon_url = esc_url($settings['next_icon']['value']['url']);
    464                 $next_icon_content = file_get_contents($next_icon_url);
    465                 $next_icon = $next_icon_content;
    466             } else {
    467                 $next_icon =  esc_attr($settings['next_icon']['value']);
    468                 $next_icon_type = true;
    469             }
    470         }
    471         $slides_to_show = $settings['slides_to_show'];
    472         $slides_to_scroll = $settings['slides_to_scroll'];
    473         $slides_to_show_tablet = $settings['slides_to_show_tablet'];
    474         $slides_to_show_tablet_portrait = $settings['slides_to_show_tablet_portrait'];
    475         $slides_to_show_mobile = $settings['slides_to_show_mobile'];
    476         $slides_to_scroll_tablet = $settings['slides_to_scroll_tablet'];
    477         $slides_to_scroll_tablet_portrait = $settings['slides_to_scroll_tablet_portrait'];
    478         $slides_to_scroll_mobile = $settings['slides_to_scroll_mobile'];
    479         $autoplay = $settings['autoplay'] === 'yes' ? true : false;
    480         $autoplay_speed = $settings['autoplay_speed'];
    481         $speed = $settings['speed'];
    482         $enable_wrap_dots_arrows = $settings['enable_wrap_dots_arrows'] === 'yes' ? true : false;
    483         $infinite = $settings['infinite'] === 'yes' ? true : false;
    484         $fade_effect = $settings['fade_effect'] === 'yes' ? true : false;
    485         $variable_width = $settings['variable_width'] === 'yes' ? true : false;
    486         $custom_arrows = $settings['custom_arrows'] === 'yes' ? true : false;
    487         $custom_dots = $settings['custom_dots'] === 'yes' ? true : false;
    488         $enable_progress_bar = $settings['enable_progress_bar'] === 'yes' ? true : false;
    489508
    490509        $args = array(
    491510            'post_type'       => $settings['posttype'],
    492             'taxonomy'       => array(),
    493             'orderby'        => $settings['orderby'],
    494             'order'          => $settings['order'],
     511            'taxonomy'        => array(),
     512            'orderby'         => $settings['orderby'],
     513            'order'           => $settings['order'],
    495514            'number_of_posts' => $settings['number_of_posts'],
    496             'load_more'       => $settings['load_more'],
    497             'posts_per_page' => $settings['posts_per_page'],
    498             'layout'         => $settings['layout'],
    499             'post__in'       => array(),
    500             'boosted_only'   => 'no',
    501             'paged'   => '1',
     515            'load_more'       => $settings['load_more'],
     516            'posts_per_page'  => $settings['posts_per_page'],
     517            'processing_grids_per_row' => $settings['processing_grids_per_row'],
     518            'layout'          => $settings['layout'],
     519            'posts_per_row'   => isset($settings['posts_per_row']) ? $settings['posts_per_row'] : 'auto',
     520            'posts_per_row_tablet'   => isset($settings['posts_per_row_tablet']) ? $settings['posts_per_row_tablet'] : 'auto',
     521            'posts_per_row_mobile'   => isset($settings['posts_per_row_mobile']) ? $settings['posts_per_row_mobile'] : 'auto',
     522            'post__in'        => array(),
     523            'boosted_only'    => 'no',
     524            'paged'           => '1',
    502525            'cwp_enable_slider' => $settings['cwp_enable_slider'] === 'yes' ? 'cubewp-post-slider' : '',
    503             'prev_icon' => $prev_icon,
    504             'next_icon' => $next_icon,
    505             'next_icon_type' => $next_icon_type,
    506             'prev_icon_type' => $prev_icon_type,
    507             'slides_to_show' => $slides_to_show,
    508             'slides_to_scroll' => $slides_to_scroll,
    509             'slides_to_show_tablet' => $slides_to_show_tablet,
    510             'slides_to_show_tablet_portrait' => $slides_to_show_tablet_portrait,
    511             'slides_to_show_mobile' => $slides_to_show_mobile,
    512             'slides_to_scroll_tablet' => $slides_to_scroll_tablet,
    513             'slides_to_scroll_tablet_portrait' => $slides_to_scroll_tablet_portrait,
    514             'slides_to_scroll_mobile' => $slides_to_scroll_mobile,
    515             'autoplay' => $autoplay,
    516             'autoplay_speed' => $autoplay_speed,
    517             'speed' => $speed,
    518             'infinite' => $infinite,
    519             'fade_effect' => $fade_effect,
    520             'variable_width' => $variable_width,
    521             'custom_arrows' => $custom_arrows,
    522             'custom_dots' => $custom_dots,
    523             'enable_wrap_dots_arrows' => $enable_wrap_dots_arrows,
    524             'enable_progress_bar' => $enable_progress_bar,
    525         );
     526            'promotional_card' => $settings['cubewp_promotional_card'] === 'yes' ? true : false,
     527            'promotional_cards' => $settings['cubewp_promotional_cards_list'],
     528        );
     529
     530        // Add slider parameters only if the slider is enabled
     531        if ($settings['cwp_enable_slider'] === 'yes') {
     532            $args = array_merge($args, array(
     533                'prev_icon' => $settings['prev_icon']['value'] ?? '',
     534                'next_icon' => $settings['next_icon']['value'] ?? '',
     535                'slides_to_show' => $settings['slides_to_show'],
     536                'slides_to_scroll' => $settings['slides_to_scroll'],
     537                'slides_to_show_tablet' => $settings['slides_to_show_tablet'],
     538                'slides_to_show_tablet_portrait' => $settings['slides_to_show_tablet_portrait'],
     539                'slides_to_show_mobile' => $settings['slides_to_show_mobile'],
     540                'slides_to_scroll_tablet' => $settings['slides_to_scroll_tablet'],
     541                'slides_to_scroll_tablet_portrait' => $settings['slides_to_scroll_tablet_portrait'],
     542                'slides_to_scroll_mobile' => $settings['slides_to_scroll_mobile'],
     543                'autoplay' => $settings['autoplay'] === 'yes' ? true : false,
     544                'autoplay_speed' => $settings['autoplay_speed'],
     545                'speed' => $settings['speed'],
     546                'infinite' => $settings['infinite'] === 'yes' ? true : false,
     547                'fade_effect' => $settings['fade_effect'] === 'yes' ? true : false,
     548                'variable_width' => $settings['variable_width'] === 'yes' ? true : false,
     549                'custom_arrows' => $settings['custom_arrows'] === 'yes' ? true : false,
     550                'custom_dots' => $settings['custom_dots'] === 'yes' ? true : false,
     551                'enable_wrap_dots_arrows' => $settings['enable_wrap_dots_arrows'] === 'yes' ? true : false,
     552                'enable_progress_bar' => $settings['enable_progress_bar'] === 'yes' ? true : false,
     553            ));
     554        }
    526555
    527556        if (is_array($settings['posttype']) && ($posts_by !== 'boosted' || $posts_by !== 'all')) {
    528557            foreach ($settings['posttype'] as $post_type) {
    529 
    530558                if ($posts_by == 'post_ids') {
    531559                    $post_in = isset($settings[$post_type . '_post__in']) ? $settings[$post_type . '_post__in'] : '';
     
    542570                    }
    543571                } elseif ($posts_by == 'taxonomy') {
    544 
    545572                    $terms = isset($settings['taxonomy-' . $post_type]) ? $settings['taxonomy-' . $post_type] : array();
    546573                    if (!empty($terms)) {
     
    573600        }
    574601
    575 
    576602        echo apply_filters('cubewp_shortcode_posts_output', '', $args);
    577603    }
     
    12041230
    12051231        $this->add_group_control(
    1206             Group_Control_Box_Shadow::get_type(),
    1207             [
    1208                 'name' => 'slider_arrow_box_shadow',
    1209                 'label' => __('Arrow Box Shadow', 'value-pack'),
    1210                 'selector' => '{{WRAPPER}} .cubewp-post-slider .slick-arrow',
    1211                 'separator' => 'before',
    1212             ]
    1213         );
     1232            Group_Control_Box_Shadow::get_type(),
     1233            [
     1234                'name' => 'slider_arrow_box_shadow',
     1235                'label' => __('Arrow Box Shadow', 'value-pack'),
     1236                'selector' => '{{WRAPPER}} .cubewp-post-slider .slick-arrow',
     1237                'separator' => 'before',
     1238            ]
     1239        );
    12141240
    12151241        $this->add_control(
     
    22882314        $this->end_controls_section();
    22892315    }
     2316
     2317    private function add_promotional_card_controls()
     2318    {
     2319        $this->start_controls_section('cubewp_widget_additional_setting_section', array(
     2320            'label' => esc_html__('Promotional Card Settings', 'cubewp-framework'),
     2321            'tab'   => Controls_Manager::TAB_CONTENT,
     2322        ));
     2323
     2324        $this->add_control('cubewp_promotional_card', array(
     2325            'type'    => Controls_Manager::SWITCHER,
     2326            'label'   => esc_html__('Show Promotional Cards', 'cubewp-framework'),
     2327            'default' => 'no',
     2328        ));
     2329
     2330        // Create Repeater
     2331        $repeater_CARDS = new Repeater();
     2332
     2333        $repeater_CARDS->add_control('cubewp_promotional_card_option', array(
     2334            'type'        => Controls_Manager::SELECT,
     2335            'label'       => esc_html__('Promotional Cards', 'cubewp-framework'),
     2336            'options'     => cubewp_get_get_promotional_cards_list(),
     2337        ));
     2338
     2339        $repeater_CARDS->add_control('cubewp_promotional_card_position', array(
     2340            'type'        => Controls_Manager::NUMBER,
     2341            'label'       => esc_html__('Position', 'cubewp-framework'),
     2342            'default'     => 3,
     2343            'placeholder' => esc_html__("3", "cubewp-framework"),
     2344            'min'         => 1,
     2345        ));
     2346
     2347        $repeater_CARDS->add_responsive_control('cubewp_promotional_card_width', array(
     2348            'label'      => esc_html__('Width', 'cubewp-framework'),
     2349            'type'       => Controls_Manager::SLIDER,
     2350            'size_units' => ['px', '%'],
     2351            'default'    => [
     2352                'unit' => '%',
     2353                'size' => 100,
     2354            ],
     2355            'range'      => [
     2356                'px' => [
     2357                    'min' => 50,
     2358                    'max' => 1000,
     2359                ],
     2360                '%' => [
     2361                    'min' => 10,
     2362                    'max' => 100,
     2363                ],
     2364            ],
     2365            'description' => esc_html__('Set the width of the card.', 'cubewp-framework'),
     2366        ));
     2367
     2368        // Add Repeater Control
     2369        $this->add_control('cubewp_promotional_cards_list', array(
     2370            'type'        => Controls_Manager::REPEATER,
     2371            'label'       => esc_html__('Promotional Cards List', 'cubewp-framework'),
     2372            'fields'      => $repeater_CARDS->get_controls(),
     2373            'default'     => [],
     2374            'title_field' => '{{{ cubewp_promotional_card_option }}}',
     2375            'condition'   => [
     2376                'cubewp_promotional_card' => 'yes',
     2377            ],
     2378        ));
     2379
     2380        $this->end_controls_section();
     2381    }
    22902382}
  • cubewp-framework/trunk/cube/classes/shortcodes/class-cubewp-shortcode-posts.php

    r3339163 r3362001  
    1616        new CubeWp_Ajax('', 'CubeWp_Shortcode_Posts', 'cubewp_posts_output');
    1717        new CubeWp_Ajax('wp_ajax_nopriv_', 'CubeWp_Shortcode_Posts', 'cubewp_posts_output');
     18        add_action('wp_enqueue_scripts', [$this, 'cubewp_enqueue_slick_for_elementor'], 999);
     19        add_action('elementor/editor/after_enqueue_scripts', [$this, 'cubewp_enqueue_slick_for_elementor']);
    1820    }
    1921
    2022    public static function cubewp_posts($output, array $parameters)
    2123    {
    22         return self::cubewp_posts_output($parameters);
    23     }
     24        $cwp_enable_slider = isset($parameters['cwp_enable_slider']) ? $parameters['cwp_enable_slider'] : '';
     25        if ($cwp_enable_slider) {
     26            CubeWp_Enqueue::enqueue_style('cubewp-slick');
     27            CubeWp_Enqueue::enqueue_script('cubewp-slick');
     28        }
     29        if (cubewp_is_elementor_editing()) {
     30            return self::cubewp_posts_output($parameters);
     31        }
     32
     33        $slides_to_show = isset($parameters['slides_to_show']) ? intval($parameters['slides_to_show']) : 3;
     34        $slides_to_show_tablet = isset($parameters['slides_to_show_tablet']) ? intval($parameters['slides_to_show_tablet']) : 2;
     35        $slides_to_show_mobile = isset($parameters['slides_to_show_mobile']) ? intval($parameters['slides_to_show_mobile']) : 1;
     36        $processing_grids_per_row = isset($parameters['processing_grids_per_row']) ? intval($parameters['processing_grids_per_row']) : 4;
     37
     38        $posts_per_row = isset($parameters['posts_per_row']) ? $parameters['posts_per_row'] : 'auto';
     39        $posts_per_row_tablet = (isset($parameters['posts_per_row_tablet']) && $parameters['posts_per_row_tablet'] !== 'auto') ? $parameters['posts_per_row_tablet'] : 3;
     40        $posts_per_row_mobile = (isset($parameters['posts_per_row_mobile']) && $parameters['posts_per_row_mobile'] !== 'auto') ? $parameters['posts_per_row_mobile'] : 2;
     41       
     42        if($cwp_enable_slider){
     43            $processing_grids_per_row = $slides_to_show;
     44            $posts_per_row_tablet = $slides_to_show_tablet;
     45            $posts_per_row_mobile = $slides_to_show_mobile;
     46        }
     47
     48        $processing_grid_count = $processing_grids_per_row;
     49
     50        if ($posts_per_row !== 'auto' && !$cwp_enable_slider) {
     51            $processing_grids_per_row = $posts_per_row;
     52            $processing_grid_count = isset($parameters['number_of_posts']) ? $parameters['number_of_posts'] : 4;
     53        }
     54
     55        $unique_id = uniqid('cubewp_posts_');
     56
     57        // Container start
     58        $output .= '<div id="' . esc_attr($unique_id) . '" class="cubewp-ajax-posts-container" data-parameters="' . htmlspecialchars(json_encode($parameters), ENT_QUOTES, 'UTF-8') . '">
     59        <div class="cubewp-processing-posts-container" style="display: flex; flex-wrap: wrap; gap: 10px;">';
     60
     61        for ($i = 0; $i < $processing_grid_count; $i++) {
     62            $output .=
     63                '<div class="cwp-processing-post-grid">'
     64                . '<div class="cwp-processing-post-thumbnail"></div>'
     65                . '<div class="cwp-processing-post-content"><p></p><p></p><p></p></div>'
     66                . '</div>';
     67        }
     68
     69        $output .= '</div></div>';
     70
     71        //Dynamic CSS per instance
     72        $output .= '<style>
     73        #' . esc_attr($unique_id) . ' .cwp-processing-post-grid {
     74            flex-basis: calc(100% / ' . esc_attr($processing_grids_per_row) . ' - 10px);
     75            max-width: calc(100% / ' . esc_attr($processing_grids_per_row) . ' - 10px);
     76        }';
     77
     78        if ($posts_per_row_tablet !== 'auto') {
     79            $output .= '
     80        @media (max-width: 1024px) {
     81            #' . esc_attr($unique_id) . ' .cwp-processing-post-grid {
     82                flex-basis: calc(100% / ' . esc_attr($posts_per_row_tablet) . ' - 10px);
     83                max-width: calc(100% / ' . esc_attr($posts_per_row_tablet) . ' - 10px);
     84            }
     85        }';
     86        }
     87
     88        if ($posts_per_row_mobile !== 'auto') {
     89            $output .= '
     90        @media (max-width: 767px) {
     91            #' . esc_attr($unique_id) . ' .cwp-processing-post-grid {
     92                flex-basis: calc(100% / ' . esc_attr($posts_per_row_mobile) . ' - 10px);
     93                max-width: calc(100% / ' . esc_attr($posts_per_row_mobile) . ' - 10px);
     94            }
     95        }';
     96        }
     97
     98        $output .= '</style>';
     99
     100        // Ajax loader
     101        $output .= '<script type="text/javascript">
     102        jQuery(window).on("load", function () {
     103            setTimeout(function () {
     104                CubeWpShortcodePostsAjax.loadPosts("#' . esc_attr($unique_id) . '");
     105            }, 500);
     106        });
     107    </script>';
     108
     109        return $output;
     110    }
     111
    24112
    25113    public static function cubewp_posts_output($parameters)
    26114    {
    27 
    28         // AJAX CALL
    29         if (wp_doing_ajax() && isset($_REQUEST['action']) && $_REQUEST['action'] === 'cubewp_posts_output') {
    30             // Set $parameters to $_POST if it's an AJAX request for 'cubewp_posts_output'
     115        if (wp_doing_ajax() && isset($_REQUEST['action']) && $_REQUEST['action'] === 'cubewp_posts_output' && !cubewp_is_elementor_editing()) {
    31116            $parameters = $_POST;
    32117        }
    33118
    34119        $cwp_enable_slider = isset($parameters['cwp_enable_slider']) ? $parameters['cwp_enable_slider'] : '';
    35         $prev_icon = isset($parameters['prev_icon']) ? $parameters['prev_icon'] : 'fas fa-chevron-left';
    36         $next_icon = isset($parameters['next_icon']) ? $parameters['next_icon'] : 'fas fa-chevron-right';
    37         $slides_to_show = isset($parameters['slides_to_show']) ? intval($parameters['slides_to_show']) : 3;
    38         $slides_to_scroll = isset($parameters['slides_to_scroll']) ? intval($parameters['slides_to_scroll']) : 1;
    39         $slides_to_show_tablet = isset($parameters['slides_to_show_tablet']) ? intval($parameters['slides_to_show_tablet']) : 3;
    40         $slides_to_show_tablet_portrait = isset($parameters['slides_to_show_tablet_portrait']) ? intval($parameters['slides_to_show_tablet_portrait']) : 2;
    41         $slides_to_show_mobile = isset($parameters['slides_to_show_mobile']) ? intval($parameters['slides_to_show_mobile']) : 1;
    42         $slides_to_scroll_tablet = isset($parameters['slides_to_scroll_tablet']) ? intval($parameters['slides_to_scroll_tablet']) : 1;
    43         $slides_to_scroll_tablet_portrait = isset($parameters['slides_to_scroll_tablet_portrait']) ? intval($parameters['slides_to_scroll_tablet_portrait']) : 1;
    44         $slides_to_scroll_mobile = isset($parameters['slides_to_scroll_mobile']) ? intval($parameters['slides_to_scroll_mobile']) : 1;
    45         $autoplay = isset($parameters['autoplay']) && $parameters['autoplay'] ? 'true' : 'false';
    46         $autoplay_speed = isset($parameters['autoplay_speed']) ? intval($parameters['autoplay_speed']) : 2000;
    47         $speed = isset($parameters['speed']) ? intval($parameters['speed']) : 500;
    48         $infinite = isset($parameters['infinite']) && $parameters['infinite'] ? 'true' : 'false';
    49         $fade_effect = isset($parameters['fade_effect']) && $parameters['fade_effect'] ? 'true' : 'false';
    50         $variable_width = isset($parameters['variable_width']) && $parameters['variable_width'] ? 'true' : 'false';
    51         $custom_arrows = isset($parameters['custom_arrows']) && $parameters['custom_arrows'] ? 'true' : 'false';
    52         $custom_dots = isset($parameters['custom_dots']) && $parameters['custom_dots'] ? 'true' : 'false';
    53         $enable_progress_bar = isset($parameters['enable_progress_bar']) && $parameters['enable_progress_bar'] ? 'true' : 'false';
    54         $enable_wrap_dots_arrows = isset($parameters['enable_wrap_dots_arrows']) && $parameters['enable_wrap_dots_arrows'] ? 'true' : 'false';
    55 
    56         $next_icon_type = isset($parameters['next_icon_type']) && $parameters['next_icon_type'] ? 'true' : 'false';
    57         $prev_icon_type = isset($parameters['prev_icon_type']) && $parameters['prev_icon_type'] ? 'true' : 'false';
     120        if ($cwp_enable_slider) {
     121            $prev_icon = isset($parameters['prev_icon']) ? $parameters['prev_icon'] : 'fas fa-chevron-left';
     122            $next_icon = isset($parameters['next_icon']) ? $parameters['next_icon'] : 'fas fa-chevron-right';
     123            $slides_to_show = isset($parameters['slides_to_show']) ? intval($parameters['slides_to_show']) : 3;
     124            $slides_to_scroll = isset($parameters['slides_to_scroll']) ? intval($parameters['slides_to_scroll']) : 1;
     125            $slides_to_show_tablet = isset($parameters['slides_to_show_tablet']) ? intval($parameters['slides_to_show_tablet']) : 3;
     126            $slides_to_show_tablet_portrait = isset($parameters['slides_to_show_tablet_portrait']) ? intval($parameters['slides_to_show_tablet_portrait']) : 2;
     127            $slides_to_show_mobile = isset($parameters['slides_to_show_mobile']) ? intval($parameters['slides_to_show_mobile']) : 1;
     128            $slides_to_scroll_tablet = isset($parameters['slides_to_scroll_tablet']) ? intval($parameters['slides_to_scroll_tablet']) : 1;
     129            $slides_to_scroll_tablet_portrait = isset($parameters['slides_to_scroll_tablet_portrait']) ? intval($parameters['slides_to_scroll_tablet_portrait']) : 1;
     130            $slides_to_scroll_mobile = isset($parameters['slides_to_scroll_mobile']) ? intval($parameters['slides_to_scroll_mobile']) : 1;
     131            $autoplay = isset($parameters['autoplay']) ? $parameters['autoplay'] : 'false';
     132            $autoplay_speed = isset($parameters['autoplay_speed']) ? intval($parameters['autoplay_speed']) : 2000;
     133            $speed = isset($parameters['speed']) ? intval($parameters['speed']) : 500;
     134            $infinite = (isset($parameters['infinite']) && $parameters['infinite'] === 'true') ? 'true' : 'false';
     135            $fade_effect = (isset($parameters['fade_effect']) && $parameters['fade_effect'] === 'true') ? 'true' : 'false';
     136            $variable_width = (isset($parameters['variable_width']) && $parameters['variable_width'] === 'true') ? 'true' : 'false';
     137            $custom_arrows = (isset($parameters['custom_arrows']) && $parameters['custom_arrows'] === 'true') ? 'true' : 'false';
     138            $enable_progress_bar = (isset($parameters['enable_progress_bar']) && $parameters['enable_progress_bar'] === 'true') ? 'true' : 'false';
     139            $custom_dots = (isset($parameters['custom_dots']) && $parameters['custom_dots'] === 'true') ? 'true' : 'false';
     140            $enable_wrap_dots_arrows = (isset($parameters['enable_wrap_dots_arrows']) && $parameters['enable_wrap_dots_arrows'] === 'true') ? 'true' : 'false';
     141        }
     142        $promotional_card = $parameters['promotional_card'];
     143        $promotional_card_list = $parameters['promotional_cards'];
    58144
    59145        $args = array(
     
    65151        );
    66152
    67         if (isset($parameters['number_of_posts'])) {
    68             $args['posts_per_page'] = $parameters['number_of_posts'];
    69         }
    70 
    71         if (isset($parameters['posts_per_page'])) {
    72             $args['posts_per_page'] = $parameters['posts_per_page'];
     153        if (isset($parameters['number_of_posts']) && $parameters['number_of_posts'] !== '') {
     154            $args['posts_per_page'] = intval($parameters['number_of_posts']);
     155        } elseif (isset($parameters['posts_per_page']) && $parameters['posts_per_page'] !== '') {
     156            $args['posts_per_page'] = intval($parameters['posts_per_page']);
    73157        }
    74158
     
    76160            $args['page_num'] = $parameters['page_num'];
    77161        }
     162
     163        $posts_per_row = isset($parameters['posts_per_row']) ? $parameters['posts_per_row'] : 'auto';
     164        $posts_per_row_tablet = isset($parameters['posts_per_row_tablet']) ? $parameters['posts_per_row_tablet'] : 'auto';
     165        $posts_per_row_mobile = isset($parameters['posts_per_row_mobile']) ? $parameters['posts_per_row_mobile'] : 'auto';
     166        if ($cwp_enable_slider) {
     167            $posts_per_row = $slides_to_show;
     168            $posts_per_row_tablet = $slides_to_show_tablet;
     169            $posts_per_row_mobile = $slides_to_show_mobile;
     170        }
     171
     172        $posts_row_class = '';
     173        if ($posts_per_row !== 'auto' && $posts_per_row !== '' && $posts_per_row !== null) {
     174            $desktop_val = intval($posts_per_row);
     175            $tablet_val = ($posts_per_row_tablet === 'auto' || $posts_per_row_tablet === '' || !is_numeric($posts_per_row_tablet))
     176                ? $desktop_val
     177                : intval($posts_per_row_tablet);
     178
     179            $mobile_val = ($posts_per_row_mobile === 'auto' || $posts_per_row_mobile === '' || !is_numeric($posts_per_row_mobile))
     180                ? $desktop_val
     181                : intval($posts_per_row_mobile);
     182            $posts_row_class = sprintf(
     183                'cubewp-posts-row-%1$s cubewp-posts-row-tablet-%2$s cubewp-posts-row-mobile-%3$s',
     184                $desktop_val,
     185                $tablet_val,
     186                $mobile_val
     187            );
     188        }
     189
     190
    78191
    79192        $show_boosted_posts = '';
     
    110223        }
    111224
     225
     226
    112227        $layout = $parameters['layout'];
    113228        $row_class = 'grid-view';
     
    121236        $slider_class = $cwp_enable_slider === 'cubewp-post-slider' ? 'cubewp-post-slider' : '';
    122237        $container_open = '<div class="cubewp-posts-shortcode cwp-row ' . esc_attr($slider_class) . '"';
    123         $container_open .= ' data-prev-arrow="' . esc_attr($prev_icon) . '"';
    124         $container_open .= ' data-next-arrow="' . esc_attr($next_icon) . '"';
    125         $container_open .= ' data-prev-icon-type="' . esc_attr($prev_icon_type) . '"';
    126         $container_open .= ' data-next-icon-type="' . esc_attr($next_icon_type) . '"';
    127         $container_open .= ' data-slides-to-show="' . esc_attr($slides_to_show) . '"';
    128         $container_open .= ' data-slides-to-scroll="' . esc_attr($slides_to_scroll) . '"';
    129         $container_open .= ' data-slides-to-show-tablet="' . esc_attr($slides_to_show_tablet) . '"';
    130         $container_open .= ' data-slides-show-tablet-portrait="' . esc_attr($slides_to_show_tablet_portrait) . '"';
    131         $container_open .= ' data-slides-to-show-mobile="' . esc_attr($slides_to_show_mobile) . '"';
    132         $container_open .= ' data-slides-to-scroll-tablet="' . esc_attr($slides_to_scroll_tablet) . '"';
    133         $container_open .= ' data-slides-scroll-tablet-portrait="' . esc_attr($slides_to_scroll_tablet_portrait) . '"';
    134         $container_open .= ' data-slides-to-scroll-mobile="' . esc_attr($slides_to_scroll_mobile) . '"';
    135         $container_open .= ' data-autoplay="' . esc_attr($autoplay) . '"';
    136         $container_open .= ' data-autoplay-speed="' . esc_attr($autoplay_speed) . '"';
    137         $container_open .= ' data-speed="' . esc_attr($speed) . '"';
    138         $container_open .= ' data-infinite="' . esc_attr($infinite) . '"';
    139         $container_open .= ' data-fade="' . esc_attr($fade_effect) . '"';
    140         $container_open .= ' data-variable-width="' . esc_attr($variable_width) . '"';
    141         $container_open .= ' data-custom-arrows="' . esc_attr($custom_arrows) . '"';
    142         $container_open .= ' data-custom-dots="' . esc_attr($custom_dots) . '"';
    143         $container_open .= ' data-enable-progress-bar="' . esc_attr($enable_progress_bar) . '"';
    144         $container_open .= ' data-enable-wrapper="' . esc_attr($enable_wrap_dots_arrows) . '"';
     238        if ($cwp_enable_slider) {
     239
     240            $prev_icon = self::cubewp_get_svg_content($prev_icon);
     241            $next_icon = self::cubewp_get_svg_content($next_icon);
     242
     243            $is_prev_svg = strpos(trim($prev_icon), '<svg') === 0;
     244            $is_next_svg = strpos(trim($next_icon), '<svg') === 0;
     245
     246            if ($is_prev_svg) {
     247
     248                $container_open .= " data-prev-arrow-svg='" . $prev_icon . "'";
     249                $container_open .= ' data-is-prev-svg="true"';
     250            } else {
     251                $container_open .= ' data-prev-arrow="' . esc_attr($prev_icon) . '"';
     252                $container_open .= ' data-is-prev-svg="false"';
     253            }
     254
     255            if ($is_next_svg) {
     256                $container_open .= " data-next-arrow-svg='" . $next_icon . "'";
     257                $container_open .= ' data-is-next-svg="true"';
     258            } else {
     259                $container_open .= ' data-next-arrow="' . esc_attr($next_icon) . '"';
     260                $container_open .= ' data-is-next-svg="false"';
     261            }
     262
     263
     264
     265            $container_open .= ' data-slides-to-show="' . esc_attr($slides_to_show) . '"';
     266            $container_open .= ' data-slides-to-scroll="' . esc_attr($slides_to_scroll) . '"';
     267            $container_open .= ' data-slides-to-show-tablet="' . esc_attr($slides_to_show_tablet) . '"';
     268            $container_open .= ' data-slides-show-tablet-portrait="' . esc_attr($slides_to_show_tablet_portrait) . '"';
     269            $container_open .= ' data-slides-to-show-mobile="' . esc_attr($slides_to_show_mobile) . '"';
     270            $container_open .= ' data-slides-to-scroll-tablet="' . esc_attr($slides_to_scroll_tablet) . '"';
     271            $container_open .= ' data-slides-scroll-tablet-portrait="' . esc_attr($slides_to_scroll_tablet_portrait) . '"';
     272            $container_open .= ' data-slides-to-scroll-mobile="' . esc_attr($slides_to_scroll_mobile) . '"';
     273            $container_open .= ' data-autoplay="' . esc_attr($autoplay) . '"';
     274            $container_open .= ' data-autoplay-speed="' . esc_attr($autoplay_speed) . '"';
     275            $container_open .= ' data-speed="' . esc_attr($speed) . '"';
     276            $container_open .= ' data-infinite="' . esc_attr($infinite) . '"';
     277            $container_open .= ' data-fade="' . esc_attr($fade_effect) . '"';
     278            $container_open .= ' data-variable-width="' . esc_attr($variable_width) . '"';
     279            $container_open .= ' data-custom-arrows="' . esc_attr($custom_arrows) . '"';
     280            $container_open .= ' data-custom-dots="' . esc_attr($custom_dots) . '"';
     281            $container_open .= ' data-enable-progress-bar="' . esc_attr($enable_progress_bar) . '"';
     282            $container_open .= ' data-enable-wrapper="' . esc_attr($enable_wrap_dots_arrows) . '"';
     283        }
    145284        $container_open .= '>';
    146285        $container_close = '</div>';
    147286
     287        $counter        = 1;
     288        $has_more_posts = false;
    148289        if ($posts->have_posts()) {
    149             CubeWp_Enqueue::enqueue_style('cubewp-slick');
    150             CubeWp_Enqueue::enqueue_script('cubewp-slick');
     290            if ($posts_row_class) {
     291                add_filter('post_class', function ($classes) use ($posts_row_class) {
     292                    $classes[] = $posts_row_class;
     293                    return $classes;
     294                });
     295            }
     296            $post_markup = $container_open;
     297            $promotional_cards = [];
     298            if ($promotional_card && !empty($promotional_card_list) && is_array($promotional_card_list)) {
     299                foreach ($promotional_card_list as $promotional_card) {
     300                    // Check required keys exist and are valid
     301                    if (isset($promotional_card['cubewp_promotional_card_option'])) {
     302                        $option = $promotional_card['cubewp_promotional_card_option'];
     303                        $width = $promotional_card['cubewp_promotional_card_width']['size'] . $promotional_card['cubewp_promotional_card_width']['unit'];
     304                        $position = $promotional_card['cubewp_promotional_card_position'];
     305
     306                        $promotional_cards[$position] = [
     307                            'option' => $option,
     308                            'width' => $width,
     309                        ];
     310                    }
     311                }
     312            }
    151313            if ($show_boosted_posts == 'yes') {
    152314                if (class_exists('CubeWp_Booster_Load')) {
     
    156318                        if (function_exists('is_boosted')) {
    157319                            if (is_boosted(get_the_ID())) {
     320                                if ($promotional_card && isset($promotional_cards[$counter]) && !empty($promotional_cards[$counter])) {
     321                                    $promotional_cardID =  $promotional_cards[$counter]['option'];
     322                                    $width = $promotional_cards[$counter]['width'];
     323                                    $post_markup .= cubewp_promotional_card_output($promotional_cardID, $width);
     324                                }
     325                                $counter++;
    158326                                $post_markup .= CubeWp_frontend_grid_HTML(get_the_ID(), '', $style);
    159327                            }
     
    165333                    $post_type = get_post_type(get_the_ID());
    166334                    $style = isset($parameters['card_style'][$post_type]) ? $parameters['card_style'][$post_type] : '';
     335                    if ($promotional_card && isset($promotional_cards[$counter]) && !empty($promotional_cards[$counter])) {
     336                        $promotional_cardID =  $promotional_cards[$counter]['option'];
     337                        $width = $promotional_cards[$counter]['width'];
     338                        $post_markup .= cubewp_promotional_card_output($promotional_cardID, $width);
     339                    }
     340                    $counter++;
    167341                    $post_markup .= CubeWp_frontend_grid_HTML(get_the_ID(), '', $style);
    168342                endwhile;
     
    185359                </div>';
    186360            }
     361            $post_markup .= $container_close;
     362            if ($posts_row_class) {
     363                remove_all_filters('post_class'); // or remove using the closure reference if needed
     364            }
    187365        } else {
    188366            $post_markup = self::cwp_no_result_found();
     
    190368        wp_reset_query();
    191369
    192         if (wp_doing_ajax() && isset($_REQUEST['action']) && $_REQUEST['action'] === 'cubewp_posts_output') {
     370        if (wp_doing_ajax() && isset($_REQUEST['action']) && $_REQUEST['action'] === 'cubewp_posts_output' && !cubewp_is_elementor_editing()) {
    193371            wp_send_json_success(array('content' => $post_markup, 'newAttributes' => $parameters, 'has_more_posts' => $has_more_posts));
    194372        } else {
    195             return $container_open . $post_markup . $container_close . $load_btn;
     373            return $post_markup . $load_btn;
    196374        }
    197375    }
     
    208386        $output = '<div class="cwp-widget-shortcode">';
    209387        if (! empty($title)) {
    210             $output .= '<h2 class="cwp-widget-shortcode-heading">' . $title . '</h2>';
    211         }
    212         $output .= apply_filters('cubewp_shortcode_posts_output', '', $parameters);
     388            $output .= '<h2 class="cwp-widget-shortcode-heading">' . esc_html($title) . '</h2>';
     389        }
     390        if (isset($parameters['load_via_ajax']) && $parameters['load_via_ajax'] === 'yes' && !wp_doing_ajax()) {
     391            $unique_id = uniqid('cubewp_posts_');
     392            $output .= '<div id="' . esc_attr($unique_id) . '" class="cubewp-ajax-posts-container" data-parameters="' . wp_json_encode($parameters) . '">
     393                            <div class="cubewp-processing-card">
     394                                <div class="cubewp-processing-card-inner">
     395                                    <div class="cubewp-processing-card-icon">
     396                                        <i class="fas fa-spinner fa-spin"></i>
     397                                    </div>
     398                                    <div class="cubewp-processing-card-text">
     399                                        Processing...
     400                                    </div>
     401                                </div>
     402                            </div>
     403                        </div>';
     404            $output .= '<script type="text/javascript">
     405                        jQuery(window).on("load", function () {
     406                            setTimeout(function () {
     407                                CubeWpShortcodePostsAjax.loadPosts("#' . esc_attr($unique_id) . '");
     408                            }, 1000); // 1000ms = 1 second
     409                        });
     410                        </script>';
     411        } else {
     412            $output .= apply_filters('cubewp_shortcode_posts_output', '', $parameters);
     413        }
    213414        $output .= '</div>';
    214415
     
    220421        return '<div class="cwp-empty-search"><img class="cwp-empty-search-img" src="' . esc_url(CWP_PLUGIN_URI . 'cube/assets/frontend/images/no-result.png') . '" alt=""><h2>' . esc_html__('No Results Found', 'cubewp-framework') . '</h2><p>' . esc_html__('There are no results matching your search.', 'cubewp-framework') . '</p></div>';
    221422    }
     423
     424    private static function cubewp_get_svg_content($icon)
     425    {
     426        // If icon is array with 'url', fetch the content
     427        if (is_array($icon) && isset($icon['url'])) {
     428            $response = wp_safe_remote_get($icon['url']);
     429            if (!is_wp_error($response) && 200 === wp_remote_retrieve_response_code($response)) {
     430                return wp_remote_retrieve_body($response);
     431            }
     432            return ''; // fallback if fetch fails
     433        }
     434
     435        // If icon is string, return it
     436        if (is_string($icon)) {
     437            return $icon;
     438        }
     439
     440        return ''; // fallback
     441    }
     442
     443    public function cubewp_enqueue_slick_for_elementor()
     444    {
     445        $is_elementor_editor = false;
     446
     447        // Method 1: Check URL parameters
     448        if (isset($_GET['action']) && $_GET['action'] === 'elementor') {
     449            $is_elementor_editor = true;
     450        }
     451
     452        // Method 2: Check for elementor-preview parameter
     453        if (isset($_GET['elementor-preview'])) {
     454            $is_elementor_editor = true;
     455        }
     456
     457        // Method 3: Check if Elementor editor is in edit mode
     458        if (
     459            class_exists('\Elementor\Plugin') &&
     460            isset(\Elementor\Plugin::$instance) &&
     461            \Elementor\Plugin::$instance->editor &&
     462            \Elementor\Plugin::$instance->editor->is_edit_mode()
     463        ) {
     464            $is_elementor_editor = true;
     465        }
     466
     467        // Enqueue only if in Elementor editor
     468        if ($is_elementor_editor) {
     469            CubeWp_Enqueue::enqueue_style('cubewp-slick');
     470            CubeWp_Enqueue::enqueue_script('cubewp-slick');
     471        }
     472    }
    222473}
  • cubewp-framework/trunk/cube/classes/shortcodes/class-cubewp-shortcode-taxonomy.php

    r2844650 r3362001  
    11<?php
    2 defined( 'ABSPATH' ) || exit;
     2defined('ABSPATH') || exit;
    33
    44/**
     
    77 * @class CubeWp_Frontend_Taxonomy_Shortcode
    88 */
    9 class CubeWp_Shortcode_Taxonomy {
    10     public function __construct() {
    11         add_shortcode( 'cubewp_shortcode_taxonomy', array( $this, 'cubewp_shortcode_taxonomy_callback' ) );
    12         add_filter( 'cubewp_shortcode_taxonomy_output', array( $this, 'cubewp_taxonomy_output' ), 10, 2 );
    13     }
    14 
    15     public static function cubewp_taxonomy_output( $output, $parameters = array()) {
    16         if(empty($parameters) || count($parameters) == 0)
    17         return;
    18 
    19         wp_enqueue_style( 'cwp-taxonomy-shortcode' );
     9class CubeWp_Shortcode_Taxonomy
     10{
     11    public function __construct()
     12    {
     13        add_shortcode('cubewp_shortcode_taxonomy', array($this, 'cubewp_shortcode_taxonomy_callback'));
     14        add_filter('cubewp_shortcode_taxonomy_output', array($this, 'cubewp_taxonomy_output'), 10, 2);
     15    }
     16
     17    public static function cubewp_taxonomy_output($output, $parameters = array())
     18    {
     19        if (empty($parameters) || count($parameters) == 0)
     20            return;
     21
     22        wp_enqueue_style('cwp-taxonomy-shortcode');
    2023        $taxonomy        = isset($parameters['taxonomy']) ? $parameters['taxonomy'] : '';
    21         if(empty($taxonomy))
    22         return;
     24        if (empty($taxonomy))
     25            return;
    2326
    2427        $terms_per_page  = $parameters['terms_per_page'];
     
    3235        $hide_empty      = false;
    3336        $col_class       = '';
    34         if ( $_child_terms == 'yes' ) {
     37        if ($_child_terms == 'yes') {
    3538            $child_terms = true;
    3639        }
    37         if ( $_hide_empty == 'yes' ) {
     40        if ($_hide_empty == 'yes') {
    3841            $hide_empty = true;
    3942        }
    40         if ( $column_per_row == '0' ) {
     43        if ($column_per_row == '0') {
    4144            $col_class = 'cwp-col-12 cwp-col-md-auto';
    4245        }
    43         if ( $column_per_row == '1' ) {
     46        if ($column_per_row == '1') {
    4447            $col_class = 'cwp-col-12';
    4548        }
    46         if ( $column_per_row == '2' ) {
     49        if ($column_per_row == '2') {
    4750            $col_class = 'cwp-col-12 cwp-col-md-6';
    4851        }
    49         if ( $column_per_row == '3' ) {
     52        if ($column_per_row == '3') {
    5053            $col_class = 'cwp-col-12 cwp-col-md-6 cwp-col-lg-4';
    5154        }
    52         if ( $column_per_row == '4' ) {
     55        if ($column_per_row == '4') {
    5356            $col_class = 'cwp-col-12 cwp-col-md-6 cwp-col-lg-3';
    5457        }
    55         if ( $column_per_row == '6' ) {
     58        if ($column_per_row == '6') {
    5659            $col_class = 'cwp-col-12 cwp-col-md-6 cwp-col-lg-2';
    5760        }
     
    6265            'number'     => $terms_per_page,
    6366        );
    64         $terms = get_terms( $args );
     67        $terms = get_terms($args);
    6568        ob_start();
    66         if ( ! empty( $terms ) && is_array( $terms ) ) {
     69        if (! empty($terms) && is_array($terms)) {
    6770            $counter = 0;
    68             ?>
    69             <div class="cwp-row">
    70                 <?php foreach ( $terms as $term ) {
     71?>
     72            <div class="cwp-row">
     73                <?php foreach ($terms as $term) {
    7174                    $term_id   = $term->term_id;
    7275                    $term_name = $term->name;
    73                     if ( $output_style == 'boxed_view' ) {
    74                         $color_count = count( $terms_box_color );
    75                         $icon_media  = get_term_meta( $term_id, $icon_media_name, true );
    76                         $color       = $terms_box_color[ $counter ]['term_box_color'];
    77                         $counter ++;
    78                         if ( $counter >= $color_count ) {
     76                    if ($output_style == 'boxed_view') {
     77                        $color_count = count($terms_box_color);
     78                        $icon_media  = get_term_meta($term_id, $icon_media_name, true);
     79                        $color = isset($terms_box_color[$counter]['term_box_color'])
     80                            ? sanitize_hex_color($terms_box_color[$counter]['term_box_color'])
     81                            : '#000000';
     82                        $counter++;
     83                        if ($counter >= $color_count) {
    7984                            $counter = 0;
    8085                        }
    81                         ?>
    82                         <div class="<?php echo esc_attr( $col_class ); ?>">
    83                             <div class="cwp-taxonomy-term-box">
    84                                 <div class="cwp-taxonomy-term-box-heading"
    85                                      style="background-color: <?php echo esc_html( $color ); ?>">
     86                ?>
     87                        <div class="<?php echo esc_attr($col_class); ?>">
     88                            <div class="cwp-taxonomy-term-box">
     89                                <div class="cwp-taxonomy-term-box-heading"
     90                                    style="background-color: <?php echo esc_html($color); ?>">
    8691                                    <?php
    87                                     if ( ! is_array( $icon_media ) ) {
    88                                         if ( $icon_media != strip_tags( $icon_media ) ) {
    89                                            echo cubewp_core_data( $icon_media );
    90                                         } else if ( is_numeric( $icon_media ) ) {
    91                                            $icon_media = wp_get_attachment_url( $icon_media );
    92                                            echo '<img src="' . esc_attr($icon_media) . '" alt="' . esc_attr($term_name) . '">
     92                                    if (! is_array($icon_media)) {
     93                                        if ($icon_media != strip_tags($icon_media)) {
     94                                            echo cubewp_core_data($icon_media);
     95                                        } else if (is_numeric($icon_media)) {
     96                                            $icon_media = wp_get_attachment_url($icon_media);
     97                                            echo '<img src="' . esc_url($icon_media) . '" alt="' . esc_attr($term_name) . '">
    9398                                                                        <div class="cwp-taxonomy-term-box-heading-overlay" style="background-color: ' . esc_attr($color) . ';"></div>';
    9499                                        } else {
    95                                            echo '<i class="' . esc_attr($icon_media) . '" aria-hidden="true"></i>';
     100                                            echo '<i class="' . esc_attr($icon_media) . '" aria-hidden="true"></i>';
    96101                                        }
    97                                      }
     102                                    }
    98103                                    ?>
    99                                     <a href="<?php echo get_term_link( $term_id ) ?>"><?php echo esc_html( $term_name ); ?></a>
    100                                 </div>
     104                                    <a href="<?php echo esc_url( get_term_link( $term_id ) ); ?>"><?php echo esc_html( $term_name ); ?></a>
     105                                </div>
    101106                                <?php
    102                                 if ( $child_terms ) {
     107                                if ($child_terms) {
    103108                                    $term_child_args = array(
    104109                                        'taxonomy'   => $taxonomy,
     
    106111                                        'parent'     => $term_id,
    107112                                    );
    108                                     $term_childs     = get_terms( $term_child_args );
    109                                     if ( ! empty( $term_childs ) && is_array( $term_childs ) ) {
    110                                         ?>
    111                                         <ul class="cwp-taxonomy-term-child-terms">
     113                                    $term_childs     = get_terms($term_child_args);
     114                                    if (! empty($term_childs) && is_array($term_childs)) {
     115                                ?>
     116                                        <ul class="cwp-taxonomy-term-child-terms">
    112117                                            <?php
    113                                             $child_terms_count = count( $term_childs );
     118                                            $child_terms_count = count($term_childs);
    114119                                            $term_counter      = 1;
    115                                             foreach ( $term_childs as $term_child ) {
     120                                            foreach ($term_childs as $term_child) {
    116121                                                $child_term_id   = $term_child->term_id;
    117122                                                $child_term_name = $term_child->name;
    118                                                 if ( $child_terms_count > 5 && 5 == $term_counter ) {
    119                                                     ?>
    120                                                     <li>
    121                                                         <a href="#"
    122                                                            class="cwp-taxonomy-term-child-terms-see-more"
    123                                                            data-more="<?php esc_html_e( "View More", "cubewp-framework" ); ?>"
    124                                                            data-less="<?php esc_html_e( "View Less", "cubewp-framework" ); ?>"><?php esc_html_e( "View More", "cubewp-framework" ); ?></a>
    125                                                     </li>
    126                                                     <ul class="cwp-taxonomy-term-child-terms-more">
     123                                                if ($child_terms_count > 5 && 5 == $term_counter) {
     124                                            ?>
     125                                                    <li>
     126                                                        <a href="#"
     127                                                            class="cwp-taxonomy-term-child-terms-see-more"
     128                                                            data-more="<?php esc_html_e("View More", "cubewp-framework"); ?>"
     129                                                            data-less="<?php esc_html_e("View Less", "cubewp-framework"); ?>"><?php esc_html_e("View More", "cubewp-framework"); ?></a>
     130                                                    </li>
     131                                                    <ul class="cwp-taxonomy-term-child-terms-more">
    127132                                                    <?php
    128133                                                }
    129                                                 ?>
    130                                                 <li>
    131                                                     <a href="<?php echo get_term_link( $child_term_id ) ?>"><?php echo esc_html( $child_term_name ); ?></a>
    132                                                 </li>
    133                                                 <?php
    134                                                 if ( $child_terms_count > 5 && $child_terms_count == $term_counter ) {
    135134                                                    ?>
    136                                                     </ul>
     135                                                    <li>
     136                                                        <a href="<?php echo get_term_link($child_term_id) ?>"><?php echo esc_html($child_term_name); ?></a>
     137                                                    </li>
    137138                                                    <?php
     139                                                    if ($child_terms_count > 5 && $child_terms_count == $term_counter) {
     140                                                    ?>
     141                                                    </ul>
     142                                            <?php
     143                                                    }
     144                                                    $term_counter++;
    138145                                                }
    139                                                 $term_counter ++;
    140                                             }
    141                                             ?>
    142                                         </ul>
    143                                         <?php
     146                                            ?>
     147                                        </ul>
     148                                <?php
    144149                                    }
    145150                                }
    146151                                ?>
    147                             </div>
    148                         </div>
    149                         <?php
    150                     } else if ( $output_style == 'list_view' ) {
    151                         ?>
    152                         <div class="<?php esc_attr_e( $col_class ); ?>">
    153                             <div class="cwp-taxonomy-term-list">
    154                                 <a href="<?php echo get_term_link( $term_id ) ?>"><?php echo esc_html( $term_name ); ?></a>
     152                            </div>
     153                        </div>
     154                    <?php
     155                    } else if ($output_style == 'list_view') {
     156                    ?>
     157                        <div class="<?php esc_attr_e($col_class); ?>">
     158                            <div class="cwp-taxonomy-term-list">
     159                                <a href="<?php echo get_term_link($term_id) ?>"><?php echo esc_html($term_name); ?></a>
    155160                                <?php
    156                                 if ( $child_terms ) {
     161                                if ($child_terms) {
    157162                                    $term_child_args = array(
    158163                                        'taxonomy'   => $taxonomy,
     
    160165                                        'parent'     => $term_id,
    161166                                    );
    162                                     $term_childs     = get_terms( $term_child_args );
    163                                     if ( ! empty( $term_childs ) && is_array( $term_childs ) ) {
    164                                         ?>
    165                                         <ul><?php
    166                                         foreach ( $term_childs as $term_child ) {
    167                                             $child_term_id   = $term_child->term_id;
    168                                             $child_term_name = $term_child->name;
    169                                             ?>
    170                                             <li>
    171                                                 <a href="<?php echo get_term_link( $child_term_id ) ?>"><?php echo esc_html( $child_term_name ); ?></a>
    172                                             </li>
     167                                    $term_childs     = get_terms($term_child_args);
     168                                    if (! empty($term_childs) && is_array($term_childs)) {
     169                                ?>
     170                                        <ul><?php
     171                                            foreach ($term_childs as $term_child) {
     172                                                $child_term_id   = $term_child->term_id;
     173                                                $child_term_name = $term_child->name;
     174                                            ?>
     175                                                <li>
     176                                                    <a href="<?php echo get_term_link($child_term_id) ?>"><?php echo esc_html($child_term_name); ?></a>
     177                                                </li>
    173178                                            <?php
     179                                            }
     180                                            ?>
     181                                        </ul><?php
     182                                            }
    174183                                        }
    175                                         ?>
    176                                         </ul><?php
    177                                     }
    178                                 }
    179                                 ?>
    180                             </div>
    181                         </div>
    182                         <?php
     184                                                ?>
     185                            </div>
     186                        </div>
     187                <?php
    183188                    }
    184189                } ?>
    185             </div>
    186             <?php
     190            </div>
     191<?php
    187192        }
    188193
     
    190195    }
    191196
    192     public static function init() {
     197    public static function init()
     198    {
    193199        $CubeWPClass = __CLASS__;
    194200        new $CubeWPClass;
    195201    }
    196202
    197     public function cubewp_shortcode_taxonomy_callback( $parameters ) {
    198         $title  = isset( $parameters['title'] ) ? $parameters['title'] : '';
     203    public function cubewp_shortcode_taxonomy_callback($parameters)
     204    {
     205        $title  = isset($parameters['title']) ? sanitize_text_field($parameters['title']) : '';
    199206        $output = '<div class="cwp-widget-shortcode">';
    200         if ( ! empty( $title ) ) {
    201             $output .= '<h2 class="cwp-widget-shortcode-heading">' . $title . '</h2>';
    202         }
    203         $output .= apply_filters( 'cubewp_shortcode_taxonomy_output', '', $parameters );
     207
     208        if (! empty($title)) {
     209            $output .= '<h2 class="cwp-widget-shortcode-heading">' . esc_html($title) . '</h2>';
     210        }
     211
     212        $output .= apply_filters('cubewp_shortcode_taxonomy_output', '', $parameters);
    204213        $output .= '</div>';
    205214
  • cubewp-framework/trunk/cube/functions/admin-functions.php

    r3339163 r3362001  
    622622            <?php } ?>
    623623        </ul>
    624 <?php
     624    <?php
    625625        return ob_get_clean();
    626626    }
     
    28832883    add_action('elementor/frontend/before_render', 'render_cubewp_mega_menu_options', 25);
    28842884}
     2885
     2886if (!function_exists('cubewp_get_get_promotional_cards_list')) {
     2887    function cubewp_get_get_promotional_cards_list()
     2888    {
     2889        $args = array(
     2890            'post_type'      => 'cubewp-tb',
     2891            'meta_query'     => array(
     2892                array('key' => 'template_location', 'value' => 'cubewp_post_loop_promotional_card', 'compare' => '=',),
     2893            ),
     2894            'posts_per_page' => -1,
     2895        );
     2896
     2897        $posts = get_posts($args);
     2898        $cubewp_promotional_cards = [];
     2899
     2900        foreach ($posts as $post) {
     2901            $cubewp_promotional_cards[$post->ID] = array($post->post_title);
     2902        }
     2903
     2904        return $cubewp_promotional_cards;
     2905    }
     2906}
     2907
     2908if (!function_exists('cubewp_promotional_card_output')) {
     2909    function cubewp_promotional_card_output($promotional_cardID, $width)
     2910    {
     2911        ob_start();
     2912
     2913        if (empty($width) || empty($promotional_cardID)) {
     2914            return '';
     2915        }
     2916    ?>
     2917        <div style="width:<?php echo esc_attr($width); ?>">
     2918            <?php
     2919            if (class_exists('\Elementor\Plugin') && \Elementor\Plugin::$instance->documents) {
     2920                $document = \Elementor\Plugin::$instance->documents->get($promotional_cardID);
     2921                if ($document && $document->is_built_with_elementor()) {
     2922                    echo \Elementor\Plugin::$instance->frontend->get_builder_content_for_display($promotional_cardID);
     2923                }
     2924            }
     2925            ?>
     2926        </div>
     2927<?php
     2928
     2929        return ob_get_clean();
     2930    }
     2931}
  • cubewp-framework/trunk/cube/modules/custom-fields/class-cubewp-custom-fields-markup.php

    r3155340 r3362001  
    10381038        );
    10391039
    1040         $field_settings = apply_filters('cubewp/custom_fields/single/subfield/add', $field_settings, $FieldData);
     1040        $field_settings = apply_filters('cubewp/custom_fields/single/subfield/add', $field_settings, $FieldData, $parent_field);
    10411041        $field_name = !empty($FieldData['label']) ? $FieldData['label'] : esc_html__('Field Label', 'cubewp-framework');
    10421042        $closed_class = (isset($FieldData['label']) && $FieldData['label'] != '') ? 'closed' : '';
  • cubewp-framework/trunk/cube/modules/search/class-cubewp-search-ajax-hooks.php

    r3155340 r3362001  
    11<?php
     2
    23/**
    34 * display fields of custom fields.
     
    78 */
    89
    9 if ( ! defined( 'ABSPATH' ) ) {
     10if (! defined('ABSPATH')) {
    1011    exit;
    1112}
     
    1415 * CubeWp_Search_Ajax_Hooks
    1516 */
    16 class CubeWp_Search_Ajax_Hooks{
    17    
     17class CubeWp_Search_Ajax_Hooks
     18{
     19
    1820    private static $terms = null;
    19        
     21
    2022    /**
    2123     * Method cwp_search_filters_ajax_content
     
    2426     * @since  1.0.0
    2527     */
    26     public static function cwp_search_filters_ajax_content(){
     28    public static function cwp_search_filters_ajax_content()
     29    {
    2730        global $cwpOptions;
    2831        $archive_map = isset($cwpOptions['archive_map']) ? $cwpOptions['archive_map'] : 1;
    2932        $archive_filters = isset($cwpOptions['archive_filters']) ? $cwpOptions['archive_filters'] : 1;
    30         $posts_per_page = isset($cwpOptions['archive_posts_per_page']) ? $cwpOptions['archive_posts_per_page'] : 10;
     33        $posts_per_page = isset($cwpOptions['archive_posts_per_page']) ? $cwpOptions['archive_posts_per_page'] : 10;
    3134        $grid_class = 'cwp-col-12 cwp-col-md-6';
    32         if ( ! $archive_map || ! $archive_filters) {
     35        if (! $archive_map || ! $archive_filters) {
    3336            $grid_class = 'cwp-col-12 cwp-col-md-4';
    3437        }
    3538        $latLng = array();
    3639        $post_data = CubeWp_Sanitize_text_Array($_POST);
    37        
     40
    3841        $post_type = isset($post_data['post_type']) ? $post_data['post_type'] : '';
    3942
    40         $post_data['posts_per_page'] = apply_filters( 'cubewp/search/post_per_page', $posts_per_page, $post_data );
     43        $post_data['posts_per_page'] = apply_filters('cubewp/search/post_per_page', $posts_per_page, $post_data);
    4144
    42         $_DATA = apply_filters('cubewp/search/query/update',$post_data,sanitize_text_field($post_type));
    43        
     45        $_DATA = apply_filters('cubewp/search/query/update', $post_data, sanitize_text_field($post_type));
     46
    4447        $page_num     =  isset($_DATA['page_num']) ? $_DATA['page_num'] : 1;
    4548        $post_type    =  isset($_DATA['post_type']) ? $_DATA['post_type'] : '';
     
    4952        $query = new CubeWp_Query($_DATA);
    5053        $the_query = $query->cubewp_post_query();
    51        
     54
     55
     56
    5257        $grid_view_html = '';
    53         if($the_query->have_posts()){
     58        if ($the_query->have_posts()) {
    5459            ob_start();
    55                 $data_args = array(
    56                     'total_posts'    => $the_query->found_posts,
    57                     'terms' => self::$terms,
    58                     'data' => $_DATA,
    59                 );
    60                 $data = apply_filters('cubewp_frontend_search_data', '', $data_args);
    61                 echo apply_filters('cubewp/frontend/before/search/loop', '');
    62                 ?>
    63                 <div class="cwp-grids-container cwp-row <?php echo esc_attr(cwp_get_post_card_view()); ?>">
     60            $data_args = array(
     61                'total_posts'    => $the_query->found_posts,
     62                'terms' => self::$terms,
     63                'data' => $_DATA,
     64            );
     65            $data = apply_filters('cubewp_frontend_search_data', '', $data_args);
     66            echo apply_filters('cubewp/frontend/before/search/loop', '');
     67
     68            $promotional_cards = [];
     69            foreach ($_DATA as $key => $value) {
     70                if (strpos($key, 'cubewp_promotional_card_option-') !== false) {
     71                    preg_match('/-(\d+)$/', $key, $matches);
     72                    $index = $matches[1] ?? null;
     73                    if ($index !== null && isset($_DATA["cubewp_promotional_card_position-$index"])) {
     74                        $position = $_DATA["cubewp_promotional_card_position-$index"] ?? null;
     75                        if ($position !== null) {
     76                            $promotional_cards[$position] = [
     77                                'option' => $value, // direct value (string now)
     78                                'width'  => $_DATA["cubewp_promotional_card_width-$index"] ?? '',
     79                            ];
     80                        }
     81                    }
     82                }
     83            }
     84
     85?>
     86            <div class="cwp-grids-container cwp-row <?php echo esc_attr(cwp_get_post_card_view()); ?>">
    6487                <?php
    65                     while($the_query->have_posts()): $the_query->the_post();
    66                     if(get_the_ID()){
    67                         if(!empty(self::cwp_map_lat_lng(get_the_ID()))){
     88                $counter = 1;
     89                while ($the_query->have_posts()): $the_query->the_post();
     90                    if (get_the_ID()) {
     91                        if (!empty(self::cwp_map_lat_lng(get_the_ID()))) {
    6892                            $latLng[] = self::cwp_map_lat_lng(get_the_ID());
    6993                        }
    70                         echo CubeWp_frontend_grid_HTML(get_the_ID(), $grid_class,$style);
     94                        if (isset($promotional_cards[$counter]) && !empty($promotional_cards[$counter])) {
     95                            $promotional_cardID =  $promotional_cards[$counter]['option'];
     96                            $width = $promotional_cards[$counter]['width'];
     97                            echo cubewp_promotional_card_output($promotional_cardID, $width);
     98                        }
     99                        echo CubeWp_frontend_grid_HTML(get_the_ID(), $grid_class, $style);
     100                        $counter++;
    71101                    }
    72                     endwhile;
     102                endwhile;
    73103                ?>
    74                 </div>
    75                 <?php
    76                 $pagination_args = array(
    77                     'total_posts'    => $the_query->found_posts,
    78                     'posts_per_page' => $post_per_page,
    79                     'page_num'       => $page_num
    80                 );
    81                 echo apply_filters('cubewp_frontend_posts_pagination', '', $pagination_args);
    82                 echo apply_filters('cubewp/frontend/after/search/loop', '');
    83                 $grid_view_html = ob_get_contents();
     104            </div>
     105<?php
     106            $pagination_args = array(
     107                'total_posts'    => $the_query->found_posts,
     108                'posts_per_page' => $post_per_page,
     109                'page_num'       => $page_num
     110            );
     111            echo apply_filters('cubewp_frontend_posts_pagination', '', $pagination_args);
     112            echo apply_filters('cubewp/frontend/after/search/loop', '');
     113            $grid_view_html = ob_get_contents();
    84114            ob_end_clean();
    85         }else{
     115        } else {
    86116            $grid_view_html = self::cwp_no_result_found();
    87117        }
    88118        wp_reset_query();
    89         if(empty($latLng)) $latLng = '';
    90         if(empty($data)) $data = '';
    91        
    92         wp_send_json( array( 'post_data_details' => $data, 'map_cordinates' =>  $latLng, 'grid_view_html' => $grid_view_html ) );
    93        
     119        if (empty($latLng)) $latLng = '';
     120        if (empty($data)) $data = '';
     121
     122        wp_send_json(array('post_data_details' => $data, 'map_cordinates' =>  $latLng, 'grid_view_html' => $grid_view_html));
    94123    }
    95    
    96     public static function cwp_map_lat_lng($postid=''){
    97         $Map=array();
    98         $map_meta_key = self::cwp_map_meta_key(get_post_type( $postid ));
    99         if($map_meta_key && !empty($map_meta_key) && !empty($postid)){
    100             $Lat = get_post_meta($postid, $map_meta_key.'_lat', true);
    101             $Lng = get_post_meta($postid, $map_meta_key.'_lng', true);
    102             if(!empty($Lat) && !empty($Lng)){
     124
     125    public static function cwp_map_lat_lng($postid = '')
     126    {
     127        $Map = array();
     128        $map_meta_key = self::cwp_map_meta_key(get_post_type($postid));
     129        if ($map_meta_key && !empty($map_meta_key) && !empty($postid)) {
     130            $Lat = get_post_meta($postid, $map_meta_key . '_lat', true);
     131            $Lng = get_post_meta($postid, $map_meta_key . '_lng', true);
     132            if (!empty($Lat) && !empty($Lng)) {
    103133                $Map[0] = $Lat;
    104134                $Map[1] = $Lng;
     
    106136                $Map[3] = get_the_permalink($postid);
    107137                $Map[4] = cubewp_get_post_thumbnail_url($postid);
    108                 $Map[5] = apply_filters( 'cubewp/search_result/map/pin', '', $postid );
     138                $Map[5] = apply_filters('cubewp/search_result/map/pin', '', $postid);
    109139                return $Map;
    110140            }
    111141        }
    112142    }
    113    
    114     private static function cwp_map_meta_key($post_type=''){
    115         if(empty($post_type)) return;
    116         $options = CWP()->get_custom_fields( 'post_types' );
     143
     144    private static function cwp_map_meta_key($post_type = '')
     145    {
     146        if (empty($post_type)) return;
     147        $options = CWP()->get_custom_fields('post_types');
    117148        $options = $options == '' ? array() : $options;
    118         if(isset($options['cwp_map_meta'][$post_type]) && !empty($options['cwp_map_meta'][$post_type])){
     149        if (isset($options['cwp_map_meta'][$post_type]) && !empty($options['cwp_map_meta'][$post_type])) {
    119150            $MapMeta = $options['cwp_map_meta'][$post_type];
    120151            return $MapMeta;
    121152        }
    122153    }
    123    
    124     private static function cwp_no_result_found(){
    125         return '<div class="cwp-empty-search"><img class="cwp-empty-search-img" src="'.esc_url(CWP_PLUGIN_URI.'cube/assets/frontend/images/no-result.png').'" alt=""><h2>'.esc_html__('No Results Found','cubewp-framework').'</h2><p>'.esc_html__('There are no results matching your search.','cubewp-framework').'</p></div>';
     154
     155    private static function cwp_no_result_found()
     156    {
     157        return '<div class="cwp-empty-search"><img class="cwp-empty-search-img" src="' . esc_url(CWP_PLUGIN_URI . 'cube/assets/frontend/images/no-result.png') . '" alt=""><h2>' . esc_html__('No Results Found', 'cubewp-framework') . '</h2><p>' . esc_html__('There are no results matching your search.', 'cubewp-framework') . '</p></div>';
    126158    }
    127159}
  • cubewp-framework/trunk/cube/modules/theme-builder/class-cubewp-theme-builder-rules.php

    r3165528 r3362001  
    134134    public static function render_block_options() {
    135135        $template_options = '';
     136        $template_options .= '<option value="cubewp_post_loop_promotional_card">' . esc_html('CubeWP Post Loop Promotional Card' , 'cubewp-framework') . '</option>';
    136137        $blocks = is_array(apply_filters('cubewp/theme_builder/blocks', array())) ? apply_filters('cubewp/theme_builder/blocks', array()): array();
    137138        foreach ($blocks as $key => $label) {
  • cubewp-framework/trunk/cube/modules/theme-builder/class-cubewp-theme-builder.php

    r3339163 r3362001  
    272272            foreach ($existing_posts->posts as $existing_post_id) {
    273273                if ($existing_post_id != $post_id && $template_type != 'mega-menu') {
     274                    continue;
     275                } elseif ($existing_post_id != $post_id && $template_type != 'cubewp_post_promotional_card') {
     276                    continue;
     277                } else {
    274278                    wp_update_post(array(
    275279                        'ID' => $existing_post_id,
  • cubewp-framework/trunk/languages/cubewp-framework.pot

    r3339163 r3362001  
    55"Project-Id-Version: cubewp-framework\n"
    66"Report-Msgid-Bugs-To: \n"
    7 "POT-Creation-Date: 2025-07-08 16:16+0500\n"
     7"POT-Creation-Date: 2025-09-15 23:35+0500\n"
    88"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
    99"Last-Translator: cland <[email protected]>\n"
     
    1515"POT-Revision-Date: Tue Mar 08 2016 16:05:54 GMT+0500 (Pakistan Standard Time)\n"
    1616"X-Poedit-SourceCharset: UTF-8\n"
    17 "X-Generator: Poedit 3.5\n"
    18 "X-Poedit-KeywordsList: _:1;gettext:1;dgettext:2;ngettext:1,2;dngettext:2,3;__:1;"
    19 "_e:1;_c:1;_n:1,2;_n_noop:1,2;_nc:1,2;__ngettext:1,2;__ngettext_noop:1,2;_x:1,2c;"
    20 "_ex:1,2c;_nx:1,2,4c;_nx_noop:1,2,3c;_n_js:1,2;_nx_js:1,2,3c;esc_attr__:1;"
    21 "esc_html__:1;esc_attr_e:1;esc_html_e:1;esc_attr_x:1,2c;esc_html_x:1,2c;"
    22 "comments_number_link:2,3;t:1;st:1;trans:1;transChoice:1,2\n"
     17"X-Generator: Poedit 3.7\n"
     18"X-Poedit-KeywordsList: "
     19"_:1;gettext:1;dgettext:2;ngettext:1,2;dngettext:2,3;__:1;_e:1;_c:1;_n:1,2;_n_noop:1,2;_nc:1,2;__ngettext:1,2;__ngettext_noop:1,2;_x:1,2c;_ex:1,2c;_nx:1,2,4c;_nx_noop:1,2,3c;_n_js:1,2;_nx_js:1,2,3c;esc_attr__:1;esc_html__:1;esc_attr_e:1;esc_html_e:1;esc_attr_x:1,2c;esc_html_x:1,2c;comments_number_link:2,3;t:1;st:1;trans:1;transChoice:1,2\n"
    2320"X-Poedit-Basepath: ..\n"
    2421"X-Textdomain-Support: yes\n"
     
    294291msgstr[1] ""
    295292
    296 #: cube/classes/class-cubewp-builder-ui.php:151
     293#: cube/classes/class-cubewp-builder-ui.php:158
    297294msgid "PRO"
    298295msgstr ""
    299296
    300 #: cube/classes/class-cubewp-builder-ui.php:276
    301 #: cube/classes/class-cubewp-builder-ui.php:630
     297#: cube/classes/class-cubewp-builder-ui.php:181
     298msgid "CubeWP Custom Cubes"
     299msgstr ""
     300
     301#: cube/classes/class-cubewp-builder-ui.php:316
     302#: cube/classes/class-cubewp-builder-ui.php:681
    302303msgid "No Custom Post Type Found."
    303304msgstr ""
    304305
    305 #: cube/classes/class-cubewp-builder-ui.php:419
     306#: cube/classes/class-cubewp-builder-ui.php:464
    306307msgid "Create Sections For Content Area"
    307308msgstr ""
    308309
    309 #: cube/classes/class-cubewp-builder-ui.php:425
     310#: cube/classes/class-cubewp-builder-ui.php:470
    310311msgid "Create Sections For Sidebar"
    311312msgstr ""
    312313
    313 #: cube/classes/class-cubewp-builder-ui.php:513
     314#: cube/classes/class-cubewp-builder-ui.php:561
     315#: cube/classes/class-cubewp-builder-ui.php:647
     316msgid "Create Section"
     317msgstr ""
     318
    314319#: cube/classes/class-cubewp-builder-ui.php:595
    315 msgid "Create Section"
    316 msgstr ""
    317 
    318 #: cube/classes/class-cubewp-builder-ui.php:545
    319320#: cube/modules/builder/class-cubewp-loop-builder.php:133
    320321msgid "Save Changes"
    321322msgstr ""
    322323
    323 #: cube/classes/class-cubewp-builder-ui.php:565
     324#: cube/classes/class-cubewp-builder-ui.php:616
    324325#: cube/classes/class-cubewp-form-builder.php:623
    325326#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-cubewp-form-widget.php:43
     
    327328msgstr ""
    328329
    329 #: cube/classes/class-cubewp-builder-ui.php:580
     330#: cube/classes/class-cubewp-builder-ui.php:632
    330331msgid "No Section Image"
    331332msgstr ""
    332333
    333 #: cube/classes/class-cubewp-builder-ui.php:582
     334#: cube/classes/class-cubewp-builder-ui.php:634
    334335msgid "Let's build something awesome today!"
    335336msgstr ""
    336337
    337 #: cube/classes/class-cubewp-builder-ui.php:585
    338 #: cube/classes/class-cubewp-builder-ui.php:587
     338#: cube/classes/class-cubewp-builder-ui.php:637
     339#: cube/classes/class-cubewp-builder-ui.php:639
    339340msgid "1"
    340341msgstr ""
    341342
    342 #: cube/classes/class-cubewp-builder-ui.php:585
     343#: cube/classes/class-cubewp-builder-ui.php:637
    343344msgid "Select a Post Type"
    344345msgstr ""
    345346
    346 #: cube/classes/class-cubewp-builder-ui.php:587
     347#: cube/classes/class-cubewp-builder-ui.php:639
    347348msgid "Select a User Role"
    348349msgstr ""
    349350
    350 #: cube/classes/class-cubewp-builder-ui.php:589
     351#: cube/classes/class-cubewp-builder-ui.php:641
    351352msgid "2"
    352353msgstr ""
    353354
    354 #: cube/classes/class-cubewp-builder-ui.php:589
     355#: cube/classes/class-cubewp-builder-ui.php:641
    355356msgid "Create a Section"
    356357msgstr ""
    357358
    358 #: cube/classes/class-cubewp-builder-ui.php:590
     359#: cube/classes/class-cubewp-builder-ui.php:642
     360#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-archive-posts-widget.php:146
     361#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:2343
    359362msgid "3"
    360363msgstr ""
    361364
    362 #: cube/classes/class-cubewp-builder-ui.php:590
     365#: cube/classes/class-cubewp-builder-ui.php:642
    363366msgid "Drag a Form Field"
    364367msgstr ""
    365368
    366 #: cube/classes/class-cubewp-builder-ui.php:591
     369#: cube/classes/class-cubewp-builder-ui.php:643
    367370msgid "4"
    368371msgstr ""
    369372
    370 #: cube/classes/class-cubewp-builder-ui.php:591
     373#: cube/classes/class-cubewp-builder-ui.php:643
    371374msgid "Hit Save Changes"
    372375msgstr ""
    373376
    374 #: cube/classes/class-cubewp-builder-ui.php:616
     377#: cube/classes/class-cubewp-builder-ui.php:668
    375378msgid "Or Copy Content From"
    376379msgstr ""
    377380
    378 #: cube/classes/class-cubewp-builder-ui.php:622
     381#: cube/classes/class-cubewp-builder-ui.php:674
    379382msgid "Copy"
    380383msgstr ""
     
    610613#: cube/classes/class-cubewp-form-builder.php:600
    611614#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-cubewp-form-widget.php:298
    612 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:593
    613 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:711
    614 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1333
    615 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1980
     615#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:622
     616#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:752
     617#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1384
     618#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:2031
    616619#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-search-widget.php:152
    617620#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-search-widget.php:1039
     
    634637#: cube/classes/class-cubewp-form-builder.php:600
    635638#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-cubewp-form-widget.php:297
    636 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:592
    637 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:710
    638 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1332
    639 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1979
     639#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:621
     640#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:751
     641#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1383
     642#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:2030
    640643#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-search-widget.php:151
    641644#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-search-widget.php:1038
     
    809812
    810813#: cube/classes/class-cubewp-frontend.php:439
    811 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:78
     814#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:79
    812815#: cube/classes/page-builders/vc-elements/class-cubewp-vc-posts-widget.php:51
    813816#: cube/functions/fields-helper.php:182
     
    820823
    821824#: cube/classes/class-cubewp-frontend.php:440
    822 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:80
     825#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:81
    823826#: cube/classes/page-builders/vc-elements/class-cubewp-vc-posts-widget.php:52
    824827#: cube/includes/widgets/class-cubewp-posts-widget.php:122
     
    11411144msgstr ""
    11421145
    1143 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-archive-posts-widget.php:25
     1146#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-archive-posts-widget.php:28
    11441147msgid "Archive Posts Display"
    11451148msgstr ""
    11461149
    1147 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-archive-posts-widget.php:43
     1150#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-archive-posts-widget.php:49
    11481151msgid "Search Posts Settings"
    11491152msgstr ""
    11501153
    1151 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-archive-posts-widget.php:81
    1152 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:264
     1154#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-archive-posts-widget.php:92
     1155#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:327
    11531156#: cube/functions/settings/cubewp-default-options.php:34
    11541157#: cube/functions/settings/cubewp-default-options.php:395
     
    11561159msgstr ""
    11571160
    1158 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-archive-posts-widget.php:96
    1159 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:281
     1161#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-archive-posts-widget.php:108
     1162#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:344
    11601163msgid "Card Style for "
     1164msgstr ""
     1165
     1166#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-archive-posts-widget.php:123
     1167#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:2320
     1168msgid "Promotional Card Settings"
     1169msgstr ""
     1170
     1171#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-archive-posts-widget.php:129
     1172#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:2326
     1173msgid "Show Promotional Cards"
     1174msgstr ""
     1175
     1176#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-archive-posts-widget.php:138
     1177#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:2335
     1178msgid "Promotional Cards"
     1179msgstr ""
     1180
     1181#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-archive-posts-widget.php:144
     1182#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:2341
     1183#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-search-widget.php:2223
     1184msgid "Position"
     1185msgstr ""
     1186
     1187#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-archive-posts-widget.php:152
     1188#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:2348
     1189#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-search-widget.php:2117
     1190msgid "Width"
     1191msgstr ""
     1192
     1193#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-archive-posts-widget.php:169
     1194#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:2365
     1195msgid "Set the width of the card."
     1196msgstr ""
     1197
     1198#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-archive-posts-widget.php:175
     1199#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:2371
     1200msgid "Promotional Cards List"
    11611201msgstr ""
    11621202
     
    12181258#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-nav-menu-widget.php:548
    12191259#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-nav-menu-widget.php:832
    1220 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1088
     1260#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1129
    12211261#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-search-widget.php:562
    12221262#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-search-widget.php:831
     
    12341274#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-mega-menu-widget.php:348
    12351275#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-nav-menu-widget.php:845
     1276#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:2294
    12361277#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-search-widget.php:524
    12371278#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-search-widget.php:665
     
    13731414
    13741415#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-cubewp-form-widget.php:269
    1375 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1348
     1416#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1399
    13761417msgid "Block"
    13771418msgstr ""
     
    13861427
    13871428#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-cubewp-form-widget.php:272
    1388 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1349
     1429#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1400
    13891430msgid "Flex"
    13901431msgstr ""
     
    14541495
    14551496#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-mega-menu-widget.php:199
    1456 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1368
     1497#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1419
    14571498#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-search-widget.php:337
    14581499#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-search-widget.php:2508
     
    14611502
    14621503#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-mega-menu-widget.php:203
    1463 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1369
     1504#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1420
    14641505#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-search-widget.php:338
    14651506#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-search-widget.php:2509
     
    14681509
    14691510#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-mega-menu-widget.php:207
    1470 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1370
     1511#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1421
    14711512#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-search-widget.php:339
    14721513#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-search-widget.php:2510
     
    14751516
    14761517#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-mega-menu-widget.php:211
    1477 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1371
     1518#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1422
    14781519#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-search-widget.php:340
    14791520#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-search-widget.php:2511
     
    14821523
    14831524#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-mega-menu-widget.php:224
    1484 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:2219
     1525#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:2270
    14851526msgid "Justify Content"
    14861527msgstr ""
     
    14981539#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-mega-menu-widget.php:237
    14991540#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-mega-menu-widget.php:279
    1500 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:2223
     1541#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:2274
    15011542#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-search-widget.php:79
    15021543msgid "Center"
     
    15041545
    15051546#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-mega-menu-widget.php:241
    1506 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:2225
     1547#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:2276
    15071548msgid "Space Between"
    15081549msgstr ""
    15091550
    15101551#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-mega-menu-widget.php:245
    1511 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:2226
     1552#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:2277
    15121553msgid "Space Around"
    15131554msgstr ""
    15141555
    15151556#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-mega-menu-widget.php:249
    1516 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:2227
     1557#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:2278
    15171558msgid "Space Evenly"
    15181559msgstr ""
     
    15881629#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-mega-menu-widget.php:521
    15891630#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-nav-menu-widget.php:715
    1590 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:2091
     1631#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:2142
    15911632#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-search-widget.php:78
    15921633#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-search-widget.php:1162
     
    16011642#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-mega-menu-widget.php:525
    16021643#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-nav-menu-widget.php:719
    1603 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:2095
     1644#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:2146
    16041645#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-search-widget.php:80
    16051646#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-search-widget.php:1163
     
    17011742#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-nav-menu-widget.php:309
    17021743#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-nav-menu-widget.php:823
    1703 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1072
     1744#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1113
    17041745#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-search-widget.php:544
    17051746#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-search-widget.php:813
     
    17611802
    17621803#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-nav-menu-widget.php:795
    1763 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:918
     1804#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:959
    17641805#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-search-widget.php:2393
    17651806#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-search-widget.php:2540
     
    17851826msgstr ""
    17861827
    1787 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:28
     1828#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:29
    17881829msgid "CubeWP Posts"
    17891830msgstr ""
    17901831
    1791 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:66
     1832#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:67
    17921833msgid "Query Options"
    17931834msgstr ""
    17941835
    1795 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:76
     1836#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:77
    17961837#: cube/classes/page-builders/vc-elements/class-cubewp-vc-posts-widget.php:47
    17971838msgid "Order By"
    17981839msgstr ""
    17991840
    1800 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:79
     1841#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:80
    18011842#: cube/classes/page-builders/vc-elements/class-cubewp-vc-posts-widget.php:50
    18021843msgid "Most Recent"
    18031844msgstr ""
    18041845
    1805 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:86
     1846#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:87
    18061847#: cube/classes/page-builders/vc-elements/class-cubewp-vc-posts-widget.php:58
    18071848#: cube/modules/list-tables/class-cubewp-post-types-custom-fields-table.php:46
     
    18111852msgstr ""
    18121853
    1813 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:88
     1854#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:89
    18141855#: cube/classes/page-builders/vc-elements/class-cubewp-vc-posts-widget.php:62
    18151856msgid "Ascending"
    18161857msgstr ""
    18171858
    1818 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:89
     1859#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:90
    18191860#: cube/classes/page-builders/vc-elements/class-cubewp-vc-posts-widget.php:61
    18201861msgid "Descending"
    18211862msgstr ""
    18221863
    1823 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:98
     1864#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:99
    18241865msgid "Number Of Posts"
    18251866msgstr ""
    18261867
    1827 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:100
     1868#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:101
    18281869msgid "All Posts"
    18291870msgstr ""
    18301871
    1831 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:101
     1872#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:102
    18321873msgid "1 Post"
    18331874msgstr ""
    18341875
    1835 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:102
     1876#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:103
    18361877msgid "2 Posts"
    18371878msgstr ""
    18381879
    1839 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:103
     1880#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:104
    18401881msgid "3 Posts"
    18411882msgstr ""
    18421883
    1843 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:104
     1884#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:105
    18441885msgid "4 Posts"
    18451886msgstr ""
    18461887
    1847 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:105
     1888#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:106
    18481889msgid "5 Posts"
    18491890msgstr ""
    18501891
    1851 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:106
     1892#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:107
    18521893msgid "6 Posts"
    18531894msgstr ""
    18541895
    1855 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:107
     1896#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:108
    18561897msgid "8 Posts"
    18571898msgstr ""
    18581899
    1859 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:108
     1900#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:109
    18601901msgid "9 Posts"
    18611902msgstr ""
    18621903
    1863 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:109
     1904#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:110
    18641905msgid "12 Posts"
    18651906msgstr ""
    18661907
    1867 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:110
     1908#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:111
    18681909msgid "16 Posts"
    18691910msgstr ""
    18701911
    1871 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:111
     1912#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:112
    18721913msgid "15 Posts"
    18731914msgstr ""
    18741915
    1875 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:112
     1916#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:113
    18761917msgid "20 Posts"
    18771918msgstr ""
    18781919
    1879 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:118
     1920#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:119
    18801921msgid "Load More Button"
    18811922msgstr ""
    18821923
    1883 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:126
     1924#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:127
    18841925#: cube/classes/page-builders/vc-elements/class-cubewp-vc-posts-widget.php:72
    18851926#: cube/functions/settings/cubewp-default-options.php:221
     
    18881929msgstr ""
    18891930
    1890 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:136
     1931#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:137
    18911932#: cube/classes/page-builders/vc-elements/class-cubewp-vc-posts-widget.php:91
    18921933#: cube/modules/custom-fields/class-cubewp-custom-fields-markup.php:1126
     
    18941935msgstr ""
    18951936
    1896 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:138
     1937#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:139
    18971938#: cube/classes/page-builders/vc-elements/class-cubewp-vc-posts-widget.php:94
    18981939msgid "Grid View"
    18991940msgstr ""
    19001941
    1901 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:139
     1942#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:140
    19021943#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-taxonomy-widget.php:91
    19031944#: cube/classes/page-builders/vc-elements/class-cubewp-vc-posts-widget.php:95
     
    19061947msgstr ""
    19071948
    1908 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:146
     1949#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:148
     1950msgid "Posts Per Row"
     1951msgstr ""
     1952
     1953#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:158
     1954#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:170
     1955#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:182
     1956msgid "Auto"
     1957msgstr ""
     1958
     1959#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:159
     1960#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:171
     1961#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:183
     1962msgid "1 Column"
     1963msgstr ""
     1964
     1965#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:160
     1966#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:172
     1967#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:184
     1968msgid "2 Columns"
     1969msgstr ""
     1970
     1971#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:161
     1972#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:173
     1973#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:185
     1974msgid "3 Columns"
     1975msgstr ""
     1976
     1977#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:162
     1978#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:174
     1979#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:186
     1980msgid "4 Columns"
     1981msgstr ""
     1982
     1983#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:163
     1984#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:175
     1985#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:187
     1986msgid "5 Columns"
     1987msgstr ""
     1988
     1989#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:164
     1990#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:176
     1991#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:188
     1992msgid "6 Columns"
     1993msgstr ""
     1994
     1995#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:198
     1996msgid "Processing Grids Per Row"
     1997msgstr ""
     1998
     1999#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:208
    19092000msgid "Enable Scroll on Small Devices"
    19102001msgstr ""
    19112002
    1912 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:148
     2003#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:210
    19132004msgid "Enable overflow scroll behaviour on small devices."
    19142005msgstr ""
    19152006
    1916 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:157
     2007#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:219
    19172008msgid "Filter By Meta / Custom Fields"
    19182009msgstr ""
    19192010
    1920 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:165
     2011#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:227
    19212012msgid "Filter By Meta / Custom Field"
    19222013msgstr ""
    19232014
    1924 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:171
     2015#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:233
    19252016msgid "Select Relation"
    19262017msgstr ""
    19272018
    1928 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:172
     2019#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:234
    19292020msgid ""
    19302021"e.g. If you have multiple custom field's conditions and you set relation OR "
     
    19322023msgstr ""
    19332024
    1934 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:174
     2025#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:236
    19352026msgid "OR"
    19362027msgstr ""
    19372028
    1938 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:175
     2029#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:237
    19392030msgid "AND"
    19402031msgstr ""
    19412032
    1942 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:187
     2033#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:249
    19432034msgid "Select Custom Field"
    19442035msgstr ""
    19452036
    1946 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:194
     2037#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:256
    19472038msgid "Put here meta value"
    19482039msgstr ""
    19492040
    1950 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:195
     2041#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:257
    19512042msgid "e.g. APPLE"
    19522043msgstr ""
    19532044
    1954 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:196
     2045#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:258
    19552046msgid ""
    19562047"e.g. If custom field is BRAND NAME, you can set value as APPLE to get all those "
     
    19582049msgstr ""
    19592050
    1960 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:202
     2051#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:264
    19612052msgid "Select Operator to compare "
    19622053msgstr ""
    19632054
    1964 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:203
     2055#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:265
    19652056msgid ""
    19662057"e.g. If going to select BETWEEN or NOT BETWEEN then add value like this [100, "
     
    19682059msgstr ""
    19692060
    1970 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:205
     2061#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:267
    19712062msgid "Equal"
    19722063msgstr ""
    19732064
    1974 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:206
     2065#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:268
    19752066msgid "Not Equal"
    19762067msgstr ""
    19772068
    1978 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:207
     2069#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:269
    19792070msgid "Greater Than"
    19802071msgstr ""
    19812072
    1982 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:208
     2073#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:270
    19832074msgid "Greater Than or Equal"
    19842075msgstr ""
    19852076
    1986 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:209
     2077#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:271
    19872078msgid "Less Than"
    19882079msgstr ""
    19892080
    1990 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:210
     2081#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:272
    19912082msgid "Less Than or Equal"
    19922083msgstr ""
    19932084
    1994 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:211
     2085#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:273
    19952086msgid "LIKE %"
    19962087msgstr ""
    19972088
    1998 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:212
     2089#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:274
    19992090msgid "NOT LIKE"
    20002091msgstr ""
    20012092
    2002 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:213
     2093#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:275
    20032094msgid "IN"
    20042095msgstr ""
    20052096
    2006 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:214
     2097#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:276
    20072098msgid "NOT IN"
    20082099msgstr ""
    20092100
    2010 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:215
     2101#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:277
    20112102msgid "BETWEEN"
    20122103msgstr ""
    20132104
    2014 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:216
     2105#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:278
    20152106msgid "NOT BETWEEN"
    20162107msgstr ""
    20172108
    2018 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:217
     2109#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:279
    20192110msgid "EXISTS"
    20202111msgstr ""
    20212112
    2022 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:218
     2113#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:280
    20232114msgid "NOT EXISTS"
    20242115msgstr ""
    20252116
    2026 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:228
     2117#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:290
    20272118msgid "Add Conditions"
    20282119msgstr ""
    20292120
    2030 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:265
     2121#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:328
    20312122msgid "You can select one or multiple post types to show post cards."
    20322123msgstr ""
    20332124
    2034 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:297
     2125#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:360
    20352126#: cube/modules/theme-builder/class-cubewp-theme-builder.php:73
    20362127msgid "All"
    20372128msgstr ""
    20382129
    2039 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:298
     2130#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:361
    20402131#: cube/classes/page-builders/vc-elements/class-cubewp-vc-posts-widget.php:145
    20412132msgid "By Taxonomy"
    20422133msgstr ""
    20432134
    2044 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:299
     2135#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:362
    20452136#: cube/classes/page-builders/vc-elements/class-cubewp-vc-posts-widget.php:146
    20462137msgid "By IDs"
    20472138msgstr ""
    20482139
    2049 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:302
     2140#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:365
    20502141msgid "Boosted Only"
    20512142msgstr ""
    20522143
    2053 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:306
     2144#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:369
    20542145#: cube/classes/page-builders/vc-elements/class-cubewp-vc-posts-widget.php:142
    20552146msgid "Show Posts"
    20562147msgstr ""
    20572148
    2058 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:327
     2149#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:390
    20592150msgid "Select Terms for "
    20602151msgstr ""
    20612152
    2062 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:328
     2153#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:391
    20632154#: cube/classes/page-builders/vc-elements/class-cubewp-vc-posts-widget.php:186
    20642155#: cube/classes/page-builders/vc-elements/class-cubewp-vc-posts-widget.php:209
     
    20662157msgstr ""
    20672158
    2068 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:345
     2159#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:408
    20692160msgid ""
    20702161"Enter post IDs separated by commas (e.g., 12, 45, 78). Leave empty to display "
     
    20722163msgstr ""
    20732164
    2074 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:582
     2165#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:611
    20752166msgid "Posts Slider"
    20762167msgstr ""
    20772168
    2078 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:590
     2169#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:619
    20792170msgid "Enable Slider"
    20802171msgstr ""
    20812172
    2082 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:606
     2173#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:635
    20832174msgid "Post Spacing"
    20842175msgstr ""
    20852176
    2086 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:618
     2177#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:647
    20872178msgid "Slides To Show"
    20882179msgstr ""
    20892180
    2090 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:623
     2181#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:652
    20912182msgid "Number of slides to show at once in the slider."
    20922183msgstr ""
    20932184
    2094 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:633
     2185#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:662
    20952186msgid "Slides To Scroll"
    20962187msgstr ""
    20972188
    2098 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:638
     2189#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:667
    20992190msgid "Number of slides to scroll at once in the slider."
    21002191msgstr ""
    21012192
    2102 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:649
     2193#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:678
    21032194msgid "Autoplay"
    21042195msgstr ""
    21052196
    2106 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:651
     2197#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:680
    21072198msgid "Enable or disable autoplay for the slider."
    21082199msgstr ""
    21092200
    2110 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:662
     2201#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:691
    21112202msgid "Autoplay Speed (ms)"
    21122203msgstr ""
    21132204
    2114 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:667
     2205#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:696
    21152206msgid "Set the speed for autoplay in milliseconds."
    21162207msgstr ""
    21172208
    2118 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:679
     2209#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:708
    21192210msgid "Speed (ms)"
    21202211msgstr ""
    21212212
    2122 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:684
     2213#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:713
    21232214msgid "Set the speed for the slider transition in milliseconds."
    21242215msgstr ""
    21252216
    2126 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:696
     2217#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:724
     2218msgid "Fade Effect"
     2219msgstr ""
     2220
     2221#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:726
     2222msgid "Enable fade effect for slides transition."
     2223msgstr ""
     2224
     2225#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:737
    21272226msgid "Infinite Loop"
    21282227msgstr ""
    21292228
    2130 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:698
     2229#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:739
    21312230msgid "Enable or disable infinite loop for the slider."
    21322231msgstr ""
    21332232
    2134 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:708
     2233#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:749
    21352234msgid "Variable Width"
    21362235msgstr ""
    21372236
    2138 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:723
     2237#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:764
    21392238msgid "Overflow Setting"
    21402239msgstr ""
    21412240
    2142 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:738
     2241#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:779
    21432242msgid "Enable Progress Bar"
    21442243msgstr ""
    21452244
    2146 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:749
     2245#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:790
    21472246msgid "Progress Bar Height"
    21482247msgstr ""
    21492248
    2150 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:776
     2249#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:817
    21512250msgid "Progress Bar Background Color"
    21522251msgstr ""
    21532252
    2154 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:792
     2253#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:833
    21552254msgid "Progress Bar Fill Color"
    21562255msgstr ""
    21572256
    2158 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:808
     2257#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:849
    21592258msgid "Progress Bar Margin Top"
    21602259msgstr ""
    21612260
    2162 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:846
     2261#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:887
    21632262msgid "Enable Arrows"
    21642263msgstr ""
    21652264
    2166 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:857
     2265#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:898
    21672266msgid "Previous Icon"
    21682267msgstr ""
    21692268
    2170 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:874
     2269#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:915
    21712270msgid "Next Icon"
    21722271msgstr ""
    21732272
    2174 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:891
     2273#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:932
    21752274msgid "Icon Size (px)"
    21762275msgstr ""
    21772276
    2178 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:934
     2277#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:975
    21792278#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-search-widget.php:2766
    21802279msgid "Icon Hover Color"
    21812280msgstr ""
    21822281
    2183 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:950
     2282#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:991
    21842283msgid "Icon & Svg Background Color"
    21852284msgstr ""
    21862285
    2187 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:966
     2286#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1007
    21882287msgid "Icon & Svg Hover Background Color"
    21892288msgstr ""
    21902289
    2191 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:982
     2290#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1023
    21922291msgid "SVG Color"
    21932292msgstr ""
    21942293
    2195 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:998
     2294#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1039
    21962295msgid "SVG Hover Color"
    21972296msgstr ""
    21982297
    2199 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1014
     2298#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1055
    22002299msgid "SVG Width"
    22012300msgstr ""
    22022301
    2203 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1043
     2302#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1084
    22042303msgid "SVG Height"
    22052304msgstr ""
    22062305
    2207 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1120
     2306#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1161
    22082307msgid "Border Color"
    22092308msgstr ""
    22102309
    2211 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1136
     2310#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1177
    22122311msgid "Border Color on Hover"
    22132312msgstr ""
    22142313
    2215 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1152
     2314#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1193
    22162315msgid "Transition Duration"
    22172316msgstr ""
    22182317
    2219 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1177
     2318#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1218
    22202319msgid "Icon & Svg Padding"
    22212320msgstr ""
    22222321
    2223 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1193
     2322#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1235
     2323msgid "Arrow Box Shadow"
     2324msgstr ""
     2325
     2326#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1244
    22242327msgid "Set the Icons Positions"
    22252328msgstr ""
    22262329
    2227 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1206
    2228 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:2014
     2330#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1257
     2331#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:2065
    22292332msgid "Top Position"
    22302333msgstr ""
    22312334
    2232 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1237
    2233 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:2050
     2335#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1288
     2336#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:2101
    22342337msgid "Bottom Position"
    22352338msgstr ""
    22362339
    2237 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1268
    2238 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:2146
     2340#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1319
     2341#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:2197
    22392342msgid "Left Position"
    22402343msgstr ""
    22412344
    2242 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1299
    2243 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:2110
     2345#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1350
     2346#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:2161
    22442347msgid "Right Position"
    22452348msgstr ""
    22462349
    2247 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1330
     2350#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1381
    22482351msgid "Enable Dots"
    22492352msgstr ""
    22502353
    2251 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1345
     2354#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1396
    22522355msgid "Dots Display"
    22532356msgstr ""
    22542357
    2255 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1365
     2358#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1416
    22562359msgid "Dots Flex Direction"
    22572360msgstr ""
    22582361
    2259 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1387
     2362#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1438
    22602363msgid "Dots Gap"
    22612364msgstr ""
    22622365
    2263 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1414
     2366#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1465
    22642367msgid "Dots Position"
    22652368msgstr ""
    22662369
    2267 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1417
     2370#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1468
    22682371#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-search-widget.php:2226
    22692372msgid "Static"
    22702373msgstr ""
    22712374
    2272 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1418
     2375#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1469
    22732376#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-search-widget.php:2228
    22742377msgid "Absolute"
    22752378msgstr ""
    22762379
    2277 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1419
     2380#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1470
    22782381#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-search-widget.php:2227
    22792382msgid "Relative"
    22802383msgstr ""
    22812384
    2282 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1420
     2385#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1471
    22832386#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-search-widget.php:2229
    22842387msgid "Fixed"
    22852388msgstr ""
    22862389
    2287 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1436
     2390#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1487
    22882391msgid "Dots Top Position"
    22892392msgstr ""
    22902393
    2291 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1468
     2394#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1519
    22922395msgid "Dots Bottom Position"
    22932396msgstr ""
    22942397
    2295 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1500
     2398#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1551
    22962399msgid "Dots Left Position"
    22972400msgstr ""
    22982401
    2299 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1532
     2402#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1583
    23002403msgid "Dots Right Position"
    23012404msgstr ""
    23022405
    2303 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1564
     2406#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1615
    23042407msgid "Dots Z-Index"
    23052408msgstr ""
    23062409
    2307 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1582
     2410#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1633
    23082411msgid "Dots Padding"
    23092412msgstr ""
    23102413
    2311 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1598
     2414#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1649
    23122415msgid "Dots Border Style"
    23132416msgstr ""
    23142417
    2315 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1602
     2418#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1653
    23162419msgid "None"
    23172420msgstr ""
    23182421
    2319 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1603
     2422#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1654
    23202423msgid "Solid"
    23212424msgstr ""
    23222425
    2323 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1604
     2426#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1655
    23242427msgid "Dotted"
    23252428msgstr ""
    23262429
    2327 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1605
     2430#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1656
    23282431msgid "Dashed"
    23292432msgstr ""
    23302433
    2331 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1620
     2434#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1671
    23322435msgid "Dots Border Width"
    23332436msgstr ""
    23342437
    2335 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1644
     2438#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1695
    23362439msgid "Dots Outside Padding"
    23372440msgstr ""
    23382441
    2339 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1660
     2442#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1711
    23402443msgid "Dots Outside Backgroud Color"
    23412444msgstr ""
    23422445
    2343 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1676
     2446#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1727
    23442447msgid "Active Dot Outside Backgroud Color"
    23452448msgstr ""
    23462449
    2347 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1692
     2450#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1743
    23482451msgid "Dots Border Color"
    23492452msgstr ""
    23502453
    2351 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1708
     2454#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1759
    23522455msgid "Active Dot Border Color"
    23532456msgstr ""
    23542457
    2355 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1724
     2458#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1775
    23562459msgid "Dots Border Radius"
    23572460msgstr ""
    23582461
    2359 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1743
     2462#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1794
    23602463msgid "Dots Background Color"
    23612464msgstr ""
    23622465
    2363 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1759
     2466#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1810
    23642467msgid "Active Dot Background Color"
    23652468msgstr ""
    23662469
    2367 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1775
     2470#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1826
    23682471msgid "Dots Width"
    23692472msgstr ""
    23702473
    2371 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1794
     2474#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1845
    23722475msgid "Dots Height"
    23732476msgstr ""
    23742477
    2375 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1813
     2478#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1864
    23762479msgid "Active Dot Width"
    23772480msgstr ""
    23782481
    2379 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1832
     2482#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1883
    23802483msgid "Active Dot Height"
    23812484msgstr ""
    23822485
    2383 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1851
     2486#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1902
    23842487msgid "Responsive Settings For Slides To Show And Scroll"
    23852488msgstr ""
    23862489
    2387 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1863
     2490#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1914
    23882491msgid "Slides To Show On (Tablet)"
    23892492msgstr ""
    23902493
    2391 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1878
     2494#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1929
    23922495msgid "Slides To Show On (Tablet Portrait)"
    23932496msgstr ""
    23942497
    2395 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1893
     2498#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1944
    23962499msgid "Slides To Show On (Mobile)"
    23972500msgstr ""
    23982501
    2399 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1919
     2502#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1970
    24002503msgid "Slides To Scroll On (Tablet)"
    24012504msgstr ""
    24022505
    2403 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1934
     2506#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1985
    24042507msgid "Slides To Scroll On (Tablet Portrait)"
    24052508msgstr ""
    24062509
    2407 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1949
     2510#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:2000
    24082511msgid "Slides To Scroll On (Mobile)"
    24092512msgstr ""
    24102513
    2411 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1965
     2514#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:2016
    24122515msgid "Wrap Dots With Arrows"
    24132516msgstr ""
    24142517
    2415 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1977
     2518#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:2028
    24162519msgid "Enable Wrap Dots With Arrows"
    24172520msgstr ""
    24182521
    2419 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1992
     2522#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:2043
    24202523msgid "Vertical Direction"
    24212524msgstr ""
    24222525
    2423 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:1996
     2526#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:2047
    24242527#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-search-widget.php:1211
    24252528#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-search-widget.php:1221
     
    24322535msgstr ""
    24332536
    2434 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:2000
     2537#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:2051
    24352538#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-search-widget.php:1212
    24362539#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-search-widget.php:1237
     
    24422545msgstr ""
    24432546
    2444 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:2087
     2547#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:2138
    24452548msgid "horizontal Direction"
    24462549msgstr ""
    24472550
    2448 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:2182
     2551#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:2233
    24492552msgid "Gap Between Items"
    24502553msgstr ""
    24512554
    2452 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:2222
     2555#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:2273
    24532556msgid "Flex Start"
    24542557msgstr ""
    24552558
    2456 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:2224
     2559#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-posts-widget.php:2275
    24572560msgid "Flex End"
    24582561msgstr ""
     
    28312934#: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-search-widget.php:2104
    28322935msgid " ( "
    2833 msgstr ""
    2834 
    2835 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-search-widget.php:2117
    2836 msgid "Width"
    2837 msgstr ""
    2838 
    2839 #: cube/classes/page-builders/elementor-widgets/class-cubewp-elementor-search-widget.php:2223
    2840 msgid "Position"
    28412936msgstr ""
    28422937
     
    31093204msgstr ""
    31103205
    3111 #: cube/classes/shortcodes/class-cubewp-shortcode-posts.php:181
     3206#: cube/classes/shortcodes/class-cubewp-shortcode-posts.php:357
    31123207msgid "Load More"
    31133208msgstr ""
    31143209
    3115 #: cube/classes/shortcodes/class-cubewp-shortcode-posts.php:218
    3116 #: cube/modules/search/class-cubewp-search-ajax-hooks.php:125
     3210#: cube/classes/shortcodes/class-cubewp-shortcode-posts.php:421
     3211#: cube/modules/search/class-cubewp-search-ajax-hooks.php:157
    31173212msgid "No Results Found"
    31183213msgstr ""
    31193214
    3120 #: cube/classes/shortcodes/class-cubewp-shortcode-posts.php:218
    3121 #: cube/modules/search/class-cubewp-search-ajax-hooks.php:125
     3215#: cube/classes/shortcodes/class-cubewp-shortcode-posts.php:421
     3216#: cube/modules/search/class-cubewp-search-ajax-hooks.php:157
    31223217msgid "There are no results matching your search."
    31233218msgstr ""
    31243219
    3125 #: cube/classes/shortcodes/class-cubewp-shortcode-taxonomy.php:123
    3126 #: cube/classes/shortcodes/class-cubewp-shortcode-taxonomy.php:124
     3220#: cube/classes/shortcodes/class-cubewp-shortcode-taxonomy.php:128
     3221#: cube/classes/shortcodes/class-cubewp-shortcode-taxonomy.php:129
    31273222msgid "View More"
    31283223msgstr ""
    31293224
    3130 #: cube/classes/shortcodes/class-cubewp-shortcode-taxonomy.php:124
     3225#: cube/classes/shortcodes/class-cubewp-shortcode-taxonomy.php:129
    31313226msgid "View Less"
    31323227msgstr ""
  • cubewp-framework/trunk/readme.txt

    r3349966 r3362001  
    66Requires PHP: 7.4
    77Tested up to: 6.8
    8 Stable tag: 1.1.26
     8Stable tag: 1.1.27
    99License: GPLv2 or later
    1010
     
    377377== Changelog ==
    378378
     379= 1.1.27 2025-09-01
     380
     381- UPDATED: Refactored CubeWP Posts Elementor Widget to use AJAX for loading posts, improving performance, adding a posts-per-row control, and fixing slick slider issues.
     382- ADDED: Option in CubeWP Posts and CubWP Archive Posts widget to enable a promotional card in the loop with enhanced controls.
     383- ADDED: Filter hook support for custom cubes in CubeWP Builder.
     384- SECURITY: Improved sanitization and escaping in cubewp posts and cubewp taxonomy shortcode outputs.
     385
    379386= 1.1.26 2025-08-26
    380387
Note: See TracChangeset for help on using the changeset viewer.