'array', 'sanitize_callback' => array( $this, 'sanitize_settings' ), 'default' => adab_get_default_settings(), ) ); } /** * Enqueue admin scripts and styles only on our plugin settings page. * * @param string $hook_suffix Current admin page hook. */ public function enqueue_admin_assets( $hook_suffix ) { if ( 'settings_page_abhinavdev-announcement-bar' !== $hook_suffix ) { return; } // Enqueue shared frontend CSS/JS so the Live Preview renders identically to the live site. wp_enqueue_style( 'adab-frontend', ADAB_PLUGIN_URL . 'assets/css/adab-frontend.css', array(), ADAB_VERSION ); $settings = adab_get_settings(); $inline_css = ADAB_Frontend::generate_inline_css_vars( $settings ); wp_add_inline_style( 'adab-frontend', $inline_css ); wp_enqueue_style( 'adab-admin', ADAB_PLUGIN_URL . 'assets/css/adab-admin.css', array( 'adab-frontend' ), ADAB_VERSION ); wp_enqueue_script( 'adab-frontend', ADAB_PLUGIN_URL . 'assets/js/adab-frontend.js', array(), ADAB_VERSION, true ); wp_enqueue_script( 'adab-admin', ADAB_PLUGIN_URL . 'assets/js/adab-admin.js', array( 'adab-frontend' ), ADAB_VERSION, true ); } /** * Sanitize all incoming settings before saving to the database. * * @param array $input Raw input array from form submission. * @return array Sanitized settings array. */ public function sanitize_settings( $input ) { $defaults = adab_get_default_settings(); if ( ! is_array( $input ) ) { return $defaults; } $clean = array(); // Booleans / Checkboxes. $clean['enabled'] = ! empty( $input['enabled'] ) ? 1 : 0; $clean['dismissible'] = ! empty( $input['dismissible'] ) ? 1 : 0; $clean['cta_enabled'] = ! empty( $input['cta_enabled'] ) ? 1 : 0; $clean['cta_new_tab'] = ! empty( $input['cta_new_tab'] ) ? 1 : 0; $clean['countdown_enabled'] = ! empty( $input['countdown_enabled'] ) ? 1 : 0; // Select / Enum options. $clean['display_mode'] = isset( $input['display_mode'] ) && in_array( $input['display_mode'], array( 'static', 'scrolling', 'sliding' ), true ) ? $input['display_mode'] : $defaults['display_mode']; $clean['slide_direction'] = isset( $input['slide_direction'] ) && in_array( $input['slide_direction'], array( 'vertical', 'horizontal' ), true ) ? $input['slide_direction'] : $defaults['slide_direction']; $clean['position'] = isset( $input['position'] ) && in_array( $input['position'], array( 'top_sticky', 'top_static', 'bottom_sticky' ), true ) ? $input['position'] : $defaults['position']; $clean['target_pages'] = isset( $input['target_pages'] ) && in_array( $input['target_pages'], array( 'all', 'homepage' ), true ) ? $input['target_pages'] : $defaults['target_pages']; $clean['device_visibility'] = isset( $input['device_visibility'] ) && in_array( $input['device_visibility'], array( 'all', 'desktop_only', 'mobile_only' ), true ) ? $input['device_visibility'] : $defaults['device_visibility']; $clean['bg_type'] = isset( $input['bg_type'] ) && in_array( $input['bg_type'], array( 'solid', 'gradient' ), true ) ? $input['bg_type'] : $defaults['bg_type']; $clean['font_weight'] = isset( $input['font_weight'] ) && in_array( (string) $input['font_weight'], array( '400', '500', '600', '700' ), true ) ? (string) $input['font_weight'] : $defaults['font_weight']; // Messages array. $clean['messages'] = array(); if ( isset( $input['messages'] ) && is_array( $input['messages'] ) ) { foreach ( $input['messages'] as $msg ) { $sanitized_msg = trim( wp_kses_post( $msg ) ); if ( '' !== $sanitized_msg ) { $clean['messages'][] = $sanitized_msg; } } } if ( empty( $clean['messages'] ) ) { $clean['messages'] = array( $defaults['messages'][0] ); } // Numeric ranges. $clean['scroll_speed'] = isset( $input['scroll_speed'] ) ? max( 5, min( 90, absint( $input['scroll_speed'] ) ) ) : $defaults['scroll_speed']; $clean['slide_interval'] = isset( $input['slide_interval'] ) ? max( 2, min( 30, absint( $input['slide_interval'] ) ) ) : $defaults['slide_interval']; $clean['reappear_days'] = isset( $input['reappear_days'] ) ? max( 0, min( 365, absint( $input['reappear_days'] ) ) ) : $defaults['reappear_days']; $clean['bg_gradient_angle'] = isset( $input['bg_gradient_angle'] ) ? max( 0, min( 360, intval( $input['bg_gradient_angle'] ) ) ) : $defaults['bg_gradient_angle']; $clean['font_size_desktop'] = isset( $input['font_size_desktop'] ) ? max( 10, min( 32, absint( $input['font_size_desktop'] ) ) ) : $defaults['font_size_desktop']; $clean['font_size_mobile'] = isset( $input['font_size_mobile'] ) ? max( 10, min( 28, absint( $input['font_size_mobile'] ) ) ) : $defaults['font_size_mobile']; $clean['bar_padding_desktop'] = isset( $input['bar_padding_desktop'] ) ? max( 4, min( 36, absint( $input['bar_padding_desktop'] ) ) ) : $defaults['bar_padding_desktop']; $clean['bar_padding_mobile'] = isset( $input['bar_padding_mobile'] ) ? max( 4, min( 28, absint( $input['bar_padding_mobile'] ) ) ) : $defaults['bar_padding_mobile']; $clean['cta_border_radius'] = isset( $input['cta_border_radius'] ) ? max( 0, min( 50, absint( $input['cta_border_radius'] ) ) ) : $defaults['cta_border_radius']; // Colors. $clean['bg_color'] = ! empty( $input['bg_color'] ) && sanitize_hex_color( $input['bg_color'] ) ? sanitize_hex_color( $input['bg_color'] ) : $defaults['bg_color']; $clean['bg_gradient_end'] = ! empty( $input['bg_gradient_end'] ) && sanitize_hex_color( $input['bg_gradient_end'] ) ? sanitize_hex_color( $input['bg_gradient_end'] ) : $defaults['bg_gradient_end']; $clean['text_color'] = ! empty( $input['text_color'] ) && sanitize_hex_color( $input['text_color'] ) ? sanitize_hex_color( $input['text_color'] ) : $defaults['text_color']; $clean['cta_bg_color'] = ! empty( $input['cta_bg_color'] ) && sanitize_hex_color( $input['cta_bg_color'] ) ? sanitize_hex_color( $input['cta_bg_color'] ) : $defaults['cta_bg_color']; $clean['cta_text_color'] = ! empty( $input['cta_text_color'] ) && sanitize_hex_color( $input['cta_text_color'] ) ? sanitize_hex_color( $input['cta_text_color'] ) : $defaults['cta_text_color']; // Text & URLs. $clean['cta_text'] = isset( $input['cta_text'] ) ? sanitize_text_field( $input['cta_text'] ) : $defaults['cta_text']; $clean['cta_url'] = isset( $input['cta_url'] ) ? esc_url_raw( $input['cta_url'] ) : $defaults['cta_url']; $clean['countdown_label'] = isset( $input['countdown_label'] ) ? sanitize_text_field( $input['countdown_label'] ) : $defaults['countdown_label']; $clean['countdown_end'] = isset( $input['countdown_end'] ) ? sanitize_text_field( $input['countdown_end'] ) : $defaults['countdown_end']; return $clean; } /** * Render the plugin settings and live preview page. */ public function render_settings_page() { if ( ! current_user_can( 'manage_options' ) ) { return; } $settings = adab_get_settings(); ?>
AbhinavDev

v

s
s
, , are supported', 'abhinavdev-announcement-bar' ); ?>
$message ) : ?>
#

px

°

px
px
px
px