1, 'autoplay_delay' => 4000, 'loop' => 1, 'speed' => 600, 'effect' => 'slide', 'slides_per_view' => 1, 'slides_per_view_tablet' => 1, 'slides_per_view_mobile' => 1, 'space_between' => 0, 'centered_slides' => 0, 'pause_on_hover' => 1, 'keyboard' => 1, 'grab_cursor' => 1, 'show_arrows' => 1, 'show_pagination' => 1, 'pagination_type' => 'bullets', 'slide_height' => 420, 'content_align' => 'center', 'overlay_opacity' => 40, 'color_heading' => '#ffffff', 'color_text' => '#f3f4f6', 'color_btn_bg' => '#111827', 'color_btn_text' => '#ffffff', 'color_btn_hover_bg' => '#2563eb', 'color_btn_hover_text' => '#ffffff', 'color_arrow' => '#ffffff', 'color_arrow_bg' => 'rgba(17,24,39,0.55)', 'color_arrow_hover' => '#ffffff', 'color_dot' => 'rgba(255,255,255,0.45)', 'color_dot_active' => '#ffffff', 'color_overlay' => '#0f172a', 'btn_radius' => 6, 'btn_padding_y' => 10, 'btn_padding_x' => 18, 'arrow_size' => 44, ); } /** * Get merged settings. * * @return array */ public static function get() { $stored = get_option( self::OPTION_KEY, array() ); if ( ! is_array( $stored ) ) { $stored = array(); } return wp_parse_args( $stored, self::defaults() ); } /** * Get a single setting. * * @param string $key Setting key. * @param mixed $fallback Fallback. * @return mixed */ public static function get_value( $key, $fallback = null ) { $settings = self::get(); if ( array_key_exists( $key, $settings ) ) { return $settings[ $key ]; } return $fallback; } /** * Register settings. */ public function register_settings() { register_setting( 'awp_slider_settings_group', self::OPTION_KEY, array( 'type' => 'array', 'sanitize_callback' => array( $this, 'sanitize' ), 'default' => self::defaults(), ) ); } /** * Sanitize settings array. * * @param array $input Raw input. * @return array */ public function sanitize( $input ) { $defaults = self::defaults(); $output = $defaults; if ( ! is_array( $input ) ) { return $output; } $checkboxes = array( 'autoplay', 'loop', 'centered_slides', 'pause_on_hover', 'keyboard', 'grab_cursor', 'show_arrows', 'show_pagination', ); foreach ( $checkboxes as $key ) { $output[ $key ] = ! empty( $input[ $key ] ) ? 1 : 0; } $output['autoplay_delay'] = absint( $input['autoplay_delay'] ?? $defaults['autoplay_delay'] ); $output['speed'] = absint( $input['speed'] ?? $defaults['speed'] ); $output['space_between'] = absint( $input['space_between'] ?? $defaults['space_between'] ); $output['slide_height'] = absint( $input['slide_height'] ?? $defaults['slide_height'] ); $output['overlay_opacity'] = min( 100, absint( $input['overlay_opacity'] ?? $defaults['overlay_opacity'] ) ); $output['btn_radius'] = absint( $input['btn_radius'] ?? $defaults['btn_radius'] ); $output['btn_padding_y'] = absint( $input['btn_padding_y'] ?? $defaults['btn_padding_y'] ); $output['btn_padding_x'] = absint( $input['btn_padding_x'] ?? $defaults['btn_padding_x'] ); $output['arrow_size'] = absint( $input['arrow_size'] ?? $defaults['arrow_size'] ); $output['slides_per_view'] = max( 1, floatval( $input['slides_per_view'] ?? 1 ) ); $output['slides_per_view_tablet'] = max( 1, floatval( $input['slides_per_view_tablet'] ?? 1 ) ); $output['slides_per_view_mobile'] = max( 1, floatval( $input['slides_per_view_mobile'] ?? 1 ) ); $effects = array( 'slide', 'fade', 'cube', 'coverflow', 'flip' ); $effect = sanitize_key( $input['effect'] ?? 'slide' ); $output['effect'] = in_array( $effect, $effects, true ) ? $effect : 'slide'; $pagination_types = array( 'bullets', 'fraction', 'progressbar' ); $pagination = sanitize_key( $input['pagination_type'] ?? 'bullets' ); $output['pagination_type'] = in_array( $pagination, $pagination_types, true ) ? $pagination : 'bullets'; $aligns = array( 'left', 'center', 'right' ); $align = sanitize_key( $input['content_align'] ?? 'center' ); $output['content_align'] = in_array( $align, $aligns, true ) ? $align : 'center'; $colors = array( 'color_heading', 'color_text', 'color_btn_bg', 'color_btn_text', 'color_btn_hover_bg', 'color_btn_hover_text', 'color_arrow', 'color_arrow_hover', 'color_dot_active', 'color_overlay', ); foreach ( $colors as $color_key ) { $color = sanitize_hex_color( $input[ $color_key ] ?? '' ); $output[ $color_key ] = $color ? $color : $defaults[ $color_key ]; } // Allow rgba strings for arrow bg / inactive dots. $output['color_arrow_bg'] = $this->sanitize_color_value( $input['color_arrow_bg'] ?? $defaults['color_arrow_bg'], $defaults['color_arrow_bg'] ); $output['color_dot'] = $this->sanitize_color_value( $input['color_dot'] ?? $defaults['color_dot'], $defaults['color_dot'] ); return $output; } /** * Sanitize hex or rgba color. * * @param string $value Raw. * @param string $fallback Fallback. * @return string */ private function sanitize_color_value( $value, $fallback ) { $value = trim( (string) $value ); $hex = sanitize_hex_color( $value ); if ( $hex ) { return $hex; } if ( preg_match( '/^rgba?\(\s*\d{1,3}\s*,\s*\d{1,3}\s*,\s*\d{1,3}\s*(,\s*(0|1|0?\.\d+))?\s*\)$/', $value ) ) { return $value; } return $fallback; } /** * Settings submenu. */ public function register_menu() { add_submenu_page( 'edit.php?post_type=awp-slider', __( 'Slider Settings', 'advance-wp-slider' ), __( 'Settings', 'advance-wp-slider' ), 'manage_options', 'awp-slider-settings', array( $this, 'render_page' ) ); } /** * Admin color picker assets. * * @param string $hook Hook suffix. */ public function enqueue_admin_assets( $hook ) { if ( 'awp-slider_page_awp-slider-settings' !== $hook ) { return; } wp_enqueue_style( 'wp-color-picker' ); wp_enqueue_script( 'wp-color-picker' ); wp_add_inline_script( 'wp-color-picker', "jQuery(function($){ $('.awp-color-field').wpColorPicker(); });" ); } /** * Render settings page. */ public function render_page() { if ( ! current_user_can( 'manage_options' ) ) { return; } $tab = isset( $_GET['tab'] ) ? sanitize_key( wp_unslash( $_GET['tab'] ) ) : 'carousel'; // phpcs:ignore WordPress.Security.NonceVerification.Recommended $settings = self::get(); $base_url = admin_url( 'edit.php?post_type=awp-slider&page=awp-slider-settings' ); $tabs = array( 'carousel' => __( 'Carousel', 'advance-wp-slider' ), 'colors' => __( 'Colors', 'advance-wp-slider' ), 'help' => __( 'Help', 'advance-wp-slider' ), ); ?>

[AWP-SLIDER]

__( 'Heading color', 'advance-wp-slider' ), 'color_text' => __( 'Text color', 'advance-wp-slider' ), 'color_btn_bg' => __( 'Button background', 'advance-wp-slider' ), 'color_btn_text' => __( 'Button text', 'advance-wp-slider' ), 'color_btn_hover_bg' => __( 'Button hover background', 'advance-wp-slider' ), 'color_btn_hover_text' => __( 'Button hover text', 'advance-wp-slider' ), 'color_arrow' => __( 'Arrow color', 'advance-wp-slider' ), 'color_arrow_bg' => __( 'Arrow background', 'advance-wp-slider' ), 'color_arrow_hover' => __( 'Arrow hover color', 'advance-wp-slider' ), 'color_dot' => __( 'Pagination inactive', 'advance-wp-slider' ), 'color_dot_active' => __( 'Pagination active', 'advance-wp-slider' ), 'color_overlay' => __( 'Overlay color', 'advance-wp-slider' ), ); foreach ( $color_fields as $key => $label ) : ?>
$settings['color_heading'], '--awp-text' => $settings['color_text'], '--awp-btn-bg' => $settings['color_btn_bg'], '--awp-btn-color' => $settings['color_btn_text'], '--awp-btn-hover-bg' => $settings['color_btn_hover_bg'], '--awp-btn-hover-color' => $settings['color_btn_hover_text'], '--awp-arrow' => $settings['color_arrow'], '--awp-arrow-bg' => $settings['color_arrow_bg'], '--awp-arrow-hover' => $settings['color_arrow_hover'], '--awp-dot' => $settings['color_dot'], '--awp-dot-active' => $settings['color_dot_active'], '--awp-overlay' => $settings['color_overlay'], '--awp-overlay-opacity' => (string) $opacity, '--awp-height' => absint( $settings['slide_height'] ) . 'px', '--awp-btn-radius' => absint( $settings['btn_radius'] ) . 'px', '--awp-btn-py' => absint( $settings['btn_padding_y'] ) . 'px', '--awp-btn-px' => absint( $settings['btn_padding_x'] ) . 'px', '--awp-arrow-size' => absint( $settings['arrow_size'] ) . 'px', '--awp-align' => $settings['content_align'], ); $parts = array(); foreach ( $map as $prop => $value ) { $parts[] = $prop . ':' . $value; } return implode( ';', $parts ); } /** * Swiper config payload for JS. * * @param array $settings Settings. * @return array */ public static function swiper_config( $settings = null ) { $settings = $settings ? wp_parse_args( $settings, self::defaults() ) : self::get(); return array( 'autoplay' => (bool) $settings['autoplay'], 'autoplayDelay' => (int) $settings['autoplay_delay'], 'loop' => (bool) $settings['loop'], 'speed' => (int) $settings['speed'], 'effect' => $settings['effect'], 'slidesPerView' => (float) $settings['slides_per_view'], 'slidesPerViewTablet'=> (float) $settings['slides_per_view_tablet'], 'slidesPerViewMobile'=> (float) $settings['slides_per_view_mobile'], 'spaceBetween' => (int) $settings['space_between'], 'centeredSlides' => (bool) $settings['centered_slides'], 'pauseOnHover' => (bool) $settings['pause_on_hover'], 'keyboard' => (bool) $settings['keyboard'], 'grabCursor' => (bool) $settings['grab_cursor'], 'showArrows' => (bool) $settings['show_arrows'], 'showPagination' => (bool) $settings['show_pagination'], 'paginationType' => $settings['pagination_type'], ); } }