Plugin Directory

Changeset 3465591


Ignore:
Timestamp:
02/20/2026 09:22:22 AM (2 days ago)
Author:
wpcoder75
Message:
  • Added Image Marquee Widget with smooth scrolling animations, customizable speed, direction, and pause-on-hover functionality.
Location:
daily-slider
Files:
50 added
5 edited

Legend:

Unmodified
Added
Removed
  • daily-slider/trunk/admin/dashboard.php

    r3423716 r3465591  
    1717        // Include widget manager class
    1818        require_once plugin_dir_path(__FILE__) . 'widget-manager.php';
     19       
     20        // Include widget config class
     21        require_once plugin_dir_path(__FILE__) . 'widget-config.php';
    1922    }
    2023
     
    5255        register_setting('daily_slider_settings', 'daily_slider_widgets', array(
    5356            'type' => 'array',
    54             'default' => array(
    55                 'pixel' => true,
    56                 'eldorado' => true,
    57                 'review_carousel' => true,
    58                 'marquee' => true,
    59                 'testimonials_marquee' => true
    60 
    61             ),
     57            'default' => DailySliderWidgetConfig::get_default_enabled_widgets(),
    6258            'sanitize_callback' => array($this, 'sanitize_widgets_settings')
    6359        ));
     
    7369       
    7470        $sanitized = array();
    75         $valid_widgets = array('pixel', 'eldorado', 'review_carousel', 'marquee', 'testimonials_marquee');
     71        $widgets_config = DailySliderWidgetConfig::get_widgets_config();
     72        $valid_widgets = array_keys($widgets_config);
    7673       
    7774        foreach ($valid_widgets as $widget) {
  • daily-slider/trunk/admin/welcome-page.php

    r3445048 r3465591  
    1717        }
    1818
    19         $available_widgets = array(
    20             'pixel' => array('name' => __('Pixel', 'daily-slider')),
    21             'eldorado' => array('name' => __('Eldorado', 'daily-slider')),
    22             'review_carousel' => array('name' => __('Review Carousel', 'daily-slider')),
    23             'marquee' => array('name' => __('Marquee Slider', 'daily-slider')),
    24             'testimonials_marquee' => array('name' => __('Testimonials Marquee', 'daily-slider')),
    25         );
     19        $available_widgets = DailySliderWidgetConfig::get_welcome_page_widgets();
    2620
    2721        $coming_features = array(
  • daily-slider/trunk/admin/widget-manager.php

    r3445042 r3465591  
    1616     */
    1717    private static function register_widgets() {
    18         // Current Widgets
    19         self::add_widget('pixel', [
    20             'name' => __('Pixel (Hero Slider)', 'daily-slider'),
    21             'icon' => 'dashicons-format-image',
    22             'category' => 'current',
    23             'status' => 'active',
    24             'url' => 'https://xpospark.com/plugin/daily-slider/demo/pixel/',
    25         ]);
    26 
    27         self::add_widget('eldorado', [
    28             'name' => __('Eldorado (Image Carousel)', 'daily-slider'),
    29             'icon' => 'dashicons-images-alt2',
    30             'category' => 'current',
    31             'status' => 'active',
    32             'url' => 'https://xpospark.com/plugin/daily-slider/demo/eldorado/',
    33         ]);
    34 
    35         self::add_widget('review_carousel', [
    36             'name' => __('Review Carousel', 'daily-slider'),
    37             'icon' => 'dashicons-star-filled',
    38             'category' => 'current',
    39             'status' => 'active',
    40             'url' => 'https://xpospark.com/plugin/daily-slider/demo/review-carousel/',
    41         ]);
    42 
    43         self::add_widget('marquee', [
    44             'name' => __('Marquee Slider', 'daily-slider'),
    45             'icon' => 'dashicons-editor-code',
    46             'category' => 'current',
    47             'status' => 'active',
    48             'url' => 'https://xpospark.com/plugin/daily-slider/demo/marquee-slider/',
    49         ]);
    50 
    51 
    52         self::add_widget('testimonials_marquee', [
    53             'name' => __('Testimonials Marquee', 'daily-slider'),
    54             'icon' => 'dashicons-editor-code',
    55             'category' => 'current',
    56             'status' => 'active',
    57             'url' => 'https://xpospark.com/plugin/daily-slider/demo/marquee-testimonials/',
    58         ]);
    59 
    60         // Coming Soon Widgets
    61         self::add_widget('post_slider', [
    62             'name' => __('Post Slider', 'daily-slider'),
    63             'icon' => 'dashicons-admin-post',
    64             'category' => 'coming_soon',
    65             'status' => 'coming_soon',
    66         ]);
    67 
    68         self::add_widget('post_carousel', [
    69             'name' => __('Post Carousel', 'daily-slider'),
    70             'icon' => 'dashicons-admin-page',
    71             'category' => 'coming_soon',
    72             'status' => 'coming_soon',
    73         ]);
    74 
    75         self::add_widget('woo_products', [
    76             'name' => __('WooCommerce Products', 'daily-slider'),
    77             'icon' => 'dashicons-cart',
    78             'category' => 'coming_soon',
    79             'status' => 'coming_soon',
    80         ]);
     18        $widgets_config = DailySliderWidgetConfig::get_widgets_config();
     19       
     20        foreach ($widgets_config as $key => $widget) {
     21            self::add_widget($key, $widget);
     22        }
    8123    }
    8224
     
    10850     */
    10951    public static function get_enabled_widgets() {
    110         $enabled_widgets = get_option('daily_slider_widgets', array(
    111             'pixel' => true,
    112             'eldorado' => true,
    113             'review_carousel' => true,
    114             'marquee' => true,
    115             'testimonials_marquee' => true
    116         ));
     52        $enabled_widgets = get_option('daily_slider_widgets', DailySliderWidgetConfig::get_default_enabled_widgets());
    11753       
    11854        // Ensure we always return an array
    11955        if (!is_array($enabled_widgets)) {
    120             $enabled_widgets = array(
    121                 'pixel' => true,
    122                 'eldorado' => true,
    123                 'review_carousel' => true,
    124                 'marquee' => true,
    125                 'testimonials_marquee' => true
    126             );
     56            $enabled_widgets = DailySliderWidgetConfig::get_default_enabled_widgets();
    12757        };
    12858       
  • daily-slider/trunk/daily-slider.php

    r3445381 r3465591  
    33 * Plugin Name: Daily Slider
    44 * Description: Enhance Elementor with customizable hero sliders, review carousels, and portfolio showcases, featuring responsive design, animations, and hover effects.
    5  * Version: 2.7.0
     5 * Version: 2.8.0
    66 * Author: wpcoder75
    77 * Author URI: https://github.com/asikwp75
     
    1313 */
    1414
    15 
    16  if ( ! defined( 'ABSPATH' ) ) {
     15if ( ! defined( 'ABSPATH' ) ) {
    1716    exit; // Exit if accessed directly
    1817}
    1918
     19// Include widget config
     20require_once plugin_dir_path( __FILE__ ) . 'admin/widget-config.php';
     21
    2022class DailySliderPlugin {
    21     const VERSION = '2.7.0';
     23    const VERSION = '2.8.0';
    2224    const MINIMUM_ELEMENTOR_VERSION = '3.26.0';
    2325    const MINIMUM_PHP_VERSION = '7.4';
     
    3941        // Load text domain first thing in init
    4042        load_plugin_textdomain( 'daily-slider', false, dirname( plugin_basename( __FILE__ ) ) . '/languages' );
    41        
     43
    4244        // Load dashboard after text domain is loaded
    4345        if ( is_admin() ) {
     
    4850        $this->check_elementor_and_register();
    4951    }
    50    
     52
    5153    public function load_dashboard() {
    5254        require_once plugin_dir_path( __FILE__ ) . 'admin/dashboard.php';
    5355        new DailySliderDashboard();
    5456    }
    55    
     57
    5658    public function check_elementor_and_register() {
    5759        if ( ! did_action( 'elementor/loaded' ) ) {
     
    7274        // Register Elementor hooks immediately when Elementor is available
    7375        $this->register_elementor_hooks();
    74     }
    75    
     76
     77        // Fix WordPress 6.9.1 script dependency validation for Elementor v2 scripts
     78        add_filter( 'script_loader_src', array( $this, 'fix_elementor_v2_script_dependencies' ), 10, 2 );
     79    }
     80
    7681    public function register_elementor_hooks() {
    7782        add_action( 'elementor/elements/categories_registered', array( $this, 'add_elementor_category' ) );
     
    7984        add_action( 'elementor/frontend/after_enqueue_styles', array( $this, 'enqueue_styles' ) );
    8085        add_action( 'elementor/frontend/after_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
    81        
     86
    8287        // Add scripts for Elementor editor
    8388        add_action( 'elementor/editor/after_enqueue_scripts', array( $this, 'enqueue_editor_scripts' ) );
     
    8691    public function enqueue_styles() {
    8792        // Get enabled widgets
    88         $enabled_widgets = get_option('daily_slider_widgets', array(
    89             'pixel' => true,
    90             'eldorado' => true,
    91             'review_carousel' => true,
    92             'marquee' => true,
    93             'testimonials_marquee' => true
    94         ));
     93        $enabled_widgets = get_option('daily_slider_widgets', DailySliderWidgetConfig::get_default_enabled_widgets());
     94        $widgets_config = DailySliderWidgetConfig::get_widgets_config();
    9595
    9696        // Enqueue styles only for enabled widgets
    97         if (isset($enabled_widgets['eldorado']) && $enabled_widgets['eldorado']) {
    98             wp_enqueue_style( 'DailySlider-eldorado-styles', plugins_url( 'assets/css/widgets/eldorado.css', __FILE__ ), array(), '1.0.0', false );
    99         }
    100        
    101         if (isset($enabled_widgets['pixel']) && $enabled_widgets['pixel']) {
    102             wp_enqueue_style( 'DailySlider-pixel-styles', plugins_url( 'assets/css/widgets/pixel.css', __FILE__ ), array(), '1.0.0', false );
    103         }
    104        
    105         if (isset($enabled_widgets['review_carousel']) && $enabled_widgets['review_carousel']) {
    106             wp_enqueue_style( 'DailySlider-review-carousel-styles', plugins_url( 'assets/css/widgets/review-carousel.css', __FILE__ ), array(), '1.0.0', false );
    107         }
    108        
    109         if (isset($enabled_widgets['marquee']) && $enabled_widgets['marquee']) {
    110             wp_enqueue_style( 'DailySlider-marquee-styles', plugins_url( 'assets/css/widgets/marquee.css', __FILE__ ), array(), '1.0.0', false );
    111         }
    112 
    113         if (isset($enabled_widgets['testimonials_marquee']) && $enabled_widgets['testimonials_marquee']) {
    114             wp_enqueue_style( 'DailySlider-testimonials-marquee-styles', plugins_url( 'assets/css/widgets/testimonials-marquee.css', __FILE__ ), array(), '1.0.0', false );
     97        foreach ($widgets_config as $widget_key => $widget_config) {
     98            if (isset($enabled_widgets[$widget_key]) && $enabled_widgets[$widget_key] && !empty($widget_config['file_path'])) {
     99                $css_file = 'assets/css/widgets/' . basename($widget_config['file_path'], '.php') . '.css';
     100                $css_path = plugin_dir_path(__FILE__) . $css_file;
     101
     102                if (file_exists($css_path)) {
     103                    $handle = 'DailySlider-' . basename($widget_config['file_path'], '.php') . '-styles';
     104                    wp_enqueue_style($handle, plugins_url($css_file, __FILE__), array(), '1.0.0', false);
     105                }
     106            }
    115107        }
    116108
    117109        // Always enqueue common styles if any widget is enabled
    118110        if (array_filter($enabled_widgets)) {
    119             wp_enqueue_style( 'DailySlider-common-styles', plugins_url( 'assets/css/common.css', __FILE__ ), array(), '1.0.0', false );
     111            wp_enqueue_style('DailySlider-common-styles', plugins_url('assets/css/common.css', __FILE__), array(), '1.0.0', false);
    120112        }
    121113    }
     
    123115    public function enqueue_scripts() {
    124116        // Get enabled widgets
    125         $enabled_widgets = get_option('daily_slider_widgets', array(
    126             'pixel' => true,
    127             'eldorado' => true,
    128             'review_carousel' => true,
    129             'marquee' => true,
    130             'testimonials_marquee' => true
    131         ));
     117        $enabled_widgets = get_option('daily_slider_widgets', DailySliderWidgetConfig::get_default_enabled_widgets());
     118        $widgets_config = DailySliderWidgetConfig::get_widgets_config();
    132119
    133120        // Enqueue scripts only for enabled widgets
    134         if (isset($enabled_widgets['eldorado']) && $enabled_widgets['eldorado']) {
    135             wp_enqueue_script( 'DailySlider-eldorado-scripts', plugins_url( 'assets/js/widgets/eldorado.js', __FILE__ ), array( 'jquery', 'elementor-frontend' ), '1.0.0', true );
    136         }
    137        
    138         if (isset($enabled_widgets['pixel']) && $enabled_widgets['pixel']) {
    139             wp_enqueue_script( 'DailySlider-pixel-scripts', plugins_url( 'assets/js/widgets/pixel.js', __FILE__ ), array( 'jquery', 'elementor-frontend' ), '1.0.0', true );
    140         }
    141        
    142         if (isset($enabled_widgets['review_carousel']) && $enabled_widgets['review_carousel']) {
    143             wp_enqueue_script( 'DailySlider-review-carousel-scripts', plugins_url( 'assets/js/widgets/review-carousel.js', __FILE__ ), array( 'jquery', 'elementor-frontend' ), '1.0.0', true );
    144         }
    145        
    146         if (isset($enabled_widgets['marquee']) && $enabled_widgets['marquee']) {
    147             wp_enqueue_script( 'DailySlider-marquee-scripts', plugins_url( 'assets/js/widgets/marquee.js', __FILE__ ), array( 'jquery', 'elementor-frontend' ), '1.0.0', true );
    148         }
    149 
    150         if (isset($enabled_widgets['testimonials_marquee']) && $enabled_widgets['testimonials_marquee']) {
    151             wp_enqueue_script( 'DailySlider-testimonials-marquee-scripts', plugins_url( 'assets/js/widgets/testimonials-marquee.js', __FILE__ ), array( 'jquery', 'elementor-frontend' ), '1.0.0', true );
    152         }
    153     }
    154    
     121        foreach ($widgets_config as $widget_key => $widget_config) {
     122            if (isset($enabled_widgets[$widget_key]) && $enabled_widgets[$widget_key] && !empty($widget_config['file_path'])) {
     123                $js_file = 'assets/js/widgets/' . basename($widget_config['file_path'], '.php') . '.js';
     124                $js_path = plugin_dir_path(__FILE__) . $js_file;
     125
     126                if (file_exists($js_path)) {
     127                    $handle = 'DailySlider-' . basename($widget_config['file_path'], '.php') . '-scripts';
     128                    wp_enqueue_script($handle, plugins_url($js_file, __FILE__), array('jquery'), '1.0.0', true);
     129                }
     130            }
     131        }
     132    }
     133
    155134    /**
    156135     * Enqueue scripts for Elementor editor
     
    158137    public function enqueue_editor_scripts() {
    159138        // Get enabled widgets
    160         $enabled_widgets = get_option('daily_slider_widgets', array(
    161             'pixel' => true,
    162             'eldorado' => true,
    163             'review_carousel' => true,
    164             'marquee' => true,
    165             'testimonials_marquee' => true
    166         ));
    167 
    168         // Enqueue widget scripts for editor only for enabled widgets
    169         if (isset($enabled_widgets['eldorado']) && $enabled_widgets['eldorado']) {
    170             wp_enqueue_script( 'DailySlider-eldorado-scripts', plugins_url( 'assets/js/widgets/eldorado.js', __FILE__ ), array( 'jquery', 'elementor-frontend' ), '1.0.0', true );
    171         }
    172        
    173         if (isset($enabled_widgets['pixel']) && $enabled_widgets['pixel']) {
    174             wp_enqueue_script( 'DailySlider-pixel-scripts', plugins_url( 'assets/js/widgets/pixel.js', __FILE__ ), array( 'jquery', 'elementor-frontend' ), '1.0.0', true );
    175         }
    176        
    177         if (isset($enabled_widgets['review_carousel']) && $enabled_widgets['review_carousel']) {
    178             wp_enqueue_script( 'DailySlider-review-carousel-scripts', plugins_url( 'assets/js/widgets/review-carousel.js', __FILE__ ), array( 'jquery', 'elementor-frontend' ), '1.0.0', true );
    179         }
    180        
    181         if (isset($enabled_widgets['marquee']) && $enabled_widgets['marquee']) {
    182             wp_enqueue_script( 'DailySlider-marquee-scripts', plugins_url( 'assets/js/widgets/marquee.js', __FILE__ ), array( 'jquery', 'elementor-frontend' ), '1.0.0', true );
    183         }
    184 
    185          if (isset($enabled_widgets['testimonials_marquee']) && $enabled_widgets['testimonials_marquee']) {
    186             wp_enqueue_script( 'DailySlider-testimonials-marquee-scripts', plugins_url( 'assets/js/widgets/testimonials-marquee.js', __FILE__ ), array( 'jquery', 'elementor-frontend' ), '1.0.0', true );
    187         }
    188        
    189         // Enqueue widget styles for editor only for enabled widgets
    190         if (isset($enabled_widgets['eldorado']) && $enabled_widgets['eldorado']) {
    191             wp_enqueue_style( 'DailySlider-eldorado-styles', plugins_url( 'assets/css/widgets/eldorado.css', __FILE__ ), array(), '1.0.0', false );
    192         }
    193        
    194         if (isset($enabled_widgets['pixel']) && $enabled_widgets['pixel']) {
    195             wp_enqueue_style( 'DailySlider-pixel-styles', plugins_url( 'assets/css/widgets/pixel.css', __FILE__ ), array(), '1.0.0', false );
    196         }
    197        
    198         if (isset($enabled_widgets['review_carousel']) && $enabled_widgets['review_carousel']) {
    199             wp_enqueue_style( 'DailySlider-review-carousel-styles', plugins_url( 'assets/css/widgets/review-carousel.css', __FILE__ ), array(), '1.0.0', false );
    200         }
    201        
    202         if (isset($enabled_widgets['marquee']) && $enabled_widgets['marquee']) {
    203             wp_enqueue_style( 'DailySlider-marquee-styles', plugins_url( 'assets/css/widgets/marquee.css', __FILE__ ), array(), '1.0.0', false );
    204         }
    205 
    206         if (isset($enabled_widgets['testimonials_marquee']) && $enabled_widgets['testimonials_marquee']) {
    207             wp_enqueue_style( 'DailySlider-testimonials-marquee-styles', plugins_url( 'assets/css/widgets/testimonials-marquee.css', __FILE__ ), array(), '1.0.0', false );
     139        $enabled_widgets = get_option('daily_slider_widgets', DailySliderWidgetConfig::get_default_enabled_widgets());
     140        $widgets_config = DailySliderWidgetConfig::get_widgets_config();
     141
     142        // Enqueue widget scripts and styles for editor only for enabled widgets
     143        foreach ($widgets_config as $widget_key => $widget_config) {
     144            if (isset($enabled_widgets[$widget_key]) && $enabled_widgets[$widget_key] && !empty($widget_config['file_path'])) {
     145                $base_name = basename($widget_config['file_path'], '.php');
     146
     147                // Enqueue script
     148                $js_file = 'assets/js/widgets/' . $base_name . '.js';
     149                $js_path = plugin_dir_path(__FILE__) . $js_file;
     150
     151                if (file_exists($js_path)) {
     152                    $handle = 'DailySlider-' . $base_name . '-scripts';
     153                    wp_enqueue_script($handle, plugins_url($js_file, __FILE__), array('jquery'), '1.0.0', true);
     154                }
     155
     156                // Enqueue style
     157                $css_file = 'assets/css/widgets/' . $base_name . '.css';
     158                $css_path = plugin_dir_path(__FILE__) . $css_file;
     159
     160                if (file_exists($css_path)) {
     161                    $handle = 'DailySlider-' . $base_name . '-styles';
     162                    wp_enqueue_style($handle, plugins_url($css_file, __FILE__), array(), '1.0.0', false);
     163                }
     164            }
    208165        }
    209166
    210167        // Always enqueue common styles if any widget is enabled
    211168        if (array_filter($enabled_widgets)) {
    212             wp_enqueue_style( 'DailySlider-common-styles', plugins_url( 'assets/css/common.css', __FILE__ ), array(), '1.0.0', false );
    213         }
    214     }
    215 
     169            wp_enqueue_style('DailySlider-common-styles', plugins_url('assets/css/common.css', __FILE__), array(), '1.0.0', false);
     170        }
     171    }
    216172
    217173    public function add_elementor_category( $elements_manager ) {
     
    228184    public function register_widgets( $widgets_manager ) {
    229185        // Get enabled widgets from dashboard settings
    230         $enabled_widgets = get_option('daily_slider_widgets', array(
    231             'pixel' => true,
    232             'eldorado' => true,
    233             'review_carousel' => true,
    234             'marquee' => true,
    235             'testimonials_marquee' => true
    236         ));
     186        $enabled_widgets = get_option('daily_slider_widgets', DailySliderWidgetConfig::get_default_enabled_widgets());
    237187
    238188        // Debug: Log widget registration
     
    241191        }
    242192
    243         // Register Eldorado Widget if enabled
    244         if (isset($enabled_widgets['eldorado']) && $enabled_widgets['eldorado']) {
    245             require_once plugin_dir_path( __FILE__ ) . 'widgets/eldorado/eldorado.php';
    246             $widgets_manager->register( new \DailySlider\Widgets\Eldorado_Widget() );
    247             if (defined('WP_DEBUG') && WP_DEBUG) {
    248                 error_log('Daily Slider: Eldorado widget registered');
    249             }
    250         }
    251 
    252         // Register Pixel Widget if enabled
    253         if (isset($enabled_widgets['pixel']) && $enabled_widgets['pixel']) {
    254             require_once plugin_dir_path( __FILE__ ) . 'widgets/pixel/pixel.php';
    255             $widgets_manager->register( new \DailySlider\Widgets\Pixel_Widget() );
    256             if (defined('WP_DEBUG') && WP_DEBUG) {
    257                 error_log('Daily Slider: Pixel widget registered');
    258             }
    259         }
    260 
    261         // Register Review Carousel Widget if enabled
    262         if (isset($enabled_widgets['review_carousel']) && $enabled_widgets['review_carousel']) {
    263             require_once plugin_dir_path( __FILE__ ) . 'widgets/review-carousel/review-carousel.php';
    264             $widgets_manager->register( new \DailySlider\Widgets\ReviewCarousel_Widget() );
    265             if (defined('WP_DEBUG') && WP_DEBUG) {
    266                 error_log('Daily Slider: Review Carousel widget registered');
    267             }
    268         }
    269 
    270         // Register Marquee Widget if enabled
    271         if (isset($enabled_widgets['marquee']) && $enabled_widgets['marquee']) {
    272             require_once plugin_dir_path( __FILE__ ) . 'widgets/marquee/marquee.php';
    273             $widgets_manager->register( new \DailySlider\Widgets\Marquee_Widget() );
    274             if (defined('WP_DEBUG') && WP_DEBUG) {
    275                 error_log('Daily Slider: Marquee widget registered');
    276             }
    277         }
    278 
    279 
    280         // Register Testimonials Marquee Widget if enabled
    281         if (isset($enabled_widgets['testimonials_marquee']) && $enabled_widgets['testimonials_marquee']) {
    282             require_once plugin_dir_path( __FILE__ ) . 'widgets/testimonials-marquee/testimonials-marquee.php';
    283             $widgets_manager->register( new \DailySlider\Widgets\Testimonials_Marquee_Widget() );
    284             if (defined('WP_DEBUG') && WP_DEBUG) {
    285                 error_log('Daily Slider: Testimonials Marquee widget registered');
    286             }
    287         }
    288     }
    289    
    290    
     193        // Get widget configuration
     194        $widgets_config = DailySliderWidgetConfig::get_widgets_config();
     195
     196        // Register each enabled widget
     197        foreach ($widgets_config as $widget_key => $widget_config) {
     198            if (isset($enabled_widgets[$widget_key]) && $enabled_widgets[$widget_key] && !empty($widget_config['file_path'])) {
     199                $file_path = plugin_dir_path(__FILE__) . $widget_config['file_path'];
     200                $class_name = $widget_config['class_name'];
     201
     202                if (file_exists($file_path)) {
     203                    require_once $file_path;
     204                    if (class_exists($class_name)) {
     205                        $widgets_manager->register(new $class_name());
     206
     207                        if (defined('WP_DEBUG') && WP_DEBUG) {
     208                            error_log('Daily Slider: ' . $widget_config['name'] . ' widget registered');
     209                        }
     210                    }
     211                }
     212            }
     213        }
     214    }
     215
    291216    public function admin_notice_missing_main_plugin() {
    292217        $message = sprintf(
     
    297222        printf( '<div class="notice notice-warning daily-slider-notice is-dismissible"><p>%s</p></div>', wp_kses_post( $message ) );
    298223    }
    299    
     224
    300225    public function admin_notice_minimum_php_version() {
    301226        $message = sprintf(
     
    307232        printf( '<div class="notice notice-warning daily-slider-notice is-dismissible"><p>%s</p></div>', wp_kses_post( $message ) );
    308233    }
    309    
     234
    310235    public function admin_notice_minimum_elementor_version() {
    311236        $message = sprintf(
     
    317242        printf( '<div class="notice notice-warning daily-slider-notice is-dismissible"><p>%s</p></div>', wp_kses_post( $message ) );
    318243    }
    319    
    320    
    321    
    322    
     244
     245    /**
     246     * Fix WordPress 6.9.1 script dependency validation for Elementor v2 scripts
     247     * This prevents notices about unregistered Elementor v2 dependencies
     248     */
     249    public function fix_elementor_v2_script_dependencies( $src, $handle ) {
     250        // List of Elementor v2 scripts that may have dependency issues
     251        $v2_scripts = array(
     252            'elementor-v2-editor-components',
     253            'elementor-v2-editor-interactions',
     254            'elementor-v2-editor-canvas',
     255            'elementor-v2-editor-controls',
     256            'elementor-v2-editor-editing-panel',
     257            'elementor-v2-editor-elements',
     258            'elementor-v2-editor-props',
     259            'elementor-v2-editor-styles-repository'
     260        );
     261
     262        if ( in_array( $handle, $v2_scripts ) ) {
     263            global $wp_scripts;
     264
     265            if ( isset( $wp_scripts->registered[ $handle ] ) ) {
     266                $script = $wp_scripts->registered[ $handle ];
     267
     268                $valid_deps = array();
     269                foreach ( $script->deps as $dep ) {
     270                    if ( isset( $wp_scripts->registered[ $dep ] ) || in_array( $dep, array( 'jquery', 'jquery-core', 'jquery-migrate', 'wp-i18n' ) ) ) {
     271                        $valid_deps[] = $dep;
     272                    }
     273                }
     274
     275                $script->deps = $valid_deps;
     276            }
     277        }
     278
     279        return $src;
     280    }
     281
    323282}
    324283
    325284DailySliderPlugin::instance();
    326 
  • daily-slider/trunk/readme.txt

    r3445413 r3465591  
    44Requires at least: 5.0
    55Tested up to: 6.9
    6 Stable tag: 2.7.0
     6Stable Tag: 2.8.0
    77Requires PHP: 7.4
    88License: GPLv2 or later
     
    127127== Changelog ==
    128128
    129 ### = 2.7.0 [23 January 2026] =
     129### = 2.8.0 [20 Feb 2026] =
     130
     131- Added **Image Marquee Widget** with smooth scrolling animations, customizable speed, direction, and pause-on-hover functionality.
     132
     133### = 2.7.0 [23rd January 2026] =
    130134
    131135* Improved: Removed unnecessary code to improve performance and maintainability.
Note: See TracChangeset for help on using the changeset viewer.