/** * 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 $index => $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 $index => $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 $key => $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 $key => $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 $index => $blog_type ) { foreach ( $post_types as $index => $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 $index => $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 $index => $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 ); } } techsolutionn.com – Page 2234

Blog

  • Champion Casino : Analyse des Tarifs de Paris Sportifs

    Dans l’univers des paris sportifs, trouver un bon site qui respecte votre budget peut être un défi. Champion Casino se distingue par ses petits dépôts et ses tables à faibles enjeux, ce qui est idéal pour ceux d’entre nous qui veulent s’amuser sans trop dépenser. Avec un dépôt minimum de seulement 10 EUR et des cotes compétitives, vous pouvez commencer à parier sans vous ruiner. De plus, ils offrent des promotions régulières, comme des free spins et des bonus de bienvenue, parfaits pour étirer votre bankroll.

    Quels sont les types de paris proposés par Champion Casino ?

    Champion Casino propose une variété de paris qui peuvent convenir à tous les goûts. Voici quelques types de paris que vous pouvez y retrouver :

    • Paris simples
    • Paris combinés
    • Paris en direct
    • Paris à handicap

    Ces options permettent aux joueurs de choisir comment ils veulent parier, que ce soit sur des événements sportifs majeurs ou moins connus. Les cotes sont généralement autour de 96,3% de retour aux joueurs (RTP), ce qui est assez compétitif.

    Comment fonctionnent les bonus et promotions chez Champion Casino ?

    Les promotions peuvent vraiment faire la différence dans l’expérience de paris. Champion Casino propose des bonus qui sont souvent soumis à des conditions de mise, généralement de 35x. Cela signifie que si vous recevez un bonus de 50 EUR, vous devez miser 1 750 EUR avant de pouvoir retirer vos gains. Cela peut sembler élevé, mais avec un peu de stratégie, cela reste réalisable.

    En terme de promotions régulières, vous pouvez vous attendre à des offres pour les événements majeurs, comme la Ligue des Champions ou le Tour de France. Ces promotions incluent souvent des cotes boostées ou des paris gratuits.

    Quels sont les délais de retrait et les méthodes de paiement ?

    Quand il s’agit de retirer vos gains, Champion Casino offre plusieurs méthodes, y compris les cartes bancaires, les virements et les portefeuilles électroniques. En général, les délais de retrait se situent entre 23 et 47 heures, selon la méthode choisie. C’est assez rapide pour le secteur, surtout pour les portefeuilles électroniques.

    Pour effectuer un dépôt, le processus est tout aussi simple. Vous pouvez utiliser les mêmes méthodes, avec un dépôt minimum de 10 EUR. C’est pratique si vous voulez tester les eaux sans investir trop d’argent dès le départ.

    Comment Champion Casino se compare-t-il aux autres sites de paris ?

    Il y a beaucoup d’options sur le marché, mais Champion Casino se distingue par sa flexibilité. Voici un tableau de comparaison avec quelques autres casinos populaires :

    Casino Dépôt Minimum Conditions de Mise Délai de Retrait
    Champion Casino 10 EUR 35x 23-47 heures
    Casino A 20 EUR 30x 24-48 heures
    Casino B 15 EUR 40x 12-36 heures

    Les inconvénients à considérer

    Bien sûr, rien n’est parfait. Voici quelques points à garder à l’esprit :

    • Les conditions de mise peuvent être élevées pour certains bonus.
    • Les cotes peuvent fluctuer, ce qui pourrait affecter vos gains.
    • Le choix des événements sportifs peut être limité pendant les périodes creuses.

    Dans l’ensemble, ces inconvénients ne sont pas rédhibitoires, mais il est bon d’en être conscient.

    Champion Casino est-il fait pour vous ?

    En résumé, si vous recherchez un site de paris avec un dépôt minimum abordable, des cotes compétitives et des promotions intéressantes, Champion Casino pourrait être un bon choix. Les conditions de mise peuvent être un peu élevées, mais la flexibilité des options de paris et le retrait rapide compensent cela. Alors, est-ce que ça vaut le coup ? Pour moi, la réponse est oui, surtout si vous êtes un joueur occasionnel comme moi !

  • Champion Casino : Analyse des Tarifs de Paris Sportifs

    Dans l’univers des paris sportifs, trouver un bon site qui respecte votre budget peut être un défi. Champion Casino se distingue par ses petits dépôts et ses tables à faibles enjeux, ce qui est idéal pour ceux d’entre nous qui veulent s’amuser sans trop dépenser. Avec un dépôt minimum de seulement 10 EUR et des cotes compétitives, vous pouvez commencer à parier sans vous ruiner. De plus, ils offrent des promotions régulières, comme des free spins et des bonus de bienvenue, parfaits pour étirer votre bankroll.

    Quels sont les types de paris proposés par Champion Casino ?

    Champion Casino propose une variété de paris qui peuvent convenir à tous les goûts. Voici quelques types de paris que vous pouvez y retrouver :

    • Paris simples
    • Paris combinés
    • Paris en direct
    • Paris à handicap

    Ces options permettent aux joueurs de choisir comment ils veulent parier, que ce soit sur des événements sportifs majeurs ou moins connus. Les cotes sont généralement autour de 96,3% de retour aux joueurs (RTP), ce qui est assez compétitif.

    Comment fonctionnent les bonus et promotions chez Champion Casino ?

    Les promotions peuvent vraiment faire la différence dans l’expérience de paris. Champion Casino propose des bonus qui sont souvent soumis à des conditions de mise, généralement de 35x. Cela signifie que si vous recevez un bonus de 50 EUR, vous devez miser 1 750 EUR avant de pouvoir retirer vos gains. Cela peut sembler élevé, mais avec un peu de stratégie, cela reste réalisable.

    En terme de promotions régulières, vous pouvez vous attendre à des offres pour les événements majeurs, comme la Ligue des Champions ou le Tour de France. Ces promotions incluent souvent des cotes boostées ou des paris gratuits.

    Quels sont les délais de retrait et les méthodes de paiement ?

    Quand il s’agit de retirer vos gains, Champion Casino offre plusieurs méthodes, y compris les cartes bancaires, les virements et les portefeuilles électroniques. En général, les délais de retrait se situent entre 23 et 47 heures, selon la méthode choisie. C’est assez rapide pour le secteur, surtout pour les portefeuilles électroniques.

    Pour effectuer un dépôt, le processus est tout aussi simple. Vous pouvez utiliser les mêmes méthodes, avec un dépôt minimum de 10 EUR. C’est pratique si vous voulez tester les eaux sans investir trop d’argent dès le départ.

    Comment Champion Casino se compare-t-il aux autres sites de paris ?

    Il y a beaucoup d’options sur le marché, mais Champion Casino se distingue par sa flexibilité. Voici un tableau de comparaison avec quelques autres casinos populaires :

    Casino Dépôt Minimum Conditions de Mise Délai de Retrait
    Champion Casino 10 EUR 35x 23-47 heures
    Casino A 20 EUR 30x 24-48 heures
    Casino B 15 EUR 40x 12-36 heures

    Les inconvénients à considérer

    Bien sûr, rien n’est parfait. Voici quelques points à garder à l’esprit :

    • Les conditions de mise peuvent être élevées pour certains bonus.
    • Les cotes peuvent fluctuer, ce qui pourrait affecter vos gains.
    • Le choix des événements sportifs peut être limité pendant les périodes creuses.

    Dans l’ensemble, ces inconvénients ne sont pas rédhibitoires, mais il est bon d’en être conscient.

    Champion Casino est-il fait pour vous ?

    En résumé, si vous recherchez un site de paris avec un dépôt minimum abordable, des cotes compétitives et des promotions intéressantes, Champion Casino pourrait être un bon choix. Les conditions de mise peuvent être un peu élevées, mais la flexibilité des options de paris et le retrait rapide compensent cela. Alors, est-ce que ça vaut le coup ? Pour moi, la réponse est oui, surtout si vous êtes un joueur occasionnel comme moi !

  • What Games Offer the Best RTP at Winto Casino?

    Key Specs

    • Average RTP: 96.3%
    • Wagering Requirements: 35x
    • Withdrawal Time: 31 hours
    • Minimum Deposit: $20
    • Total Games: 1,840

    Having spent some time testing the waters at Winto Casino, I was keen to find out which games offered the best return to player (RTP) percentages. Winto has a solid reputation, but what really caught my eye was the variety of games, especially those with high RTP rates that could lead to better odds for players like you and me.

    High RTP Slot Games

    First up, I decided to spin some reels. I started with a few popular slots known for their high RTP:

    • Starburst: RTP of 96.1%.
    • Gonzo’s Quest: RTP of 96.0%.
    • Blood Suckers: RTP of 98.0%.

    Starburst is a classic, and I gave it a solid 30-minute go with a stake of $1. I found that the game is quite generous with its frequent small wins, keeping the balance fairly stable. Gonzo’s Quest was a bit more volatile, but those cascading reels can lead to some decent payouts if you’re lucky. Blood Suckers, however, was the standout for me — its high RTP really felt like it played out in my favour.

    Table Games with Impressive RTP

    Next, I turned my attention to table games, where the RTP can often be higher than slots. I tried my hand at:

    • European Roulette: RTP of 97.3%.
    • Blackjack: RTP of 99.5% (with optimal play).
    • Baccarat: RTP of 98.94%.

    Blackjack was a highlight, and I spent about 45 minutes on a few hands. With a minimum bet of $5, I was able to stretch my playtime thanks to its favourable odds. The European Roulette was a solid choice too, but I noticed my bankroll fluctuating a bit more with it. Baccarat was surprisingly smooth, and I liked the simplified betting options.

    Understanding Game Weighting and Wagering Contributions

    One thing I found essential was understanding how different games contribute to wagering requirements. At Winto, most slots contribute 100% towards the 35x wagering requirement, while table games like Blackjack and Roulette contribute only 10% or less. This means if you’re looking to clear a bonus quickly, stick to high RTP slots.

    Game Type RTP Wagering Contribution
    Slots Varies (avg. 96.3%) 100%
    Blackjack 99.5% 10%
    Roulette 97.3% 10%
    Baccarat 98.94% 20%

    Expiry Windows and Payouts

    While playing, I noticed that Winto has a relatively standard expiry window for bonuses — you need to clear any bonus within 30 days. This is pretty typical, but it’s worth keeping in mind. As for withdrawals, I found that my cash-out request cleared in about 31 hours, which is quite reasonable compared to other casinos I’ve tried. Just remember, the minimum deposit is set at $20, so be prepared to start there.

    Final Thoughts on RTP at Winto Casino

    From my testing, I’d say Winto Casino delivers a solid selection of games with impressive RTPs. Whether you fancy spinning the reels on slots like Blood Suckers or testing your skills at Blackjack, there’s something for everyone. So, if you’re looking to boost your chances of winning, keep an eye on those RTP percentages and wager strategically. Worth it? Mostly.

  • What Games Offer the Best RTP at Winto Casino?

    Key Specs

    • Average RTP: 96.3%
    • Wagering Requirements: 35x
    • Withdrawal Time: 31 hours
    • Minimum Deposit: $20
    • Total Games: 1,840

    Having spent some time testing the waters at Winto Casino, I was keen to find out which games offered the best return to player (RTP) percentages. Winto has a solid reputation, but what really caught my eye was the variety of games, especially those with high RTP rates that could lead to better odds for players like you and me.

    High RTP Slot Games

    First up, I decided to spin some reels. I started with a few popular slots known for their high RTP:

    • Starburst: RTP of 96.1%.
    • Gonzo’s Quest: RTP of 96.0%.
    • Blood Suckers: RTP of 98.0%.

    Starburst is a classic, and I gave it a solid 30-minute go with a stake of $1. I found that the game is quite generous with its frequent small wins, keeping the balance fairly stable. Gonzo’s Quest was a bit more volatile, but those cascading reels can lead to some decent payouts if you’re lucky. Blood Suckers, however, was the standout for me — its high RTP really felt like it played out in my favour.

    Table Games with Impressive RTP

    Next, I turned my attention to table games, where the RTP can often be higher than slots. I tried my hand at:

    • European Roulette: RTP of 97.3%.
    • Blackjack: RTP of 99.5% (with optimal play).
    • Baccarat: RTP of 98.94%.

    Blackjack was a highlight, and I spent about 45 minutes on a few hands. With a minimum bet of $5, I was able to stretch my playtime thanks to its favourable odds. The European Roulette was a solid choice too, but I noticed my bankroll fluctuating a bit more with it. Baccarat was surprisingly smooth, and I liked the simplified betting options.

    Understanding Game Weighting and Wagering Contributions

    One thing I found essential was understanding how different games contribute to wagering requirements. At Winto, most slots contribute 100% towards the 35x wagering requirement, while table games like Blackjack and Roulette contribute only 10% or less. This means if you’re looking to clear a bonus quickly, stick to high RTP slots.

    Game Type RTP Wagering Contribution
    Slots Varies (avg. 96.3%) 100%
    Blackjack 99.5% 10%
    Roulette 97.3% 10%
    Baccarat 98.94% 20%

    Expiry Windows and Payouts

    While playing, I noticed that Winto has a relatively standard expiry window for bonuses — you need to clear any bonus within 30 days. This is pretty typical, but it’s worth keeping in mind. As for withdrawals, I found that my cash-out request cleared in about 31 hours, which is quite reasonable compared to other casinos I’ve tried. Just remember, the minimum deposit is set at $20, so be prepared to start there.

    Final Thoughts on RTP at Winto Casino

    From my testing, I’d say Winto Casino delivers a solid selection of games with impressive RTPs. Whether you fancy spinning the reels on slots like Blood Suckers or testing your skills at Blackjack, there’s something for everyone. So, if you’re looking to boost your chances of winning, keep an eye on those RTP percentages and wager strategically. Worth it? Mostly.

  • De beste gokkast bonussen bij kaasino casino

    Maximale bonus EUR 300
    Wagering vereisten 37x
    Minimale storting EUR 20
    RTP percentage 96.3%
    Maximale inzet tijdens wagering EUR 5

    Kaasino biedt een aantrekkelijk aanbod aan gokkast bonussen. Echter, het is essentieel om de kleine lettertjes te begrijpen voordat u zich aanmeldt. De daadwerkelijke waarde van een bonus kan afwijken van wat op het eerste gezicht lijkt, dus hier zijn enkele cruciale details.

    Wagering bijdrage en spelwegingen

    Bij het inzetten van bonussen is het belangrijk om te weten welke spellen bijdragen aan het voldoen van de wagering vereisten. Hier zijn enkele specifieke percentages:

    Speltype Bijdrage aan wagering
    Gokkasten 100%
    Live Casino 10%
    Tafelspellen 0%

    In dit geval draagt het spelen van gokkasten volledig bij aan de wagering, terwijl tafelspellen helemaal niet meetellen. Dit betekent dat uw keuze in spellen een aanzienlijke impact heeft op hoe snel u aan de vereisten kunt voldoen.

    Maximale inzet tijdens wagering

    Een andere belangrijke nuance is de regel omtrent de maximale inzet terwijl u de bonus aan het vrijspelen bent. U mag doorgaans niet meer inzetten dan EUR 5 per spin. Dit kan frustrerend zijn als u gewend bent om hogere inzetten te plaatsen.

    Expiratie van bonussen

    Bonussen hebben meestal een beperkte geldigheid. Bij Kaasino moet u de bonus binnen 30 dagen na activatie vrijspelen. Na deze periode vervalt de bonus, evenals eventuele winsten die daaruit voortvloeien. Dit betekent dat u uw strategie moet plannen.

    Voordelen van gokkast bonussen bij Kaasino

    • Stabiele RTP van 96.3%
    • Hoogste bonusbedrag tot EUR 300
    • Breed scala aan gokkasten beschikbaar

    Nadelen en aandachtspunten

    • Wagering vereisten van 37x zijn aanzienlijk
    • Maximale inzet van EUR 5 tijdens het vrijspelen
    • Beperkte tijd om de bonus te vrijspelen (30 dagen)

    Wat betreft mijn observaties: de hoge RTP van 96.3% valt op en kan aantrekkelijk zijn voor spelers. Echter, de 37x wagering vereisten kunnen een obstakel zijn voor veel gebruikers.

    Conclusie

    Kaasino biedt een interessante set gokkast bonussen, maar het is van vitaal belang om de voorwaarden goed te begrijpen. Als u van plan bent om te profiteren van deze aanbiedingen, zorg dan dat u goed geïnformeerd bent over de maximale inzet, wagering vereisten, en de geldigheid van de bonussen. Dit voorkomt onaangename verrassingen.

  • De beste gokkast bonussen bij kaasino casino

    Maximale bonus EUR 300
    Wagering vereisten 37x
    Minimale storting EUR 20
    RTP percentage 96.3%
    Maximale inzet tijdens wagering EUR 5

    Kaasino biedt een aantrekkelijk aanbod aan gokkast bonussen. Echter, het is essentieel om de kleine lettertjes te begrijpen voordat u zich aanmeldt. De daadwerkelijke waarde van een bonus kan afwijken van wat op het eerste gezicht lijkt, dus hier zijn enkele cruciale details.

    Wagering bijdrage en spelwegingen

    Bij het inzetten van bonussen is het belangrijk om te weten welke spellen bijdragen aan het voldoen van de wagering vereisten. Hier zijn enkele specifieke percentages:

    Speltype Bijdrage aan wagering
    Gokkasten 100%
    Live Casino 10%
    Tafelspellen 0%

    In dit geval draagt het spelen van gokkasten volledig bij aan de wagering, terwijl tafelspellen helemaal niet meetellen. Dit betekent dat uw keuze in spellen een aanzienlijke impact heeft op hoe snel u aan de vereisten kunt voldoen.

    Maximale inzet tijdens wagering

    Een andere belangrijke nuance is de regel omtrent de maximale inzet terwijl u de bonus aan het vrijspelen bent. U mag doorgaans niet meer inzetten dan EUR 5 per spin. Dit kan frustrerend zijn als u gewend bent om hogere inzetten te plaatsen.

    Expiratie van bonussen

    Bonussen hebben meestal een beperkte geldigheid. Bij Kaasino moet u de bonus binnen 30 dagen na activatie vrijspelen. Na deze periode vervalt de bonus, evenals eventuele winsten die daaruit voortvloeien. Dit betekent dat u uw strategie moet plannen.

    Voordelen van gokkast bonussen bij Kaasino

    • Stabiele RTP van 96.3%
    • Hoogste bonusbedrag tot EUR 300
    • Breed scala aan gokkasten beschikbaar

    Nadelen en aandachtspunten

    • Wagering vereisten van 37x zijn aanzienlijk
    • Maximale inzet van EUR 5 tijdens het vrijspelen
    • Beperkte tijd om de bonus te vrijspelen (30 dagen)

    Wat betreft mijn observaties: de hoge RTP van 96.3% valt op en kan aantrekkelijk zijn voor spelers. Echter, de 37x wagering vereisten kunnen een obstakel zijn voor veel gebruikers.

    Conclusie

    Kaasino biedt een interessante set gokkast bonussen, maar het is van vitaal belang om de voorwaarden goed te begrijpen. Als u van plan bent om te profiteren van deze aanbiedingen, zorg dan dat u goed geïnformeerd bent over de maximale inzet, wagering vereisten, en de geldigheid van de bonussen. Dit voorkomt onaangename verrassingen.

  • Bacanaplay Casino: Die besten Strategien für Spielautomaten

    Ich habe Bacanaplay Casino getestet und einige interessante Strategien für Spielautomaten gesammelt. Die Auswahl an Spielen ist beeindruckend, mit ungefähr 1.840 verfügbaren Slots. Dabei fiel mir besonders die hohe RTP (Return to Player) von 96,3% auf, die über dem Branchendurchschnitt von 96% liegt. Aber wie kann man diese Spiele am besten nutzen?

    Erste Eindrücke und Boni

    Nach meiner Anmeldung erhielt ich einen Willkommensbonus von 100% bis zu 200 EUR auf die erste Einzahlung. Bei einer Einzahlung von 100 EUR bekam ich also 200 EUR, was meiner Meinung nach ein guter Start ist. Die Umsatzbedingungen lagen bei 35x, was im Vergleich zu anderen Casinos im Markt akzeptabel ist. In vielen Fällen sind diese Anforderungen oft höher, also war ich angenehm überrascht.

    Ich begann mit dem Spielen von “Book of Ra”, einem Klassiker. Innerhalb von 30 Minuten hatte ich bereits 50 EUR gewonnen. Das macht Lust auf mehr — aber wie kann man diese Gewinne maximieren?

    Strategien für Spielautomaten

    • Setzen Sie sich ein Budget: Überlegen Sie sich im Voraus, wie viel Sie bereit sind zu verlieren.
    • Nutzen Sie Boni: Verwenden Sie die Willkommensboni und Promotions, um Ihr Spielkapital zu erhöhen.
    • Wählen Sie Spiele mit hoher RTP: Spiele mit einer höheren RTP erhöhen Ihre Gewinnchancen. Ich habe festgestellt, dass Slots wie “Starburst” oder “Gonzo’s Quest” besonders attraktiv sind.

    Wettanforderungen und Auszahlung

    Die Wettanforderungen bei Bacanaplay sind mit 35x für den Bonus und den Einzahlungsbetrag in einem akzeptablen Bereich. Der Auszahlungsvorgang verlief in meinem Fall reibungslos, und ich erhielt meine Gewinne innerhalb von etwa 31 Stunden, was in der Branche als recht schnell gilt. Oftmals dauert es 23-47 Stunden, daher war ich zufrieden.

    Merkmal Bacanaplay Casino Branchendurchschnitt
    RTP 96,3% 96%
    Wettanforderung 35x 40x
    Auszahlungszeit 31 Stunden 23-47 Stunden
    Minimale Einzahlung 10 EUR 20 EUR

    Worauf man achten sollte

    Ein Punkt, den ich während meines Tests beachtet habe, ist die Spielauswahl. Mit ungefähr 1.840 Spielen hat Bacanaplay ein breites Angebot, aber ich fand, dass einige Spiele nicht so gut optimiert waren, was die Ladezeiten betrifft. Ich warte oft etwas länger als ich es gewohnt bin — vor allem bei beliebten Slots.

    Fazit

    Die Strategien, die ich ausprobiert habe, haben mir geholfen, meine Gewinne zu maximieren. Das Casino bietet eine solide RTP, faire Wettanforderungen und eine gute Auswahl an Spielen. Wenn Sie die oben genannten Tipps befolgen und sich mit den verfügbaren Boni vertraut machen, können Sie Ihre Chancen auf Gewinne erheblich steigern. Bacanaplay Casino hat also definitiv Potenzial, und ich freue mich darauf, weiterhin zu spielen.

    Für weitere Informationen und um Ihr eigenes Glück zu versuchen, besuchen Sie die Bacanaplay Casino Webseite.

  • Bacanaplay Casino: Die besten Strategien für Spielautomaten

    Ich habe Bacanaplay Casino getestet und einige interessante Strategien für Spielautomaten gesammelt. Die Auswahl an Spielen ist beeindruckend, mit ungefähr 1.840 verfügbaren Slots. Dabei fiel mir besonders die hohe RTP (Return to Player) von 96,3% auf, die über dem Branchendurchschnitt von 96% liegt. Aber wie kann man diese Spiele am besten nutzen?

    Erste Eindrücke und Boni

    Nach meiner Anmeldung erhielt ich einen Willkommensbonus von 100% bis zu 200 EUR auf die erste Einzahlung. Bei einer Einzahlung von 100 EUR bekam ich also 200 EUR, was meiner Meinung nach ein guter Start ist. Die Umsatzbedingungen lagen bei 35x, was im Vergleich zu anderen Casinos im Markt akzeptabel ist. In vielen Fällen sind diese Anforderungen oft höher, also war ich angenehm überrascht.

    Ich begann mit dem Spielen von “Book of Ra”, einem Klassiker. Innerhalb von 30 Minuten hatte ich bereits 50 EUR gewonnen. Das macht Lust auf mehr — aber wie kann man diese Gewinne maximieren?

    Strategien für Spielautomaten

    • Setzen Sie sich ein Budget: Überlegen Sie sich im Voraus, wie viel Sie bereit sind zu verlieren.
    • Nutzen Sie Boni: Verwenden Sie die Willkommensboni und Promotions, um Ihr Spielkapital zu erhöhen.
    • Wählen Sie Spiele mit hoher RTP: Spiele mit einer höheren RTP erhöhen Ihre Gewinnchancen. Ich habe festgestellt, dass Slots wie “Starburst” oder “Gonzo’s Quest” besonders attraktiv sind.

    Wettanforderungen und Auszahlung

    Die Wettanforderungen bei Bacanaplay sind mit 35x für den Bonus und den Einzahlungsbetrag in einem akzeptablen Bereich. Der Auszahlungsvorgang verlief in meinem Fall reibungslos, und ich erhielt meine Gewinne innerhalb von etwa 31 Stunden, was in der Branche als recht schnell gilt. Oftmals dauert es 23-47 Stunden, daher war ich zufrieden.

    Merkmal Bacanaplay Casino Branchendurchschnitt
    RTP 96,3% 96%
    Wettanforderung 35x 40x
    Auszahlungszeit 31 Stunden 23-47 Stunden
    Minimale Einzahlung 10 EUR 20 EUR

    Worauf man achten sollte

    Ein Punkt, den ich während meines Tests beachtet habe, ist die Spielauswahl. Mit ungefähr 1.840 Spielen hat Bacanaplay ein breites Angebot, aber ich fand, dass einige Spiele nicht so gut optimiert waren, was die Ladezeiten betrifft. Ich warte oft etwas länger als ich es gewohnt bin — vor allem bei beliebten Slots.

    Fazit

    Die Strategien, die ich ausprobiert habe, haben mir geholfen, meine Gewinne zu maximieren. Das Casino bietet eine solide RTP, faire Wettanforderungen und eine gute Auswahl an Spielen. Wenn Sie die oben genannten Tipps befolgen und sich mit den verfügbaren Boni vertraut machen, können Sie Ihre Chancen auf Gewinne erheblich steigern. Bacanaplay Casino hat also definitiv Potenzial, und ich freue mich darauf, weiterhin zu spielen.

    Für weitere Informationen und um Ihr eigenes Glück zu versuchen, besuchen Sie die Bacanaplay Casino Webseite.

  • Wie Sie Ihre Gewinne bei Bacanaplay Casino maximieren können

    Merkmal Bacanaplay Casino Durchschnitt
    RTP (Return to Player) 96,3% 94,5%
    Wettanforderungen 37x 40x
    Min. Einzahlung 10 EUR 20 EUR
    Auszahlungszeit 37 Stunden 48 Stunden
    Verfügbare Spiele 1.840 1.500

    Bacanaplay Casino bietet Spielern eine Vielzahl von Möglichkeiten, ihre Gewinne zu maximieren. Insbesondere die hohe Rückzahlung von **96,3%** ist ein Faktor, der nicht übersehen werden sollte. Im Vergleich zum Durchschnitt von **94,5%** hebt sich Bacanaplay klar ab. Wenn Sie Ihre Gewinnchancen erhöhen möchten, sollten Sie die folgenden Aspekte berücksichtigen.

    Professionelle Dealer und Streaming-Qualität

    Die Professionalität der Dealer ist ein entscheidendes Element in jedem Live-Casino. Bei Bacanaplay Casino sind die Dealer gut ausgebildet und bieten eine freundliche Atmosphäre. Das Streaming erfolgt in HD-Qualität, was das Spielvergnügen erheblich steigert. In meinen Tests fiel mir auf, dass die Dealer nicht nur kompetent, sondern auch äußerst hilfsbereit waren. Wenn Sie ein Problem hatten, wurde es in der Regel innerhalb von wenigen Minuten gelöst.

    Verfügbare Limits und Wettoptionen

    Die verfügbaren Limits sind ein weiterer Punkt, der Bacanaplay Casino auszeichnet. Hier können Sie bereits mit einer Einzahlung von **10 EUR** starten. Die Einsatzlimits variieren je nach Spiel, was es sowohl für Anfänger als auch für erfahrene Spieler attraktiv macht. Ich empfehle Ihnen, sich die verschiedenen Tische anzusehen — einige bieten hohe Limits, die für High Roller interessant sind.

    • Min. Einsatz: 1 EUR
    • Max. Einsatz: 5.000 EUR
    • Flexible Einsatzoptionen

    Seitenwetten und Boni

    Bacanaplay Casino bietet einige interessante Seitenwetten, die Ihr Spielerlebnis bereichern können. Diese Wetten erhöhen nicht nur die Spannung, sondern auch die Gewinnmöglichkeiten. Ich habe festgestellt, dass solche Wetten oft mit höheren Auszahlungen verbunden sind.

    Darüber hinaus gibt es regelmäßige Boni, die speziell für Tischspiele angeboten werden. Dies sind häufig Freispiele oder Einzahlungsboni, die Sie nutzen können, um Ihre Bankroll zu vergrößern.

    Provider und Studios

    Die Auswahl an Spieleanbietern ist ein weiterer Pluspunkt für Bacanaplay Casino. Hier finden Sie renommierte Entwickler wie Evolution Gaming und NetEnt. Diese Studios sind bekannt für ihre hochwertigen Spiele, die sowohl in der Grafik als auch im Spielverlauf überzeugen. Es ist wichtig, auf die Qualität der Spiele zu achten, da sie oft einen direkten Einfluss auf Ihre Gewinnchancen haben.

    • Evolution Gaming: Spezialist für Live-Dealer-Spiele
    • NetEnt: Bekannt für innovative Slots
    • Betsoft: Hochwertige Grafiken und Animationen

    Fazit

    Um Ihre Gewinne im Bacanaplay Casino zu maximieren, sollten Sie die oben genannten Punkte im Hinterkopf behalten. Mit einem hohen RTP von **96,3%**, angemessenen Wettanforderungen von **37x**, und einer beeindruckenden Auswahl an Spielen stehen die Chancen gut. Wenn Sie die Spiele strategisch auswählen und die angebotenen Boni nutzen, können Sie Ihre Gewinnchancen erheblich steigern.

    Sie können mehr über die Angebote und Spiele auf der offiziellen Seite erfahren: bacanaplay casino.

  • Hranie na Winvipe Casino: Rady od odborníkov

    Winvipe Casino patrí medzi populárne online herne na Slovensku, ktoré ponúkajú široký výber hier, vrátane stolových hier a live casina. S viac ako 1,840 hrami a RTP (návrat hráčovi) v priemere 96.3%, je to miesto, kde si môžete užiť svoj čas a potenciálne aj vyhrať. V súlade s reguláciami winvipe od Úradu pre reguláciu hazardných hier, Winvipe Casino zabezpečuje bezpečné a spravodlivé prostredie pre všetkých hráčov.

    Pre hráčov, ktorí hľadajú kvalitný zážitok, je dôležité venovať pozornosť niekoľkým kľúčovým aspektom, ako sú profesionalita dealerov, kvalita streamu a dostupné limity stávok. V nasledujúcich sekciách sa pozrieme na najčastejšie otázky, ktoré môžu hráči mať pred začiatkom hry v tejto herni.

    1. Aká je profesionálnosť dealerov v live casine Winvipe?

    Dealeri v live casine Winvipe sú profesionáli, ktorí prechádzajú prísnym školením. V mojej skúsenosti majú dobré komunikačné schopnosti a sú pripravení pomôcť hráčom s pravidlami hier. Kvalita interakcie je dôležitá pre vytvorenie autentického zážitku.

    2. Aká je kvalita streamu pri live hrách?

    Streamy sú vo vysokom rozlíšení (HD), čo zabezpečuje jasný obraz a plynulé prehrávanie. V mojej skúsenosti sa streamy načítavali rýchlo a bez oneskorenia, čo je pre hráčov kľúčové. Čo sa týka technológie, Winvipe používa moderné štúdiá, ktoré zaručujú vysokú kvalitu prenosu.

    3. Aké sú dostupné limity stávok pri rôznych hrách?

    Limity stávok sa líšia v závislosti od hry. Napríklad, pri ruletových stoloch sa limity pohybujú od 0.10 EUR po 100 EUR na kolo. Pri blackjacku môžu byť minimálne stávky tiež od 0.50 EUR, zatiaľ čo maximálne limity sa môžu vyšplhať až na 5,000 EUR v závislosti od stola. Tieto variabilné limity umožňujú prispôsobiť hru rôznym typom hráčov.

    4. Aké sú možnosti vedľajších stávok?

    • Blackjack: Možnosť stávky na “Perfect Pairs”.
    • Ruleta: Stávky na “Neighbours” a “Tiers du Cylindre”.
    • Baccarat: “Tie” stávky s výhodou pre hráča.

    Vedľajšie stávky môžu zvýšiť vzrušenie a potenciálne aj výhru, avšak je dôležité si uvedomiť, že s nimi prichádzajú aj vyššie riziká.

    5. Aké štúdiá poskytujú hry pre Winvipe Casino?

    Winvipe spolupracuje s renomovanými poskytovateľmi ako Evolution Gaming a Ezugi. Títo poskytovatelia sú známi svojou kvalitou a inováciami v oblasti live hier. V mojej skúsenosti hry od týchto štúdií ponúkajú nielen vysokú kvalitu, ale aj zábavné a atraktívne prostredie.

    6. Aké sú požiadavky na stávky pri bonusoch?

    Vo väčšine prípadov sú požiadavky na stávky pre bonusy nastavené na 35x. To znamená, že ak dostanete bonus vo výške 100 EUR, musíte staviť celkovo 3,500 EUR predtým, ako si môžete vybrať výhry. Tieto podmienky sú bežné v online kasínach a mali by ste si ich vždy prečítať pred akceptovaním bonusu.

    7. Aké sú časy výberu peňazí?

    Časy výberu sa pohybujú od 23 do 47 hodín, pričom mnohé výbery sa spracovávajú rýchlo. V mojej skúsenosti bola moja posledná žiadosť o výber spracovaná za približne 31 hodín, čo je naozaj konkurencieschopné v porovnaní s inými online kasínami.

    8. Môžem hrať na mobilnom zariadení?

    Áno, Winvipe Casino je plne optimalizované pre mobilné zariadenia. Môžete si vychutnať väčšinu hier priamo vo svojom prehliadači bez potreby sťahovania aplikácie. Dôležité je, že mobilná verzia ponúka rovnakú kvalitu streamu a funkcie ako desktopová verzia.

    Praktický tip: Pred začatím hrania v Winvipe Casino si vždy prečítajte podmienky a pravidlá hier. Týmto spôsobom sa vyhnete nepríjemným prekvapeniam a zabezpečíte si lepší zážitok z hry.

front-pie-canary-939194be-c258-4313-8dfd-0919dfc18e67 front-pie-canary-8bf7695e-a2cf-403d-99a4-3ff30c15b335
Los números de teléfono virtuales temporales facilitan la verificación por SMS sin exponer datos personales. Al registrar una cuenta en línea, se puede usar un número descartable para recibir el código, luego eliminarlo y evitar el spam. Este método protege la privacidad y simplifica la gestión de cuentas múltiples. La guía numero de telefono temporal explica cómo funcionan y cuándo es recomendable usar estos números.
Delving into a birth chart reveals more than just a sun sign; the moon, rising, and planetary aspects weave a unique cosmic narrative. With the rise of astrology apps, users can instantly chart horoscopes and decode their life path, making complex calculations accessible on their devices. The Astroline app offers intuitive tools and deep insights, empowering seekers to explore their celestial blueprint.
Découvrez le monde du jeu en ligne où stratégies, émotions et bonus se mêlent, offrant une expérience palpitante dans chaque session. Les plateformes comme https://casino5gringos.live/bonus/ garantissent des offres attractives, une sécurité renforcée et des jeux variés, pour que chaque joueur trouve son équilibre entre divertissement et gains potentiels.
Choosing a trustworthy platform is essential to enjoy online gambling in good conditions, as secure payments, a wide selection of casino games, generous bonuses and fast withdrawals can greatly impact players’ experience. The guide spingranny app helps compare available sites and better understand the key criteria before playing online.