[ 'name' => esc_html__( 'Marquee Text', 'advanced-marquee-effect' ), 'desc' => esc_html__( 'Create scrolls of customizable styled heading/paragraph text strings.', 'advanced-marquee-effect' ), 'is_pro' => false, ], 'ame-marquee-image' => [ 'name' => esc_html__( 'Marquee Image', 'advanced-marquee-effect' ), 'desc' => esc_html__( 'Display customizable inline logo/image carousel streams with link attachments.', 'advanced-marquee-effect' ), 'is_pro' => false, ], 'ame-marquee-post' => [ 'name' => esc_html__( 'Post Marquee', 'advanced-marquee-effect' ), 'desc' => esc_html__( 'Showcase standard WordPress posts with layouts containing images, titles, and excerpt overlays.', 'advanced-marquee-effect' ), 'is_pro' => false, ], 'ame-marquee-testimonial' => [ 'name' => esc_html__( 'Testimonial Marquee', 'advanced-marquee-effect' ), 'desc' => esc_html__( 'Display premium reviews with author avatars, star ratings, and custom styling presets.', 'advanced-marquee-effect' ), 'is_pro' => false, ], 'ame-marquee-team' => [ 'name' => esc_html__( 'Team Marquee', 'advanced-marquee-effect' ), 'desc' => esc_html__( 'Introduce members with avatar frames, designation titles, and custom social link ribbons.', 'advanced-marquee-effect' ), 'is_pro' => false, ], 'ame-marquee-cta-cards' => [ 'name' => esc_html__( 'CTA Cards Marquee', 'advanced-marquee-effect' ), 'desc' => esc_html__( 'Increase engagement using horizontal scrolls of content highlight cards.', 'advanced-marquee-effect' ), 'is_pro' => false, ], 'ame-marquee-image-box' => [ 'name' => esc_html__( 'Image Box Marquee', 'advanced-marquee-effect' ), 'desc' => esc_html__( 'Display stylish scrolling image box cards with title, description, and link features.', 'advanced-marquee-effect' ), 'is_pro' => false, ], 'ame-marquee-icon-box' => [ 'name' => esc_html__( 'Icon Box Marquee', 'advanced-marquee-effect' ), 'desc' => esc_html__( 'Create continuous icon box streams with stacked, framed, or default icons and details.', 'advanced-marquee-effect' ), 'is_pro' => false, ], 'ame-marquee-woocommerce' => [ 'name' => esc_html__( 'WooCommerce Product Marquee', 'advanced-marquee-effect' ), 'desc' => esc_html__( 'Feature dynamic query loops of store products with prices, ratings, and instant purchase triggers.', 'advanced-marquee-effect' ), 'is_pro' => true, ], 'ame-marquee-woo-recent-orders' => [ 'name' => esc_html__( 'WooCommerce Recent Orders Marquee', 'advanced-marquee-effect' ), 'desc' => esc_html__( 'Present real-time customer sales proof notifications in a smooth sliding banner.', 'advanced-marquee-effect' ), 'is_pro' => true, ], ]; } /** * Get array of enabled widget states */ public static function get_enabled_widgets() { $defaults = array_fill_keys( array_keys( self::get_all_widgets() ), '1' ); $options = get_option( 'ame_enabled_widgets', $defaults ); return wp_parse_args( $options, $defaults ); } /** * Helper to verify if a widget is enabled */ public static function is_widget_enabled( $widget_slug ) { $enabled = self::get_enabled_widgets(); return isset( $enabled[ $widget_slug ] ) && '1' === (string) $enabled[ $widget_slug ]; } /** * Save settings form */ public function save_widget_settings() { if ( ! isset( $_POST['ame_save_settings_nonce'] ) || ! wp_verify_nonce( $_POST['ame_save_settings_nonce'], 'ame_save_settings_action' ) ) { return; } if ( ! current_user_can( 'manage_options' ) ) { return; } $all_widgets = self::get_all_widgets(); $submitted_widgets = isset( $_POST['widgets'] ) ? (array) $_POST['widgets'] : []; $new_settings = []; $is_pro_active = class_exists( 'AME_Marquee_Pro' ); foreach ( array_keys( $all_widgets ) as $slug ) { $is_pro = $all_widgets[ $slug ]['is_pro'] ?? false; if ( $is_pro && ! $is_pro_active ) { // Force disable Pro widgets if Pro plugin is missing/deactivated $new_settings[ $slug ] = '0'; } else { // Save state: 1 if checked, 0 if unchecked $new_settings[ $slug ] = isset( $submitted_widgets[ $slug ] ) ? '1' : '0'; } } update_option( 'ame_enabled_widgets', $new_settings ); add_settings_error( 'ame_settings_messages', 'ame_settings_updated', esc_html__( 'Widget settings successfully saved.', 'advanced-marquee-effect' ), 'success' ); } /** * Render Settings Page HTML */ public function render_settings_page() { if ( ! current_user_can( 'manage_options' ) ) { return; } $all_widgets = self::get_all_widgets(); $enabled_widgets = self::get_enabled_widgets(); $is_pro_active = class_exists( 'AME_Marquee_Pro' ); settings_errors( 'ame_settings_messages' ); ?>