/** * Astra Updates * * Functions for updating data, used by the background updater. * * @package Astra * @version 2.1.3 */ defined( 'ABSPATH' ) || exit; /** * Clear Astra + Astra Pro assets cache. * * @since 3.6.1 * @return void. */ function astra_clear_all_assets_cache() { if ( ! class_exists( 'Astra_Cache_Base' ) ) { return; } // Clear Astra theme asset cache. $astra_cache_base_instance = new Astra_Cache_Base( 'astra' ); $astra_cache_base_instance->refresh_assets( 'astra' ); // Clear Astra Addon's static and dynamic CSS asset cache. $astra_addon_cache_base_instance = new Astra_Cache_Base( 'astra-addon' ); $astra_addon_cache_base_instance->refresh_assets( 'astra-addon' ); } /** * 4.0.0 backward handling part. * * 1. Migrate existing setting & do required onboarding for new admin dashboard v4.0.0 app. * 2. Migrating Post Structure & Meta options in title area meta parts. * * @since 4.0.0 * @return void */ function astra_theme_background_updater_4_0_0() { // Dynamic customizer migration starts here. $theme_options = get_option( 'astra-settings', array() ); if ( ! isset( $theme_options['dynamic-blog-layouts'] ) && ! isset( $theme_options['theme-dynamic-customizer-support'] ) ) { $theme_options['dynamic-blog-layouts'] = false; $theme_options['theme-dynamic-customizer-support'] = true; $post_types = Astra_Posts_Structure_Loader::get_supported_post_types(); // Archive summary box compatibility. $archive_title_font_size = array( 'desktop' => isset( $theme_options['font-size-archive-summary-title']['desktop'] ) ? $theme_options['font-size-archive-summary-title']['desktop'] : 40, 'tablet' => isset( $theme_options['font-size-archive-summary-title']['tablet'] ) ? $theme_options['font-size-archive-summary-title']['tablet'] : '', 'mobile' => isset( $theme_options['font-size-archive-summary-title']['mobile'] ) ? $theme_options['font-size-archive-summary-title']['mobile'] : '', 'desktop-unit' => isset( $theme_options['font-size-archive-summary-title']['desktop-unit'] ) ? $theme_options['font-size-archive-summary-title']['desktop-unit'] : 'px', 'tablet-unit' => isset( $theme_options['font-size-archive-summary-title']['tablet-unit'] ) ? $theme_options['font-size-archive-summary-title']['tablet-unit'] : 'px', 'mobile-unit' => isset( $theme_options['font-size-archive-summary-title']['mobile-unit'] ) ? $theme_options['font-size-archive-summary-title']['mobile-unit'] : 'px', ); $single_title_font_size = array( 'desktop' => isset( $theme_options['font-size-entry-title']['desktop'] ) ? $theme_options['font-size-entry-title']['desktop'] : '', 'tablet' => isset( $theme_options['font-size-entry-title']['tablet'] ) ? $theme_options['font-size-entry-title']['tablet'] : '', 'mobile' => isset( $theme_options['font-size-entry-title']['mobile'] ) ? $theme_options['font-size-entry-title']['mobile'] : '', 'desktop-unit' => isset( $theme_options['font-size-entry-title']['desktop-unit'] ) ? $theme_options['font-size-entry-title']['desktop-unit'] : 'px', 'tablet-unit' => isset( $theme_options['font-size-entry-title']['tablet-unit'] ) ? $theme_options['font-size-entry-title']['tablet-unit'] : 'px', 'mobile-unit' => isset( $theme_options['font-size-entry-title']['mobile-unit'] ) ? $theme_options['font-size-entry-title']['mobile-unit'] : 'px', ); $archive_summary_box_bg = array( 'desktop' => array( 'background-color' => ! empty( $theme_options['archive-summary-box-bg-color'] ) ? $theme_options['archive-summary-box-bg-color'] : '', 'background-image' => '', 'background-repeat' => 'repeat', 'background-position' => 'center center', 'background-size' => 'auto', 'background-attachment' => 'scroll', 'background-type' => '', 'background-media' => '', ), 'tablet' => array( 'background-color' => '', 'background-image' => '', 'background-repeat' => 'repeat', 'background-position' => 'center center', 'background-size' => 'auto', 'background-attachment' => 'scroll', 'background-type' => '', 'background-media' => '', ), 'mobile' => array( 'background-color' => '', 'background-image' => '', 'background-repeat' => 'repeat', 'background-position' => 'center center', 'background-size' => 'auto', 'background-attachment' => 'scroll', 'background-type' => '', 'background-media' => '', ), ); // Single post structure. foreach ( $post_types as $post_type ) { /** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort $single_post_structure = isset( $theme_options['blog-single-post-structure'] ) ? $theme_options['blog-single-post-structure'] : array( 'single-image', 'single-title-meta' ); /** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort $migrated_post_structure = array(); if ( ! empty( $single_post_structure ) ) { /** @psalm-suppress PossiblyInvalidIterator */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort foreach ( $single_post_structure as $key ) { /** @psalm-suppress PossiblyInvalidIterator */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort if ( 'single-title-meta' === $key ) { $migrated_post_structure[] = 'ast-dynamic-single-' . esc_attr( $post_type ) . '-title'; if ( 'post' === $post_type ) { $migrated_post_structure[] = 'ast-dynamic-single-' . esc_attr( $post_type ) . '-meta'; } } if ( 'single-image' === $key ) { $migrated_post_structure[] = 'ast-dynamic-single-' . esc_attr( $post_type ) . '-image'; } } $theme_options[ 'ast-dynamic-single-' . esc_attr( $post_type ) . '-structure' ] = $migrated_post_structure; } // Single post meta. /** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort $single_post_meta = isset( $theme_options['blog-single-meta'] ) ? $theme_options['blog-single-meta'] : array( 'comments', 'category', 'author' ); /** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort $migrated_post_metadata = array(); if ( ! empty( $single_post_meta ) ) { $tax_counter = 0; $tax_slug = 'ast-dynamic-single-' . esc_attr( $post_type ) . '-taxonomy'; /** @psalm-suppress PossiblyInvalidIterator */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort foreach ( $single_post_meta as $key ) { /** @psalm-suppress PossiblyInvalidIterator */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort switch ( $key ) { case 'author': $migrated_post_metadata[] = 'author'; break; case 'date': $migrated_post_metadata[] = 'date'; break; case 'comments': $migrated_post_metadata[] = 'comments'; break; case 'category': if ( 'post' === $post_type ) { $migrated_post_metadata[] = $tax_slug; $theme_options[ $tax_slug ] = 'category'; $tax_counter = ++$tax_counter; $tax_slug = 'ast-dynamic-single-' . esc_attr( $post_type ) . '-taxonomy-' . $tax_counter; } break; case 'tag': if ( 'post' === $post_type ) { $migrated_post_metadata[] = $tax_slug; $theme_options[ $tax_slug ] = 'post_tag'; $tax_counter = ++$tax_counter; $tax_slug = 'ast-dynamic-single-' . esc_attr( $post_type ) . '-taxonomy-' . $tax_counter; } break; default: break; } } $theme_options[ 'ast-dynamic-single-' . esc_attr( $post_type ) . '-metadata' ] = $migrated_post_metadata; } // Archive layout compatibilities. $archive_banner_layout = class_exists( 'WooCommerce' ) && 'product' === $post_type ? false : true; // Setting WooCommerce archive option disabled as WC already added their header content on archive. $theme_options[ 'ast-archive-' . esc_attr( $post_type ) . '-title' ] = $archive_banner_layout; // Single layout compatibilities. $single_banner_layout = class_exists( 'WooCommerce' ) && 'product' === $post_type ? false : true; // Setting WC single option disabled as there is no any header set from default WooCommerce. $theme_options[ 'ast-single-' . esc_attr( $post_type ) . '-title' ] = $single_banner_layout; // BG color support. $theme_options[ 'ast-dynamic-archive-' . esc_attr( $post_type ) . '-banner-image-type' ] = ! empty( $theme_options['archive-summary-box-bg-color'] ) ? 'custom' : 'none'; $theme_options[ 'ast-dynamic-archive-' . esc_attr( $post_type ) . '-banner-custom-bg' ] = $archive_summary_box_bg; // Archive title font support. /** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort $theme_options[ 'ast-dynamic-archive-' . esc_attr( $post_type ) . '-title-font-family' ] = ! empty( $theme_options['font-family-archive-summary-title'] ) ? $theme_options['font-family-archive-summary-title'] : ''; /** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort /** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort $theme_options[ 'ast-dynamic-archive-' . esc_attr( $post_type ) . '-title-font-size' ] = $archive_title_font_size; /** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort /** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort $theme_options[ 'ast-dynamic-archive-' . esc_attr( $post_type ) . '-title-font-weight' ] = ! empty( $theme_options['font-weight-archive-summary-title'] ) ? $theme_options['font-weight-archive-summary-title'] : ''; /** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort /** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort $archive_dynamic_line_height = ! empty( $theme_options['line-height-archive-summary-title'] ) ? $theme_options['line-height-archive-summary-title'] : ''; /** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort /** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort $archive_dynamic_text_transform = ! empty( $theme_options['text-transform-archive-summary-title'] ) ? $theme_options['text-transform-archive-summary-title'] : ''; /** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort $theme_options[ 'ast-dynamic-archive-' . esc_attr( $post_type ) . '-title-font-extras' ] = array( 'line-height' => $archive_dynamic_line_height, 'line-height-unit' => 'em', 'letter-spacing' => '', 'letter-spacing-unit' => 'px', 'text-transform' => $archive_dynamic_text_transform, 'text-decoration' => '', ); // Archive title colors support. /** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort $theme_options[ 'ast-dynamic-archive-' . esc_attr( $post_type ) . '-banner-title-color' ] = ! empty( $theme_options['archive-summary-box-title-color'] ) ? $theme_options['archive-summary-box-title-color'] : ''; /** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort /** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort $theme_options[ 'ast-dynamic-archive-' . esc_attr( $post_type ) . '-banner-text-color' ] = ! empty( $theme_options['archive-summary-box-text-color'] ) ? $theme_options['archive-summary-box-text-color'] : ''; /** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort // Single title colors support. /** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort $theme_options[ 'ast-dynamic-single-' . esc_attr( $post_type ) . '-banner-title-color' ] = ! empty( $theme_options['entry-title-color'] ) ? $theme_options['entry-title-color'] : ''; /** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort // Single title font support. /** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort $theme_options[ 'ast-dynamic-single-' . esc_attr( $post_type ) . '-title-font-family' ] = ! empty( $theme_options['font-family-entry-title'] ) ? $theme_options['font-family-entry-title'] : ''; /** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort /** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort $theme_options[ 'ast-dynamic-single-' . esc_attr( $post_type ) . '-title-font-size' ] = $single_title_font_size; /** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort /** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort $theme_options[ 'ast-dynamic-single-' . esc_attr( $post_type ) . '-title-font-weight' ] = ! empty( $theme_options['font-weight-entry-title'] ) ? $theme_options['font-weight-entry-title'] : ''; /** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort /** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort $single_dynamic_line_height = ! empty( $theme_options['line-height-entry-title'] ) ? $theme_options['line-height-entry-title'] : ''; /** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort /** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort $single_dynamic_text_transform = ! empty( $theme_options['text-transform-entry-title'] ) ? $theme_options['text-transform-entry-title'] : ''; /** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort $theme_options[ 'ast-dynamic-single-' . esc_attr( $post_type ) . '-title-font-extras' ] = array( 'line-height' => $single_dynamic_line_height, 'line-height-unit' => 'em', 'letter-spacing' => '', 'letter-spacing-unit' => 'px', 'text-transform' => $single_dynamic_text_transform, 'text-decoration' => '', ); } // Set page specific structure, as page only has featured image at top & title beneath to it, hardcoded writing it here. $theme_options['ast-dynamic-single-page-structure'] = array( 'ast-dynamic-single-page-image', 'ast-dynamic-single-page-title' ); // EDD content layout & sidebar layout migration in new dynamic option. $theme_options['archive-download-content-layout'] = isset( $theme_options['edd-archive-product-layout'] ) ? $theme_options['edd-archive-product-layout'] : 'default'; $theme_options['archive-download-sidebar-layout'] = isset( $theme_options['edd-sidebar-layout'] ) ? $theme_options['edd-sidebar-layout'] : 'no-sidebar'; $theme_options['single-download-content-layout'] = isset( $theme_options['edd-single-product-layout'] ) ? $theme_options['edd-single-product-layout'] : 'default'; $theme_options['single-download-sidebar-layout'] = isset( $theme_options['edd-single-product-sidebar-layout'] ) ? $theme_options['edd-single-product-sidebar-layout'] : 'default'; update_option( 'astra-settings', $theme_options ); } // Admin backward handling starts here. $admin_dashboard_settings = get_option( 'astra_admin_settings', array() ); if ( ! isset( $admin_dashboard_settings['theme-setup-admin-migrated'] ) ) { if ( ! isset( $admin_dashboard_settings['self_hosted_gfonts'] ) ) { $admin_dashboard_settings['self_hosted_gfonts'] = isset( $theme_options['load-google-fonts-locally'] ) ? $theme_options['load-google-fonts-locally'] : false; } if ( ! isset( $admin_dashboard_settings['preload_local_fonts'] ) ) { $admin_dashboard_settings['preload_local_fonts'] = isset( $theme_options['preload-local-fonts'] ) ? $theme_options['preload-local-fonts'] : false; } // Consider admin part from theme side migrated. $admin_dashboard_settings['theme-setup-admin-migrated'] = true; update_option( 'astra_admin_settings', $admin_dashboard_settings ); } // Check if existing user and disable smooth scroll-to-id. if ( ! isset( $theme_options['enable-scroll-to-id'] ) ) { $theme_options['enable-scroll-to-id'] = false; update_option( 'astra-settings', $theme_options ); } // Check if existing user and disable scroll to top if disabled from pro addons list. $scroll_to_top_visibility = false; /** @psalm-suppress UndefinedClass */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort if ( defined( 'ASTRA_EXT_VER' ) && Astra_Ext_Extension::is_active( 'scroll-to-top' ) ) { /** @psalm-suppress UndefinedClass */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort $scroll_to_top_visibility = true; } if ( ! isset( $theme_options['scroll-to-top-enable'] ) ) { $theme_options['scroll-to-top-enable'] = $scroll_to_top_visibility; update_option( 'astra-settings', $theme_options ); } // Default colors & typography flag. if ( ! isset( $theme_options['update-default-color-typo'] ) ) { $theme_options['update-default-color-typo'] = false; update_option( 'astra-settings', $theme_options ); } // Block editor experience improvements compatibility flag. if ( ! isset( $theme_options['v4-block-editor-compat'] ) ) { $theme_options['v4-block-editor-compat'] = false; update_option( 'astra-settings', $theme_options ); } } /** * 4.0.2 backward handling part. * * 1. Read Time option backwards handling for old users. * * @since 4.0.2 * @return void */ function astra_theme_background_updater_4_0_2() { $theme_options = get_option( 'astra-settings', array() ); if ( ! isset( $theme_options['v4-0-2-update-migration'] ) && isset( $theme_options['blog-single-meta'] ) && in_array( 'read-time', $theme_options['blog-single-meta'] ) ) { if ( isset( $theme_options['ast-dynamic-single-post-metadata'] ) && ! in_array( 'read-time', $theme_options['ast-dynamic-single-post-metadata'] ) ) { $theme_options['ast-dynamic-single-post-metadata'][] = 'read-time'; $theme_options['v4-0-2-update-migration'] = true; update_option( 'astra-settings', $theme_options ); } } } /** * Handle backward compatibility on version 4.1.0 * * @since 4.1.0 * @return void */ function astra_theme_background_updater_4_1_0() { $theme_options = get_option( 'astra-settings', array() ); if ( ! isset( $theme_options['v4-1-0-update-migration'] ) ) { $theme_options['v4-1-0-update-migration'] = true; $current_payment_list = array(); $old_payment_list = isset( $theme_options['single-product-payment-list']['items'] ) ? $theme_options['single-product-payment-list']['items'] : array(); $visa_payment = isset( $theme_options['single-product-payment-visa'] ) ? $theme_options['single-product-payment-visa'] : ''; $mastercard_payment = isset( $theme_options['single-product-payment-mastercard'] ) ? $theme_options['single-product-payment-mastercard'] : ''; $discover_payment = isset( $theme_options['single-product-payment-discover'] ) ? $theme_options['single-product-payment-discover'] : ''; $paypal_payment = isset( $theme_options['single-product-payment-paypal'] ) ? $theme_options['single-product-payment-paypal'] : ''; $apple_pay_payment = isset( $theme_options['single-product-payment-apple-pay'] ) ? $theme_options['single-product-payment-apple-pay'] : ''; false !== $visa_payment ? array_push( $current_payment_list, array( 'id' => 'item-100', 'enabled' => true, 'source' => 'icon', 'icon' => 'cc-visa', 'image' => '', 'label' => __( 'Visa', 'astra' ), ) ) : ''; false !== $mastercard_payment ? array_push( $current_payment_list, array( 'id' => 'item-101', 'enabled' => true, 'source' => 'icon', 'icon' => 'cc-mastercard', 'image' => '', 'label' => __( 'Mastercard', 'astra' ), ) ) : ''; false !== $mastercard_payment ? array_push( $current_payment_list, array( 'id' => 'item-102', 'enabled' => true, 'source' => 'icon', 'icon' => 'cc-amex', 'image' => '', 'label' => __( 'Amex', 'astra' ), ) ) : ''; false !== $discover_payment ? array_push( $current_payment_list, array( 'id' => 'item-103', 'enabled' => true, 'source' => 'icon', 'icon' => 'cc-discover', 'image' => '', 'label' => __( 'Discover', 'astra' ), ) ) : ''; $paypal_payment ? array_push( $current_payment_list, array( 'id' => 'item-104', 'enabled' => true, 'source' => 'icon', 'icon' => 'cc-paypal', 'image' => '', 'label' => __( 'Paypal', 'astra' ), ) ) : ''; $apple_pay_payment ? array_push( $current_payment_list, array( 'id' => 'item-105', 'enabled' => true, 'source' => 'icon', 'icon' => 'cc-apple-pay', 'image' => '', 'label' => __( 'Apple Pay', 'astra' ), ) ) : ''; if ( $current_payment_list ) { $theme_options['single-product-payment-list'] = array( 'items' => array_merge( $current_payment_list, $old_payment_list ), ); update_option( 'astra-settings', $theme_options ); } if ( ! isset( $theme_options['woo_support_global_settings'] ) ) { $theme_options['woo_support_global_settings'] = true; update_option( 'astra-settings', $theme_options ); } if ( isset( $theme_options['theme-dynamic-customizer-support'] ) ) { $post_types = Astra_Posts_Structure_Loader::get_supported_post_types(); foreach ( $post_types as $post_type ) { $theme_options[ 'ast-dynamic-single-' . esc_attr( $post_type ) . '-title-font-extras' ]['text-transform'] = ''; } update_option( 'astra-settings', $theme_options ); } } } /** * 4.1.4 backward handling cases. * * 1. Migrating users to combined color overlay option to new dedicated overlay options. * * @since 4.1.4 * @return void */ function astra_theme_background_updater_4_1_4() { $theme_options = get_option( 'astra-settings', array() ); if ( ! isset( $theme_options['v4-1-4-update-migration'] ) ) { $ast_bg_control_options = array( 'off-canvas-background', 'footer-adv-bg-obj', 'footer-bg-obj', ); foreach ( $ast_bg_control_options as $bg_option ) { if ( isset( $theme_options[ $bg_option ] ) && ! isset( $theme_options[ $bg_option ]['overlay-type'] ) ) { $bg_type = isset( $theme_options[ $bg_option ]['background-type'] ) ? $theme_options[ $bg_option ]['background-type'] : ''; $theme_options[ $bg_option ]['overlay-type'] = 'none'; $theme_options[ $bg_option ]['overlay-color'] = ''; $theme_options[ $bg_option ]['overlay-opacity'] = ''; $theme_options[ $bg_option ]['overlay-gradient'] = ''; if ( 'image' === $bg_type ) { $bg_img = isset( $theme_options[ $bg_option ]['background-image'] ) ? $theme_options[ $bg_option ]['background-image'] : ''; $bg_color = isset( $theme_options[ $bg_option ]['background-color'] ) ? $theme_options[ $bg_option ]['background-color'] : ''; if ( '' !== $bg_img && '' !== $bg_color && ( ! is_numeric( strpos( $bg_color, 'linear-gradient' ) ) && ! is_numeric( strpos( $bg_color, 'radial-gradient' ) ) ) ) { $theme_options[ $bg_option ]['overlay-type'] = 'classic'; $theme_options[ $bg_option ]['overlay-color'] = $bg_color; $theme_options[ $bg_option ]['overlay-opacity'] = ''; $theme_options[ $bg_option ]['overlay-gradient'] = ''; } } } } $ast_resp_bg_control_options = array( 'hba-footer-bg-obj-responsive', 'hbb-footer-bg-obj-responsive', 'footer-bg-obj-responsive', 'footer-menu-bg-obj-responsive', 'hb-footer-bg-obj-responsive', 'hba-header-bg-obj-responsive', 'hbb-header-bg-obj-responsive', 'hb-header-bg-obj-responsive', 'header-mobile-menu-bg-obj-responsive', 'site-layout-outside-bg-obj-responsive', 'content-bg-obj-responsive', ); $post_types = Astra_Posts_Structure_Loader::get_supported_post_types(); foreach ( $post_types as $index => $post_type ) { $ast_resp_bg_control_options[] = 'ast-dynamic-archive-' . esc_attr( $post_type ) . '-banner-custom-bg'; $ast_resp_bg_control_options[] = 'ast-dynamic-single-' . esc_attr( $post_type ) . '-banner-background'; } $component_limit = defined( 'ASTRA_EXT_VER' ) ? Astra_Builder_Helper::$component_limit : Astra_Builder_Helper::$num_of_header_menu; for ( $index = 1; $index <= $component_limit; $index++ ) { $_prefix = 'menu' . $index; $ast_resp_bg_control_options[] = 'header-' . $_prefix . '-bg-obj-responsive'; } foreach ( $ast_resp_bg_control_options as $resp_bg_option ) { // Desktop version. /** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort if ( isset( $theme_options[ $resp_bg_option ]['desktop'] ) && is_array( $theme_options[ $resp_bg_option ]['desktop'] ) && ! isset( $theme_options[ $resp_bg_option ]['desktop']['overlay-type'] ) ) { // @codingStandardsIgnoreStart $desk_bg_type = isset( $theme_options[ $resp_bg_option ]['desktop']['background-type'] ) ? $theme_options[ $resp_bg_option ]['desktop']['background-type'] : ''; // @codingStandardsIgnoreEnd $theme_options[ $resp_bg_option ]['desktop']['overlay-type'] = ''; $theme_options[ $resp_bg_option ]['desktop']['overlay-color'] = ''; $theme_options[ $resp_bg_option ]['desktop']['overlay-opacity'] = ''; $theme_options[ $resp_bg_option ]['desktop']['overlay-gradient'] = ''; if ( 'image' === $desk_bg_type ) { $bg_img = isset( $theme_options[ $resp_bg_option ]['desktop']['background-image'] ) ? $theme_options[ $resp_bg_option ]['desktop']['background-image'] : ''; $bg_color = isset( $theme_options[ $resp_bg_option ]['desktop']['background-color'] ) ? $theme_options[ $resp_bg_option ]['desktop']['background-color'] : ''; if ( '' !== $bg_img && '' !== $bg_color && ( ! is_numeric( strpos( $bg_color, 'linear-gradient' ) ) && ! is_numeric( strpos( $bg_color, 'radial-gradient' ) ) ) ) { $theme_options[ $resp_bg_option ]['desktop']['overlay-type'] = 'classic'; $theme_options[ $resp_bg_option ]['desktop']['overlay-color'] = $bg_color; $theme_options[ $resp_bg_option ]['desktop']['overlay-opacity'] = ''; $theme_options[ $resp_bg_option ]['desktop']['overlay-gradient'] = ''; } } } // Tablet version. /** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort if ( isset( $theme_options[ $resp_bg_option ]['tablet'] ) && is_array( $theme_options[ $resp_bg_option ]['tablet'] ) && ! isset( $theme_options[ $resp_bg_option ]['tablet']['overlay-type'] ) ) { // @codingStandardsIgnoreStart $tablet_bg_type = isset( $theme_options[ $resp_bg_option ]['tablet']['background-type'] ) ? $theme_options[ $resp_bg_option ]['tablet']['background-type'] : ''; // @codingStandardsIgnoreEnd $theme_options[ $resp_bg_option ]['tablet']['overlay-type'] = ''; $theme_options[ $resp_bg_option ]['tablet']['overlay-color'] = ''; $theme_options[ $resp_bg_option ]['tablet']['overlay-opacity'] = ''; $theme_options[ $resp_bg_option ]['tablet']['overlay-gradient'] = ''; if ( 'image' === $tablet_bg_type ) { $bg_img = isset( $theme_options[ $resp_bg_option ]['tablet']['background-image'] ) ? $theme_options[ $resp_bg_option ]['tablet']['background-image'] : ''; $bg_color = isset( $theme_options[ $resp_bg_option ]['tablet']['background-color'] ) ? $theme_options[ $resp_bg_option ]['tablet']['background-color'] : ''; if ( '' !== $bg_img && '' !== $bg_color && ( ! is_numeric( strpos( $bg_color, 'linear-gradient' ) ) && ! is_numeric( strpos( $bg_color, 'radial-gradient' ) ) ) ) { $theme_options[ $resp_bg_option ]['tablet']['overlay-type'] = 'classic'; $theme_options[ $resp_bg_option ]['tablet']['overlay-color'] = $bg_color; $theme_options[ $resp_bg_option ]['tablet']['overlay-opacity'] = ''; $theme_options[ $resp_bg_option ]['tablet']['overlay-gradient'] = ''; } } } // Mobile version. /** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort if ( isset( $theme_options[ $resp_bg_option ]['mobile'] ) && is_array( $theme_options[ $resp_bg_option ]['mobile'] ) && ! isset( $theme_options[ $resp_bg_option ]['mobile']['overlay-type'] ) ) { // @codingStandardsIgnoreStart $mobile_bg_type = isset( $theme_options[ $resp_bg_option ]['mobile']['background-type'] ) ? $theme_options[ $resp_bg_option ]['mobile']['background-type'] : ''; // @codingStandardsIgnoreEnd $theme_options[ $resp_bg_option ]['mobile']['overlay-type'] = ''; $theme_options[ $resp_bg_option ]['mobile']['overlay-color'] = ''; $theme_options[ $resp_bg_option ]['mobile']['overlay-opacity'] = ''; $theme_options[ $resp_bg_option ]['mobile']['overlay-gradient'] = ''; if ( 'image' === $mobile_bg_type ) { $bg_img = isset( $theme_options[ $resp_bg_option ]['mobile']['background-image'] ) ? $theme_options[ $resp_bg_option ]['mobile']['background-image'] : ''; $bg_color = isset( $theme_options[ $resp_bg_option ]['mobile']['background-color'] ) ? $theme_options[ $resp_bg_option ]['mobile']['background-color'] : ''; if ( '' !== $bg_img && '' !== $bg_color && ( ! is_numeric( strpos( $bg_color, 'linear-gradient' ) ) && ! is_numeric( strpos( $bg_color, 'radial-gradient' ) ) ) ) { $theme_options[ $resp_bg_option ]['mobile']['overlay-type'] = 'classic'; $theme_options[ $resp_bg_option ]['mobile']['overlay-color'] = $bg_color; $theme_options[ $resp_bg_option ]['mobile']['overlay-opacity'] = ''; $theme_options[ $resp_bg_option ]['mobile']['overlay-gradient'] = ''; } } } } $theme_options['v4-1-4-update-migration'] = true; update_option( 'astra-settings', $theme_options ); } } /** * Handle backward compatibility on version 4.1.6 * * @since 4.1.6 * @return void */ function astra_theme_background_updater_4_1_6() { $theme_options = get_option( 'astra-settings', array() ); if ( ! isset( $theme_options['list-block-vertical-spacing'] ) ) { $theme_options['list-block-vertical-spacing'] = false; update_option( 'astra-settings', $theme_options ); } } /** * Set flag to avoid direct reflections on live site & to maintain backward compatibility for existing users. * * @since 4.1.7 * @return void */ function astra_theme_background_updater_4_1_7() { $theme_options = get_option( 'astra-settings', array() ); if ( ! isset( $theme_options['add-hr-styling-css'] ) ) { $theme_options['add-hr-styling-css'] = false; update_option( 'astra-settings', $theme_options ); } if ( ! isset( $theme_options['astra-site-svg-logo-equal-height'] ) ) { $theme_options['astra-site-svg-logo-equal-height'] = false; update_option( 'astra-settings', $theme_options ); } } /** * Migrating users to new container layout options * * @since 4.2.0 * @return void */ function astra_theme_background_updater_4_2_0() { $theme_options = get_option( 'astra-settings', array() ); if ( ! isset( $theme_options['v4-2-0-update-migration'] ) ) { $post_types = Astra_Posts_Structure_Loader::get_supported_post_types(); $theme_options = get_option( 'astra-settings' ); $blog_types = array( 'single', 'archive' ); $third_party_layouts = array( 'woocommerce', 'edd', 'lifterlms', 'lifterlms-course-lesson', 'learndash' ); // Global. if ( isset( $theme_options['site-content-layout'] ) ) { $theme_options = astra_apply_layout_migration( 'site-content-layout', 'ast-site-content-layout', 'site-content-style', 'site-sidebar-style', $theme_options ); } // Single, archive. foreach ( $blog_types as $blog_type ) { foreach ( $post_types as $post_type ) { $old_layout = $blog_type . '-' . esc_attr( $post_type ) . '-content-layout'; $new_layout = $blog_type . '-' . esc_attr( $post_type ) . '-ast-content-layout'; $content_style = $blog_type . '-' . esc_attr( $post_type ) . '-content-style'; $sidebar_style = $blog_type . '-' . esc_attr( $post_type ) . '-sidebar-style'; if ( isset( $theme_options[ $old_layout ] ) ) { $theme_options = astra_apply_layout_migration( $old_layout, $new_layout, $content_style, $sidebar_style, $theme_options ); } } } // Third party existing layout migrations to new layout options. foreach ( $third_party_layouts as $layout ) { $old_layout = $layout . '-content-layout'; $new_layout = $layout . '-ast-content-layout'; $content_style = $layout . '-content-style'; $sidebar_style = $layout . '-sidebar-style'; if ( isset( $theme_options[ $old_layout ] ) ) { if ( 'lifterlms' === $layout ) { // Lifterlms course/lesson sidebar style migration case. $theme_options = astra_apply_layout_migration( $old_layout, $new_layout, $content_style, 'lifterlms-course-lesson-sidebar-style', $theme_options ); } $theme_options = astra_apply_layout_migration( $old_layout, $new_layout, $content_style, $sidebar_style, $theme_options ); } } if ( ! isset( $theme_options['fullwidth_sidebar_support'] ) ) { $theme_options['fullwidth_sidebar_support'] = false; } $theme_options['v4-2-0-update-migration'] = true; update_option( 'astra-settings', $theme_options ); } } /** * Handle migration from old to new layouts. * * Migration cases for old users, old layouts -> new layouts. * * @since 4.2.0 * @param mixed $old_layout old_layout. * @param mixed $new_layout new_layout. * @param mixed $content_style content_style. * @param mixed $sidebar_style sidebar_style. * @param array $theme_options theme_options. * @return array $theme_options The updated theme options. */ function astra_apply_layout_migration( $old_layout, $new_layout, $content_style, $sidebar_style, $theme_options ) { switch ( astra_get_option( $old_layout ) ) { case 'boxed-container': $theme_options[ $new_layout ] = 'normal-width-container'; $theme_options[ $content_style ] = 'boxed'; $theme_options[ $sidebar_style ] = 'boxed'; break; case 'content-boxed-container': $theme_options[ $new_layout ] = 'normal-width-container'; $theme_options[ $content_style ] = 'boxed'; $theme_options[ $sidebar_style ] = 'unboxed'; break; case 'plain-container': $theme_options[ $new_layout ] = 'normal-width-container'; $theme_options[ $content_style ] = 'unboxed'; $theme_options[ $sidebar_style ] = 'unboxed'; break; case 'page-builder': $theme_options[ $new_layout ] = 'full-width-container'; $theme_options[ $content_style ] = 'unboxed'; $theme_options[ $sidebar_style ] = 'unboxed'; break; case 'narrow-container': $theme_options[ $new_layout ] = 'narrow-width-container'; $theme_options[ $content_style ] = 'unboxed'; $theme_options[ $sidebar_style ] = 'unboxed'; break; default: $theme_options[ $new_layout ] = 'default'; $theme_options[ $content_style ] = 'default'; $theme_options[ $sidebar_style ] = 'default'; break; } return $theme_options; } /** * Handle backward compatibility on version 4.2.2 * * @since 4.2.2 * @return void */ function astra_theme_background_updater_4_2_2() { $theme_options = get_option( 'astra-settings', array() ); if ( ! isset( $theme_options['v4-2-2-core-form-btns-styling'] ) ) { $theme_options['v4-2-2-core-form-btns-styling'] = false; update_option( 'astra-settings', $theme_options ); } } /** * Handle backward compatibility on version 4.6.0 * * @since 4.4.0 * @return void */ function astra_theme_background_updater_4_4_0() { $theme_options = get_option( 'astra-settings', array() ); if ( ! isset( $theme_options['v4-4-0-backward-option'] ) ) { $theme_options['v4-4-0-backward-option'] = false; // Migrate primary button outline styles to secondary buttons. if ( isset( $theme_options['font-family-button'] ) ) { $theme_options['secondary-font-family-button'] = $theme_options['font-family-button']; } if ( isset( $theme_options['font-size-button'] ) ) { $theme_options['secondary-font-size-button'] = $theme_options['font-size-button']; } if ( isset( $theme_options['font-weight-button'] ) ) { $theme_options['secondary-font-weight-button'] = $theme_options['font-weight-button']; } if ( isset( $theme_options['font-extras-button'] ) ) { $theme_options['secondary-font-extras-button'] = $theme_options['font-extras-button']; } if ( isset( $theme_options['button-bg-color'] ) ) { $theme_options['secondary-button-bg-color'] = $theme_options['button-bg-color']; } if ( isset( $theme_options['button-bg-h-color'] ) ) { $theme_options['secondary-button-bg-h-color'] = $theme_options['button-bg-h-color']; } if ( isset( $theme_options['theme-button-border-group-border-color'] ) ) { $theme_options['secondary-theme-button-border-group-border-color'] = $theme_options['theme-button-border-group-border-color']; } if ( isset( $theme_options['theme-button-border-group-border-h-color'] ) ) { $theme_options['secondary-theme-button-border-group-border-h-color'] = $theme_options['theme-button-border-group-border-h-color']; } if ( isset( $theme_options['button-radius-fields'] ) ) { $theme_options['secondary-button-radius-fields'] = $theme_options['button-radius-fields']; } // Single - Article Featured Image visibility migration. $post_types = Astra_Posts_Structure_Loader::get_supported_post_types(); foreach ( $post_types as $post_type ) { $theme_options[ 'ast-dynamic-single-' . esc_attr( $post_type ) . '-article-featured-image-position-layout-1' ] = 'none'; $theme_options[ 'ast-dynamic-single-' . esc_attr( $post_type ) . '-article-featured-image-position-layout-2' ] = 'none'; $theme_options[ 'ast-dynamic-single-' . esc_attr( $post_type ) . '-article-featured-image-ratio-type' ] = 'default'; } update_option( 'astra-settings', $theme_options ); } } /** * Handle backward compatibility on version 4.5.0. * * @since 4.5.0 * @return void */ function astra_theme_background_updater_4_5_0() { $theme_options = get_option( 'astra-settings', array() ); if ( ! isset( $theme_options['v4-5-0-backward-option'] ) ) { $theme_options['v4-5-0-backward-option'] = false; $palette_options = get_option( 'astra-color-palettes', Astra_Global_Palette::get_default_color_palette() ); if ( ! isset( $palette_options['presets'] ) ) { $palette_options['presets'] = astra_get_palette_presets(); update_option( 'astra-color-palettes', $palette_options ); } update_option( 'astra-settings', $theme_options ); } } /** * Handle backward compatibility on version 4.5.2. * * @since 4.5.2 * @return void */ function astra_theme_background_updater_4_5_2() { $theme_options = get_option( 'astra-settings', array() ); if ( ! isset( $theme_options['scndry-btn-default-padding'] ) ) { $theme_options['scndry-btn-default-padding'] = false; update_option( 'astra-settings', $theme_options ); } } /** * Handle backward compatibility on version 4.6.0 * * @since 4.6.0 * @return void */ function astra_theme_background_updater_4_6_0() { $theme_options = get_option( 'astra-settings', array() ); if ( ! isset( $theme_options['v4-6-0-backward-option'] ) ) { $theme_options['v4-6-0-backward-option'] = false; /** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort $blog_post_structure = isset( $theme_options['blog-post-structure'] ) ? $theme_options['blog-post-structure'] : array( 'image', 'title-meta' ); /** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort $migrated_post_structure = array(); if ( ! empty( $blog_post_structure ) ) { /** @psalm-suppress PossiblyInvalidIterator */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort foreach ( $blog_post_structure as $key ) { /** @psalm-suppress PossiblyInvalidIterator */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort if ( 'title-meta' === $key ) { $migrated_post_structure[] = 'title'; $migrated_post_structure[] = 'title-meta'; } if ( 'image' === $key ) { $migrated_post_structure[] = 'image'; } } $migrated_post_structure[] = 'excerpt'; $migrated_post_structure[] = 'read-more'; $theme_options['blog-post-structure'] = $migrated_post_structure; } if ( defined( 'ASTRA_EXT_VER' ) ) { $theme_options['ast-sub-section-author-box-border-width'] = isset( $theme_options['author-box-border-width'] ) ? $theme_options['author-box-border-width'] : array( 'top' => '', 'right' => '', 'bottom' => '', 'left' => '', ); $theme_options['ast-sub-section-author-box-border-radius'] = isset( $theme_options['author-box-border-radius'] ) ? $theme_options['author-box-border-radius'] : array( 'top' => '', 'right' => '', 'bottom' => '', 'left' => '', ); $theme_options['ast-sub-section-author-box-border-color'] = isset( $theme_options['author-box-border-color'] ) ? $theme_options['author-box-border-color'] : ''; if ( isset( $theme_options['single-post-inside-spacing'] ) ) { $theme_options['ast-sub-section-author-box-padding'] = $theme_options['single-post-inside-spacing']; } if ( isset( $theme_options['font-family-post-meta'] ) ) { $theme_options['font-family-post-read-more'] = $theme_options['font-family-post-meta']; } if ( isset( $theme_options['font-extras-post-meta'] ) ) { $theme_options['font-extras-post-read-more'] = $theme_options['font-extras-post-meta']; } } if ( isset( $theme_options['single-post-inside-spacing'] ) ) { $theme_options['ast-sub-section-related-posts-padding'] = $theme_options['single-post-inside-spacing']; } $theme_options['single-content-images-shadow'] = false; $theme_options['ast-font-style-update'] = false; update_option( 'astra-settings', $theme_options ); } $docs_legacy_data = get_option( 'astra_docs_data', array() ); if ( ! empty( $docs_legacy_data ) ) { delete_option( 'astra_docs_data' ); } } /** * Handle backward compatibility on version 4.6.2. * * @since 4.6.2 * @return void */ function astra_theme_background_updater_4_6_2() { $theme_options = get_option( 'astra-settings', array() ); // Unset "featured image" for pages structure. if ( ! isset( $theme_options['v4-6-2-backward-option'] ) ) { $theme_options['v4-6-2-backward-option'] = false; $page_banner_layout = isset( $theme_options['ast-dynamic-single-page-layout'] ) ? $theme_options['ast-dynamic-single-page-layout'] : 'layout-1'; $page_structure = isset( $theme_options['ast-dynamic-single-page-structure'] ) ? $theme_options['ast-dynamic-single-page-structure'] : array( 'ast-dynamic-single-page-image', 'ast-dynamic-single-page-title' ); $layout_1_image_position = isset( $theme_options['ast-dynamic-single-page-article-featured-image-position-layout-1'] ) ? $theme_options['ast-dynamic-single-page-article-featured-image-position-layout-1'] : 'behind'; $migrated_page_structure = array(); if ( 'layout-1' === $page_banner_layout && 'none' === $layout_1_image_position && ! empty( $page_structure ) ) { foreach ( $page_structure as $key ) { if ( 'ast-dynamic-single-page-image' !== $key ) { $migrated_page_structure[] = $key; } } $theme_options['ast-dynamic-single-page-structure'] = $migrated_page_structure; } update_option( 'astra-settings', $theme_options ); } } /** * Handle backward compatibility on version 4.6.4. * * @since 4.6.4 * @return void */ function astra_theme_background_updater_4_6_4() { $theme_options = get_option( 'astra-settings', array() ); if ( ! isset( $theme_options['btn-stylings-upgrade'] ) ) { $theme_options['btn-stylings-upgrade'] = false; update_option( 'astra-settings', $theme_options ); } } /** * Handle backward compatibility for Elementor Pro heading's margin. * * @since 4.6.5 * @return void */ function astra_theme_background_updater_4_6_5() { $theme_options = get_option( 'astra-settings', array() ); if ( ! isset( $theme_options['elementor-headings-style'] ) ) { $theme_options['elementor-headings-style'] = defined( 'ELEMENTOR_PRO_VERSION' ) ? true : false; update_option( 'astra-settings', $theme_options ); } } /** * Handle backward compatibility for Elementor Loop block post div container padding. * * @since 4.6.6 * @return void */ function astra_theme_background_updater_4_6_6() { $theme_options = get_option( 'astra-settings', array() ); if ( ! isset( $theme_options['elementor-container-padding-style'] ) ) { $theme_options['elementor-container-padding-style'] = defined( 'ELEMENTOR_PRO_VERSION' ) ? true : false; update_option( 'astra-settings', $theme_options ); } } /** * Handle backward compatibility for Starter template library preview line height cases. * * @since 4.6.11 * @return void */ function astra_theme_background_updater_4_6_11() { $theme_options = get_option( 'astra-settings', array() ); if ( isset( $theme_options['global-headings-line-height-update'] ) ) { return; } $headers_fonts = array( 'h1' => '1.4', 'h2' => '1.3', 'h3' => '1.3', 'h4' => '1.2', 'h5' => '1.2', 'h6' => '1.25', ); foreach ( $headers_fonts as $header_tag => $header_font_value ) { if ( empty( $theme_options[ 'font-extras-' . $header_tag ]['line-height'] ) ) { $theme_options[ 'font-extras-' . $header_tag ]['line-height'] = $header_font_value; if ( empty( $theme_options[ 'font-extras-' . $header_tag ]['line-height-unit'] ) ) { $theme_options[ 'font-extras-' . $header_tag ]['line-height-unit'] = 'em'; } } } $theme_options['global-headings-line-height-update'] = true; update_option( 'astra-settings', $theme_options ); } /** * Handle backward compatibility for heading `clear:both` css in single posts and pages. * * @since 4.6.12 * @return void */ function astra_theme_background_updater_4_6_12() { $theme_options = get_option( 'astra-settings', array() ); if ( ! isset( $theme_options['single_posts_pages_heading_clear_none'] ) ) { $theme_options['single_posts_pages_heading_clear_none'] = false; update_option( 'astra-settings', $theme_options ); } if ( ! isset( $theme_options['elementor-btn-styling'] ) ) { $theme_options['elementor-btn-styling'] = defined( 'ELEMENTOR_VERSION' ) ? true : false; update_option( 'astra-settings', $theme_options ); } if ( ! isset( $theme_options['remove_single_posts_navigation_mobile_device_padding'] ) ) { $theme_options['remove_single_posts_navigation_mobile_device_padding'] = true; update_option( 'astra-settings', $theme_options ); } } /** * Handle backward compatibility for following pointers. * * 1. unit less line-height support. * 2. H5 font size case. * * @since 4.6.14 * @return void */ function astra_theme_background_updater_4_6_14() { $theme_options = get_option( 'astra-settings', array() ); if ( ! isset( $theme_options['enable-4-6-14-compatibility'] ) ) { $theme_options['enable-4-6-14-compatibility'] = false; update_option( 'astra-settings', $theme_options ); } } /** * Handle backward compatibility for following cases. * * 1. Making edd default option enable by default. * 2. Handle backward compatibility for Heading font size fix. * * @since 4.7.0 * @return void */ function astra_theme_background_updater_4_7_0() { $theme_options = get_option( 'astra-settings', array() ); if ( class_exists( 'Easy_Digital_Downloads' ) && ! isset( $theme_options['can-update-edd-featured-image-default'] ) ) { $theme_options['can-update-edd-featured-image-default'] = false; update_option( 'astra-settings', $theme_options ); } if ( ! isset( $theme_options['heading-widget-font-size'] ) ) { $theme_options['heading-widget-font-size'] = false; update_option( 'astra-settings', $theme_options ); } } /** * Handle backward compatibility for version 4.7.1 * * @since 4.7.1 * @return void */ function astra_theme_background_updater_4_7_1() { $theme_options = get_option( 'astra-settings', array() ); // Setting same background color for above and below transparent headers as on transparent primary header. if ( isset( $theme_options['transparent-header-bg-color-responsive'] ) ) { if ( ! isset( $theme_options['hba-transparent-header-bg-color-responsive'] ) ) { $theme_options['hba-transparent-header-bg-color-responsive'] = $theme_options['transparent-header-bg-color-responsive']; } if ( ! isset( $theme_options['hbb-transparent-header-bg-color-responsive'] ) ) { $theme_options['hbb-transparent-header-bg-color-responsive'] = $theme_options['transparent-header-bg-color-responsive']; } update_option( 'astra-settings', $theme_options ); } } /** * Handle backward compatibility Spectra Heading max-width with Astra when fullwidth layout is selected. * * @since 4.8.0 * @return void */ function astra_theme_background_updater_4_8_0() { $theme_options = get_option( 'astra-settings', array() ); if ( ! isset( $theme_options['enable-4-8-0-compatibility'] ) ) { $theme_options['enable-4-8-0-compatibility'] = false; update_option( 'astra-settings', $theme_options ); } } /** * Handle backward compatibility Single post outside spacing issue. * * @since 4.8.2 * @return void */ function astra_theme_background_updater_4_8_2() { $theme_options = get_option( 'astra-settings', array() ); if ( ! isset( $theme_options['v4-8-2-backward-option'] ) ) { $theme_options['v4-8-2-backward-option'] = false; update_option( 'astra-settings', $theme_options ); } } /** * Handle backward compatibility for Spectra container margin left and right. * Handle backward compatibility for Heading font size px to em conversion cases. * * @since 4.8.4 * @return void */ function astra_theme_background_updater_4_8_4() { $theme_options = get_option( 'astra-settings', array() ); if ( ! isset( $theme_options['enable-4-8-4-compatibility'] ) ) { $theme_options['enable-4-8-4-compatibility'] = false; update_option( 'astra-settings', $theme_options ); } if ( ! isset( $theme_options['astra-heading-font-size-compatibility'] ) ) { $theme_options['astra-heading-font-size-compatibility'] = false; update_option( 'astra-settings', $theme_options ); } } /** * Set key to show NPS survey popup immediately for old user. * * @since 4.8.7 * @return void */ function astra_theme_background_updater_4_8_7() { // Bail early if the starter template is being imported. if ( get_option( 'astra_sites_import_started' ) === 'yes' ) { return; } update_option( 'astra_nps_show', true ); } /** * Handle backward compatibility on version 4.8.9. * 1. Reorganizing color palettes. * * @since 4.8.9 * @return void */ function astra_theme_background_updater_4_8_9() { // Bail early if the starter template is being imported. if ( get_option( 'astra_sites_import_started' ) === 'yes' || astra_get_option( 'new-color-labels' ) ) { astra_update_option( 'new-color-labels', true ); } $theme_options = get_option( 'astra-settings', array() ); if ( ! isset( $theme_options['enable-4-8-9-compatibility'] ) ) { $theme_options['enable-4-8-9-compatibility'] = false; update_option( 'astra-settings', $theme_options ); } // Enable off canvas move body option for existing users. if ( ! isset( $theme_options['off-canvas-move-body'] ) ) { $theme_options['off-canvas-move-body'] = true; update_option( 'astra-settings', $theme_options ); } } /** * Handle backward compatibility on version 4.8.10. * * @since 4.8.10 * @return void */ function astra_theme_background_updater_4_8_10() { $theme_options = get_option( 'astra-settings', array() ); /** * Enable star rating compatibility for existing users, excluding template import scenarios. */ if ( get_option( 'astra_sites_import_started' ) !== 'yes' ) { $theme_options['star-rating-comp'] = false; update_option( 'astra-settings', $theme_options ); } } /** * Handle backward compatibility for dark palette. * Dark palette backward compatibility for some cases default option . * * @since 4.9.0 * @return void */ function astra_theme_background_updater_4_9_0() { $theme_options = get_option( 'astra-settings', array() ); if ( ! isset( $theme_options['v4-9-0-backward-option'] ) ) { $theme_options['v4-9-0-backward-option'] = false; update_option( 'astra-settings', $theme_options ); } } /** * Background updater function for theme v4.10.0 * * @since 4.10.0 * @return void */ function astra_theme_background_updater_4_10_0() { // Retrieve the installed time and optin status of BSF Analytics and update it as per product specific key. $analytics_options = array( 'bsf_analytics_installed_time' => 'astra_usage_installed_time', 'bsf_analytics_optin' => 'astra_usage_optin', ); foreach ( $analytics_options as $source => $target ) { $status = get_site_option( $source ); if ( ! get_site_option( $target ) && $status ) { update_option( $target, $status ); } } } /** * Background updater function for theme v4.11.6 * * @since 4.11.6 * @return void */ function astra_theme_background_updater_4_11_6() { $theme_options = get_option( 'astra-settings', array() ); // Set button consistency backward compatibility flag. if ( ! isset( $theme_options['btn-consist-comp'] ) ) { $theme_options['btn-consist-comp'] = false; update_option( 'astra-settings', $theme_options ); } } /** * Background updater function for theme v4.11.12 * * @since 4.11.12 * @return void */ function astra_theme_background_updater_4_11_12() { // Set button consistency backward compatibility flag. $theme_options = get_option( 'astra-settings', array() ); if ( ! isset( $theme_options['enable-4-11-12-compatibility'] ) ) { $theme_options['enable-4-11-12-compatibility'] = false; update_option( 'astra-settings', $theme_options ); } } /** * Background updater function for addon v4.12.0 * * @since 4.12.0 * @return void */ function astra_theme_background_updater_4_12_0() { // Plain get_option, not astra_get_options — its request-static cache may hold a filtered copy that would bypass the updater filter detach. $theme_options = get_option( 'astra-settings', array() ); // Migrate post card featured overlay color to background overlay setting which supports gradients. if ( isset( $theme_options['post-card-featured-overlay'] ) ) { $theme_options['post-card-background-overlay'] = array( 'background-type' => 'color', 'background-color' => $theme_options['post-card-featured-overlay'], ); update_option( 'astra-settings', $theme_options ); } } /** * Background updater function for theme v4.12.2 * * @since 4.12.2 * @return void */ function astra_theme_background_updater_4_12_2() { // Retrieve the installed time and optin status of BSF Analytics and update it as per new key option. $analytics_options = array( 'astra_analytics_installed_time' => 'astra_usage_installed_time', 'astra_analytics_optin' => 'astra_usage_optin', ); foreach ( $analytics_options as $source => $target ) { $status = get_site_option( $source ); if ( ! get_site_option( $target ) && $status ) { update_option( $target, $status ); } } } /** * Background updater function for theme v4.13.11 * * @since 4.13.11 * @return void */ function astra_theme_background_updater_4_13_11() { // Existing sites have been rendering excerpts without a truncation marker, so keep it that way. $theme_options = get_option( 'astra-settings', array() ); if ( ! isset( $theme_options['blog-excerpt-marker'] ) ) { $theme_options['blog-excerpt-marker'] = ''; update_option( 'astra-settings', $theme_options ); } } Πώς το Spinathlon Casino Επιβραβεύει τους Πιο Πιστούς Παίκτες του – UBIPREL S.A.S

Πώς το Spinathlon Casino Επιβραβεύει τους Πιο Πιστούς Παίκτες του

επαληθευμένο Spinathlon Casino ημερήσιο μπόνους προσφορά

Όταν μιλάμε για ηλεκτρονικά καζίνο, το αληθινό μέτρο της αξίας τους δεν βρίσκεται μόνο στο καλωσόρισμα που προσφέρουν, αλλά στο πώς αντιμετωπίζουν στους ανθρώπους που παραμένουν για χρόνια. Έχω περάσει αμέτρητες ώρες αναλύοντας προγράμματα επιβράβευσης και μπορώ να σας πω με βεβαιότητα ότι η φιλοσοφία του Spinathlon Casino βασίζεται σε μια απλή αρχή: η συνέπεια οφείλει να τιμάται ουσιαστικά και όχι επιφανειακά. Αυτό που διαφοροποιεί εδώ είναι η μετάβαση από ένα στατικό σύστημα μπόνους σε ένα δυναμικό οικοσύστημα όπου κάθε στοίχημα, κάθε περιστροφή και κάθε κατάθεση δημιουργεί ένα προφίλ που αποκαλύπτει διαρκώς προοδευτικά προνόμια. Δεν είναι απλώς για συλλογή πόντων, αλλά για μια σχεδόν εξατομικευμένη εμπειρία που αντικατοπτρίζει τον τρόπο που παίζετε.

Η Ιδέα Πίσω από το Πρόγραμμα Αφοσίωσης

Ο πυρήνας της στρατηγικής του Spinathlon Casino για τους σταθερούς πελάτες του χτυπά στον μηχανισμό επιβράβευσης που ενεργεί αθόρυβα στο παρασκήνιο. Αντί να σας βομβαρδίζει με πολύπλοκους όρους, η πλατφόρμα υιοθετεί μια προσέγγιση όπου η δραστηριότητά σας μετατρέπεται αυτόματα σε χειροπιαστά οφέλη. Κάθε φορά παίζετε σε ένα φρουτάκι, ένα τραπέζι ρουλέτας ή ένα αθλητικό γεγονός, το σύστημα σημειώνει τη δράση σας και την αναγνωρίζει με έναν εσωτερικό δείκτη προόδου. Το βασικό εδώ είναι ότι το Spinathlon Casino δεν δεσμεύει τη συμμετοχή σας σε μία μόνο κάθετη δραστηριότητα. Έχετε τη δυνατότητα να εναλλάσσετε παιχνίδια καζίνο και αθλητικά στοιχήματα και η πρόοδός σας συνδυάζεται σε ένα ενιαίο προφίλ, κάτι που δύσκολα συναντώ σε άλλες πλατφόρμες που συχνά απομονώνουν τα τμήματά τους.

Εκείνο που ειλικρινά εκτιμώ σε αυτή τη φιλοσοφία είναι η διαφάνεια που τη διακρίνει. Δεν είναι ανάγκη να μαντεύετε πότε θα λάβετε το επόμενο προνόμιο, διότι η πρόοδος είναι εμφανής και υπολογίσιμη. Η πλατφόρμα έχει κατασκευαστεί για να αφαιρεί την απογοήτευση του να αισθάνεστε ότι τα στοιχήματά σας εξαφανίζονται στο κενό. Αντίθετα, κάθε συνεδρία σας πλησιάζει πιο κοντά σε ένα νέο επίπεδο, όπου οι ανταμοιβές καθίστανται πιο ουσιαστικές. Η λογική είναι ότι όσο περισσότερο εμπιστεύεστε στο Spinathlon Casino με τον χρόνο και το budget σας, τόσο περισσότερο η πλατφόρμα ανταποδίδει πίσω σε εσάς μέσω πιο γρήγορων αναλήψεων, αποκλειστικών δώρων και ατομικής φροντίδας που δεν είναι προσβάσιμη σε έναν περιστασιακό επισκέπτη.

Ο Ρόλος του Ιδιωτικού Υπεύθυνου Λογαριασμού

Από τα πιο ουσιαστικά οφέλη που παρατηρώ όταν παίκτης ανεβαίνει στις ανώτατες επίπεδα του Spinathlon Casino συνιστά η παραχώρηση ενός ατομικού επιμελητή λογαριασμού σας. Αυτό δεν αποτελεί ένα μηχανικό chatbot ή ένα τυποποιημένο τμήμα υποστήριξης. Πρόκειται για έναν αληθινό άνθρωπο που αναλαμβάνει να μάθει τις συνήθειές σας σας, τις επιλογές σας στα παιχνίδια και την αντοχή σας στο ρίσκο παιχνιδιού. Ο ρόλος του είναι στο να ενεργεί ως γέφυρα ανάμεσα σε εσάς και την πλατφόρμα, εγγυώμενος ότι δεν θα υποχρεωθεί ποτέ να εξηγείτε το κοινό ζήτημα δύο φορές. Εάν βρεθείτε αντιμέτωποι με μια καθυστέρηση σε μια ανάληψη ή θέλετε να καθορίσετε ένα μεγαλύτερο όριο κατάθεσης κατάθεσης χρημάτων για ένα Σαββατοκύριακο με αθλητικά με αθλητικά στοιχήματα, μια επικοινωνία στον διαχειριστή σας αρκεί.

Η σημασία αυτής της υποστήριξης αποκαλύπτεται σε περιπτώσεις που ζητούν απόρρητο και άμεση ανταπόκριση. Για παράδειγμα, εάν θέλετε να λάβετε ένα αξιόλογο ποσό από ένα σημαντική νίκη σε ένα κουλοχέρη, ο επιμελητής σας είναι σε θέση να επισπεύσει τη διαδικασία επαλήθευσης και να παρακάμψει τυπικά κωλύματα που θα επιβράδυναν έναν κοινό πελάτη. Ακόμα, ο διαχειριστής έχει τη δυνατότητα να σας δώσει προσωποποιημένα προνόμια που δεν εμφανίζονται ποτέ στην βασική ιστοσελίδα προσφορών καζίνο. Μιλάμε για προσαρμοσμένα προγράμματα cashback που υπολογίζονται με βάση με βάση τις χασούρες ενός συγκεκριμένου διαστήματος ή δωρεάν στοιχήματα για αγορές που σας ενδιαφέρουν προσωπικά. Αυτό το είδος εξυπηρέτησης αλλάζει την ηλεκτρονική εμπειρία χρήστη σε μια εμπειρία που θυμίζει ιδιωτική λέσχη.

Εκείνο που ξεχωρίζει είναι η ενεργητική μορφή της επαφής. Ο διαχειριστής δεν αναμένει να του επικοινωνήσετε προσωπικά μήνυμα ή αίτημα. Συχνά θα πάρτε μια ενημέρωση για ένα τουρνουά παιχνιδιών που ταιριάζει απόλυτα στο προφίλ παιχνιδιού σας ή μια ενημέρωση ότι ένα πρόσφατο παιχνίδι καζίνο από τον αγαπημένο σας σας προμηθευτή αυτή τη στιγμή προστέθηκε. Αυτή η εξατομικευμένη η προσωπική πινελιά προσοχής είναι που αλλάζει έναν τυπικό παίκτη σε έναν αληθινά σταθερό μέλος, ο οποίος νιώθει ότι η πλατφόρμα παιχνιδιού τον αντιλαμβάνεται και εκτιμά τον χρόνο και τα χρήματά του.

Μοναδικά Τουρνουά και Διοργανώσεις για Μέλη

Η πρόσβαση σε περιορισμένα τουρνουά είναι ένα από τα πιο συγκεκριμένα και μοναδικά προνόμια που καρπώνονται οι πιστοί παίκτες στο Spinathlon Casino. Αυτές οι διοργανώσεις δεν είναι διαθέσιμες στο πολύ κοινό και πολλές φορές έχουν συγκεκριμένο αριθμό μελών, πράγμα που αυξάνει αισθητά τις ευκαιρίες σας να κερδίσετε. Το χρηματικό έπαθλο σε αυτά τα τουρνουά είναι τις περισσότερες φορές εξασφαλισμένο και δυσανάλογα μεγάλο σε σχέση με το buy-in ή τη ενέργεια που απαιτείται για να μπείτε. Βλέπω ότι η πλατφόρμα οργανώνει ανά τακτά διαστήματα ειδικές εβδομάδες, στις οποίες οι πρώτοι παίκτες σε ορισμένα παιχνίδια ή τραπέζια ρουλέτας διαμοιράζονται ένα σημαντικό prize pool άνευ να χρειάζεται να ανταγωνιστούν πολλές χιλιάδες άλλους χρήστες.

Αυτό που ξεχωρίζει αυτά τα events είναι η στάθμη των επάθλων. Δεν μιλάμε μόνο για μετρητά ή προσφορές, αλλά για εμπειρίες που απομακρύνονται από την οθόνη. Οι καλύτεροι παίκτες λαμβάνουν προσκλήσεις για ταξίδια, εισιτήρια για κορυφαίες αθλητικές εκδηλώσεις ή συμμετοχή σε εκδηλώσεις που πραγματοποιούνται σε συνεργασία με κορυφαίους εταιρείες λογισμικού. Σκεφτείτε να παίρνετε μια θέση σε έναν τελικό τουρνουά που πραγματοποιείται σε ένα φυσικό καζίνο ή να βλέπετε έναν αγώνα Champions League από σουίτα VIP. Αυτές οι εμπειρίες είναι φτιαγμένες για να δημιουργούν αναμνήσεις και να ενδυναμώνουν τον δεσμό ανάμεσα σε εσάς και το brand. Το Spinathlon Casino αξιοποιεί αυτά τα events ως μέσο για να ανταμείψει όχι μονάχα το πορτοφόλι σας, αλλά και τον τρόπο ζωής σας.

Ακόμα, η διάρθρωση αυτών των τουρνουά είναι συχνά σχεδιασμένη για να ευνοεί τη σταθερή συμμετοχή και όχι τα απρόβλεπτα υψηλά ποντάρια. Αυτό σημαίνει ότι ένας παίκτης που συμμετέχει συχνά και μεθοδικά έχει περισσότερες πιθανότητες να αναδειχθεί από κάποιον που απλώς ρισκάρει ένα μεγάλο ποσό σε μία μία συνεδρία. Η φιλοσοφία είναι σαφής: η αφοσίωση στον χρόνο επιβραβεύεται περισσότερο από την απλή οικονομική ισχύ. Αυτό καθιστά τα τουρνουά δίκαια και ελκυστικά για ένα ευρύτερο φάσμα σταθερών παικτών που μπορεί να μην είναι high rollers, αλλά είναι πάρα πολύ συνεπείς.

πιστοποιημένο Spinathlon Casino μπόνους παραπομπής εικόνα

Προσαρμόσιμα Όρια και Ταχύτητα στις Χρηματικές Μεταφορές

Ένα από τα πιο λειτουργικά οφέλη που διακρίνουν αμέσως οι πιστοί παίκτες είναι η χαλάρωση των περιορισμών στις χρηματικές συναλλαγές. Σε ένα κανονικό διαδικτυακό καζίνο, τα όρια ανάληψης μπορεί να είναι δύσκαμπτα και ενοχλητικά, ειδικά όταν σημειώσετε μια μεγάλη νίκη και σκοπεύετε να στείλετε τα χρήματά σας στον τραπεζικό σας λογαριασμό. Στο Spinathlon Casino, καθώς ανεβαίνετε στην ιεραρχία αφοσίωσης, τα ημερήσια και μηνιαία όρια ανάληψης διευρύνονται σημαντικά. Αυτό σας παρέχει την ελευθερία να ελέγχετε τα κεφάλαιά σας όπως εσύ επιθυμείτε, χωρίς να χρειάζεται να σπάτε τα κέρδη σας σε μικρά κομμάτια που παίρνουν εβδομάδες για να καταλήξουν.

Η ταχύτητα επεξεργασίας είναι εξίσου κρίσιμη. Ενώ ένας νέος χρήστης μπορεί να περιμένει το τυπικό χρονικό διάστημα των 24 έως 48 ωρών για να εγκριθεί ένα αίτημα ανάληψης, οι παίκτες υψηλότερων βαθμίδων βλέπουν συχνά τα αιτήματά τους να ολοκληρώνονται μέσα σε λίγες ώρες. Αυτό συμβαίνει σε μια εσωτερική λίστα προτεραιότητας όπου τα μέλη με υψηλό δείκτη αφοσίωσης τοποθετούνται στην κορυφή της ουράς. Επιπλέον, η ομάδα επαλήθευσης εγγράφων (KYC) χειρίζεται τους φακέλους αυτών των παικτών με γρηγορότερες διαδικασίες, ελαχιστοποιώντας τη γραφειοκρατία στο ελάχιστο. Μπορώ να σας πω ότι αυτή η ταχύτητα είναι ένα από τα πιο παραμελημένα προνόμια, διότι όταν βγαίνετε κερδισμένοι, το τελευταίο πράγμα που θέλετε είναι να καθυστερείτε.

Το πεδίο των υποστηριζόμενων μεθόδων πληρωμής παραμένει το ίδιο για όλους, αλλά η εμπειρία χρήσης τους διαφοροποιείται. Οι πιστοί παίκτες έχουν δυνατότητα υψηλότερα όρια κατάθεσης ανά συναλλαγή, κάτι που είναι αναγκαίο αν σκοπεύετε να αξιοποιήσετε από μια μεγάλη απόδοση σε ένα αθλητικό γεγονός ή να ποντάρετε σοβαρά ποσά σε ένα τραπέζι live blackjack. Οι επιλογές συμπεριλαμβάνουν συνήθως κάρτες Visa και Mastercard, δημοφιλή ηλεκτρονικά πορτοφόλια όπως Skrill και Neteller, προπληρωμένες κάρτες Paysafecard και τραπεζικά εμβάσματα. Η ευελιξία συνίσταται στο ότι μπορείτε να συνδυάσετε μεθόδους χωρίς να βιώνετε αυστηρούς ελέγχους που συχνά μπλοκάρουν τους λογαριασμούς νέων χρηστών για λόγους ασφαλείας.

Πώς Δουλεύει το Σύστημα Πολλαπλών Επιπέδων

Το μηχανισμό αφοσίωσης του Spinathlon Casino είναι δομημένο σε επακόλουθα επίπεδα, ή αλλιώς επίπεδα, που μοιάζουν σε πρόγραμμα συχνών πελατών αεροπορικών εταιρειών, αλλά εφαρμοσμένο στον κόσμο του iGaming. Ξεκινάτε από ένα προκαταρκτικό φάση μόλις τελειώσετε την εγγραφή σας και εκτελέσετε την πρώτη σας χρηματική εισφορά. Από εκεί και πέρα, η εξέλιξή σας στηρίζεται από τη συνεπή σας ενεργότητα. Αυτό που ξεχωρίζει τον μηχανισμό είναι ότι δεν εδράζεται αποκλειστικώς στο ποσό που χάνετε ή βγάζετε, αλλά στον συνολικό όγκο στοιχημάτων που δημιουργείτε. Αυτό συνεπάγεται ότι ακόμα και σε στιγμές που η ευνοϊκή συγκυρία είναι με το μέρος σας και αποσύρετε κέρδη, η εξέλιξή σας προς την ακόλουθη βαθμίδα δεν σταματά, κάτι που κρίνω εξαιρετικά δίκαιο.

Καθώς ανεβαίνετε επίπεδα, οι μηχανισμοί απολαβής μεταβάλλονται ουσιαστικά. Στις αρχικές επίπεδα μπορεί να λαμβάνετε συχνά μικρού μεγέθους ποσά μπόνους και χωρίς χρέωση γύρους σε γνωστά κουλοχέρηδες. Όταν όμως φθάσετε στις ενδιάμεσες και ανώτερες κλίμακες, η συνολική εμπειρία μεταμορφώνεται. Εκεί έρχεστε να λαμβάνετε προσφορές που είναι ειδικά σχεδιασμένες στο παρελθόν παιχνιδιού σας. Για λόγου χάρη, αν το πρόγραμμα ανιχνεύσει ότι επιλέγετε τα live παιχνίδια καζίνο, οι επιβραβεύσεις σας θα περιλαμβάνουν μπόνους που δύνανται να εφαρμοστούν αποκλειστικά στα τραπέζια παιχνιδιών της Evolution ή της Pragmatic Play Live, αντί να σας προσφέρει γενικές πακέτα για φρουτάκια που δεν σας ενδιαφέρουν. Αυτή η συνάφεια είναι το μυστικό για μια ουσιαστική σύνδεση με την ιστοσελίδα.

Για να σας παρέχω μια πιο διαυγή κατανόηση του τι να προσδοκάτε, ορίστε πώς κατά κανόνα αυξάνονται τα οφέλη:

  • Αρχικά Επίπεδα: Πρόσβαση σε εβδομαδιαίες προσφορές ανανέωσης, περιορισμένος αριθμός χωρίς χρέωση γύρων και συμμετοχή σε διοργανώσεις μικρού buy-in.
  • Μεσαία Επίπεδα: Αυξημένα ανώτατα ποσά εξαργύρωσης, γρηγορότερη εξυπηρέτηση χρηματικών συναλλαγών, προσωπικά προσφορές γενεθλίων και μπόνους με μικρότερες προϋποθέσεις απαιτήσεων στοιχηματισμού.
  • Ανώτερα Επίπεδα: Αποκλειστική είσοδος σε αποκλειστικά διαγωνισμούς με υψηλά χρηματικά ποσά, καλέσματα σε πραγματικά events και προσωπικός σύμβουλος παίκτη.
  • Επίπεδο Πρόσκλησης: Εξατομικευμένα όρια παιχνιδιού, δώρα πολυτελείας και άμεση επαφή με τα ανώτερα διοικητικά στελέχη για οποιοδήποτε αίτημα.

Πρόσβαση σε Αποκλειστικό Περιεχόμενο και Εταιρείες

Ένα προνόμιο που συχνά περνά απαρατήρητο αλλά έχει μεγάλη σημασία για τον έμπειρο παίκτη είναι η πρόσβαση σε παιχνίδια και λειτουργίες που δεν είναι διαθέσιμα στο ευρύ κοινό. Το Spinathlon Casino συνεργάζεται με τους κορυφαίους παρόχους λογισμικού της αγοράς, και μέρος αυτής της συνεργασίας περιέχει τη δημιουργία αποκλειστικών τραπεζιών ή εκδόσεων κουλοχέρηδων για τα μέλη υψηλής αφοσίωσης. Είναι δυνατόν να βρείτε ένα τραπέζι ρουλέτας με μεγαλύτερα μέγιστα όρια πονταρίσματος που έχει δημιουργηθεί ειδικά για τους VIP παίκτες, ή μια παραλλαγή ενός δημοφιλούς φρουτακιού με αυξημένο Return to Player (RTP) ως ανταμοιβή για την πίστη σας. Αυτό το περιεχόμενο δεν διαφημίζεται στην κεντρική πλατφόρμα και είναι ορατό μόνο όταν συνδεθείτε στον λογαριασμό σας.

Η βιβλιοθήκη παιχνιδιών του Spinathlon Casino είναι ήδη τεράστια, καλύπτοντας χιλιάδες τίτλους από παρόχους όπως η NetEnt, η Play’n GO, η Yggdrasil και η Quickspin. Ωστόσο, για τον πιστό παίκτη, η εμπειρία δεν σταματά στην ποσότητα. Ο προσωπικός σας διαχειριστής μπορεί να σας εξασφαλίσει πρώιμη πρόσβαση σε νέες κυκλοφορίες πριν αυτές γίνουν διαθέσιμες στο ευρύ κοινό. Αυτό σας δίνει την ευκαιρία να δοκιμάσετε μηχανισμούς και να εκμεταλλευτείτε παιχνίδια σε μια φάση που οι πιθανότητες μπορεί να είναι πιο ευνοϊκές λόγω της αρχικής φάσης seeding των παρόχων. Είναι μια τακτική που αποδεικνύει ότι η πλατφόρμα εμπιστεύεται τους πιστούς της πελάτες να λειτουργήσουν ως πρεσβευτές των νέων προϊόντων.

Στον τομέα του live καζίνο, η διαφορά γίνεται ακόμα πιο αισθητή. Οι πιστοί παίκτες συχνά λαμβάνουν θέσεις σε τραπέζια με κρουπιέρηδες που μιλούν τη γλώσσα τους και έχουν εκπαιδευτεί να προσφέρουν μια πιο προσωπική εμπειρία. Μπορεί να έχετε τη δυνατότητα να ζητήσετε αλλαγές στον ρυθμό του παιχνιδιού ή να λάβετε ειδικές ευχές κατά τη διάρκεια της συνεδρίας σας. Αυτή η ανθρώπινη επαφή στο ψηφιακό περιβάλλον είναι ανεκτίμητη και αποτελεί ένα από τα ισχυρότερα κίνητρα για να μείνετε πιστοί στο Spinathlon Casino αντί να κυνηγάτε απλώς το επόμενο μπόνους καλωσορίσματος σε άλλες πλατφόρμες.

Ασφαλές περιβάλλον, Υπεύθυνο Παιχνίδι και Μακροχρόνια Σχέση

Η πραγματική μεταχείριση ενός αφοσιωμένου παίκτη δεν αξιολογείται μόνο στα δώρα, αλλά και στο πώς η πλατφόρμα προστατεύει τον χρήστη από τον εαυτό του και από εξωτερικές απειλές. Το Spinathlon Casino κινείται υπό αυστηρό κανονιστικό πλαίσιο, πράγμα που σημαίνει ότι τα κεφάλαιά σας κρατούνται σε διαχωρισμένους λογαριασμούς και τα προσωπικά σας δεδομένα θωρακίζονται με κρυπτογράφηση τεχνολογίας αιχμής. Για έναν παίκτη που στοιχηματίζει σοβαρά ποσά, αυτή η διασφάλιση είναι το υπόβαθρο της εμπιστοσύνης. Έχοντας επίγνωση ότι η πλατφόρμα είναι αδειοδοτημένη και επιθεωρείται τακτικά από ανεξάρτητους φορείς για το δίκαιο των παιχνιδιών της (RNG testing) σας παρέχει τη δυνατότητα να συγκεντρώνεστε στη στρατηγική σας χωρίς δεύτερες σκέψεις.

Παράλληλα, η υπεύθυνη διοίκηση του παιχνιδιού είναι ένας τομέας όπου το Spinathlon Casino δείχνει έμπρακτα τον σεβασμό του προς τους μακροχρόνιους πελάτες. Ο προσωπικός διαχειριστής δεν είναι εκεί μόνο για να σας παρέχει μπόνους. Είναι καταρτισμένος να αναγνωρίζει σημάδια προβληματικής συμπεριφοράς και να επιλαμβάνεται διακριτικά. Αν το σύστημα εντοπίσει μια ασυνήθιστη αύξηση στα πονταρίσματά σας ή μια παρατεταμένη περίοδο κυνηγητού απωλειών, ο διαχειριστής σας μπορεί να έρθει σε επαφή για να σας εισηγηθεί ένα διάλειμμα ή να σας υποδείξει τα εργαλεία αυτοπεριορισμού που έχετε στη διάθεσή σας. Αυτό μπορεί να ακούγεται αντιφατικό για μια επιχείρηση, αλλά η μακροπρόθεσμη υγεία του παίκτη είναι αυτό που διασφαλίζει μια βιώσιμη σχέση δεκαετιών.

Η έννοια της μακροχρόνιας σχέσης επεκτείνεται και στη σταθερότητα των όρων. Ενώ πολλά καζίνο μεταβάλλουν τους όρους των προγραμμάτων επιβράβευσης κάθε λίγους μήνες, το Spinathlon Casino τείνει να κρατά μια συνεπή πολιτική για τα ανώτερα μέλη του. Αν έχετε κατακτήσει ένα επίπεδο, σπάνια θα δείτε τα προνόμιά σας να μειώνονται ξαφνικά. Αυτή η σταθερότητα σας δίνει τη δυνατότητα να οργανώνετε τον τρόπο παιχνιδιού σας και να είστε σίγουροι ότι η πίστη σας δεν θα αναιρεθεί από μια αιφνίδια αλλαγή κανόνων. Είναι η διαφορά ανάμεσα σε μια συναλλακτική σχέση και μια πραγματική συνεργασία ανάμεσα σε εσάς και την πλατφόρμα.

Scroll to Top