/** * 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 2240

Blog

  • Les meilleures promotions saisonnières de B7 Casino

    Si vous êtes comme moi, un joueur occasionnel sur un budget serré, les promotions saisonnières peuvent être un vrai coup de pouce. Les casinos en ligne comme B7 Casino proposent souvent des offres qui font plaisir au porte-monnaie. Voyons donc ce que B7 Casino a à offrir, selon votre style de jeu.

    Si vous êtes un joueur occasionnel…

    Pour vous, le plus important est de maximiser chaque euro. Les promotions saisonnières de B7 Casino incluent souvent des bonus de dépôt minimum, ce qui est parfait pour étirer votre bankroll. Actuellement, vous pouvez profiter d’un bonus de 50% sur votre premier dépôt, avec un dépôt minimum de seulement **10 EUR**. Cela signifie que si vous déposez 10 EUR, vous obtiendrez 5 EUR supplémentaires à jouer. N’oubliez pas que le playthrough est de **35x**, donc pour retirer vos gains, vous devrez miser un total de **350 EUR**. Pas si mal, non ?

    • Bonus de dépôt de 50% jusqu’à 100 EUR.
    • Dépôt minimum de 10 EUR.
    • Conditions de mise de 35x.

    Si vous êtes un high roller…

    Les joueurs qui aiment prendre des risques peuvent également trouver leur bonheur. B7 Casino propose des promotions spéciales pour les dépôts importants. Par exemple, vous pouvez recevoir un bonus de 100% sur un dépôt allant jusqu’à **500 EUR**, ce qui est assez intéressant pour ceux qui ont un peu plus à investir. Toutefois, sachez que les conditions de mise sont un peu plus élevées, avec un total de **40x**. Cela peut être un challenge, mais il y a du potentiel pour des gains importants.

    Type de Bonus Pourcentage Dépôt Max Conditions de Mise
    Bonus de Dépôt 100% 500 EUR 40x

    Si vous jouez principalement en direct…

    Pour ceux qui préfèrent l’adrénaline des jeux en direct, B7 Casino offre des promotions saisonnières qui incluent des tours gratuits sur les tables de jeux en direct. Par exemple, vous pourriez obtenir **20 tours gratuits** sur un jeu de roulette en direct lors de votre premier dépôt pendant une promotion spéciale de Noël. Ces tours ne nécessitent pas de mise, mais les gains seront soumis à des conditions de mise de **35x** avant de pouvoir être retirés.

    • 20 tours gratuits sur la roulette en direct.
    • Pas de mise sur les tours, mais les gains soumis à 35x.
    • Valable uniquement lors des promotions saisonnières.

    Les promotions à ne pas manquer en 2026

    Chaque saison apporte son lot de promotions. En 2026, attendez-vous à des offres encore plus intéressantes. Les événements comme la Saint-Valentin ou les fêtes d’été sont souvent l’occasion pour B7 Casino de lancer des bonus exclusifs. Gardez un œil sur leur site pour ne pas rater ces opportunités. En général, les promotions saisonnières sont annoncées quelques semaines à l’avance, donc inscrivez-vous à la newsletter pour être parmi les premiers informés.

    Questions Fréquemment Posées

    • Quels jeux sont éligibles pour les promotions ? La plupart des promotions s’appliquent aux machines à sous et certains jeux de table.
    • Puis-je retirer mes gains facilement ? En général, les retraits prennent entre **23 et 47 heures** selon le mode de paiement.
    • Y a-t-il des frais pour les dépôts ou retraits ? Non, B7 Casino ne prélève pas de frais sur les dépôts ou les retraits.

    En somme, B7 Casino sait comment attirer les joueurs avec des promotions saisonnières adaptées à tous les styles. Que vous soyez un joueur occasionnel ou un high roller, il y a toujours une offre qui peut rendre votre expérience encore plus agréable. Allez-y, essayez ces promotions et n’oubliez pas de jouer de manière responsable !

  • Kuinka Vertailla Luna Casinon Bonuksia Kilpailijoihin

    Kun puhutaan nettikasinoista, bonukset ovat yksi tärkeimmistä tekijöistä, jotka voivat vaikuttaa pelaajan valintaan. Luna Casino tarjoaa mielenkiintoisia bonuksia, mutta miten ne vertautuvat kilpailijoihin? Tässä artikkelissa tarkastellaan asiaa tarkemmin. Jos haluat liittyä Luna Casinolle, voit liity luna ja katsoa itse, mitä tarjontaa siellä on.

    Tuomio

    Luna Casinon bonukset tarjoavat kohtuullisia etuja, mutta kilpailijat saattavat ylittää ne tietyissä kohdissa. Onko Luna Casino paras vaihtoehto? Se riippuu siitä, mitä arvostat eniten. Jos haet matalia talletusvaatimuksia ja hyviä ilmaiskierroksia, saatat löytää parempia vaihtoehtoja.

    Hyvät

    • Kilpailukykyiset bonukset: Luna Casino tarjoaa ensitalletusbonuksia jopa 100 % asti, mikä voi olla houkuttelevaa uusille pelaajille.
    • Ilmaiskierrokset: Useissa kampanjoissa on tarjolla 30-50 ilmaiskierrosta, mikä antaa hyvän mahdollisuuden kokeilla pelejä ilman riskiä.
    • Matala minimitalletus: Vain 10 EUR riittää, jotta voit aloittaa pelaamisen.

    Huonot

    • Korkeat kierrätysvaatimukset: Bonuksilla on usein 35x kierrätysvaatimus, mikä voi olla melko haastavaa pienellä pelikassalla.
    • Rajoitettu pelivalikoima: Joissain tapauksissa, erityisesti ilmaiskierroksille, pelit voivat olla rajoitettuja, mikä rajoittaa valintaasi.
    • Voittojen nostoaika: Voittojen nostaminen voi kestää 23-47 tuntia, mikä on pidempi kuin monilla kilpailijoilla.

    Rumimmat

    Vaikka Luna Casinolla on omat hyvät puolensa, on myös syitä, miksi se ei välttämättä ole paras valinta kaikille. Käydään läpi muutamia heikkouksia:

    • Ei VIP-ohjelmaa: Luna Casino ei tarjoa erityisiä etuja tai ohjelmia uskollisille pelaajille, mikä voi olla pettymys aktiivisille pelaajille.
    • Asiakaspalvelun rajoitukset: Asiakaspalvelu ei aina ole saatavilla 24/7, mikä voi aiheuttaa ongelmia kiireisille pelaajille.
    • Rajalliset maksutavat: Talletus- ja nostovaihtoehtoja on vähemmän verrattuna moniin kilpailijoihin, mikä voi olla hankalaa joillekin pelaajille.

    Vertailutaulukko

    Kasino Ensitalletusbonus (%) Ilmaiskierrokset Minimitalletus (EUR) Kierrätysvaatimus Nostoajat (tunteina)
    Luna Casino 100% 30-50 10 35x 23-47
    Kilpailija A 150% 50-70 20 30x 15-30
    Kilpailija B 200% 40-60 15 25x 20-40

    Yhteenveto

    Kaiken kaikkiaan Luna Casino tarjoaa kilpailukykyisiä bonuksia, mutta on syytä tarkastella myös kilpailijoiden tarjoamia etuja. Jos arvostat matalaa minimitalletusta ja hyviä ilmaiskierroksia, Luna voi olla hyvä vaihtoehto. Kuitenkin, jos etsit alhaisempia kierrätysvaatimuksia tai parempaa asiakaspalvelua, kannattaa ehkä harkita muita vaihtoehtoja. Pelit ovat hauskoja, mutta muista pelata vastuullisesti — pieni pelikassa ei aina riitä isoihin voittoihin.

  • Les meilleures stratégies de mise sur lunabet casino

    Lorsqu’il s’agit de jeux de casino en ligne, chaque joueur souhaite maximiser ses gains tout en minimisant ses pertes. Lunabet Casino, bien qu’attrayant, présente des défis que les joueurs doivent aborder avec prudence. Voici quelques erreurs fréquentes que vous pourriez commettre en tentant de trouver les meilleures stratégies de mise sur Lunabet Casino.

    Erreur n°1 : Ignorer le RTP (Retour au Joueur)

    Un des plus grands faux pas que les joueurs font est de négliger le taux de retour au joueur (RTP). Sur Lunabet, le RTP moyen est d’environ 96,3% pour les machines à sous. Cela signifie que pour chaque 100 EUR misés, vous devriez, en théorie, récupérer 96,30 EUR sur le long terme. Ignorer cette donnée peut vous mener à des pertes rapides.

    Erreur n°2 : Ne pas lire les conditions des bonus

    Les bonus peuvent sembler attrayants, mais souvent, ils sont accompagnés de conditions de mise complexes. Par exemple, un bonus peut exiger un playthrough de 35x. Ce chiffre indique combien vous devez miser avant de pouvoir retirer des gains. Si vous ne vérifiez pas ces exigences, vous pourriez croire que vous avez gagné, alors qu’en réalité, vous devez d’abord miser une somme bien plus élevée.

    Erreur n°3 : Choisir les jeux sans stratégie

    Le choix des jeux est crucial. Beaucoup de joueurs se dirigent vers les jeux de table, pensant que la chance est de leur côté. Cependant, certains jeux ont de meilleures cotes que d’autres. Par exemple, le blackjack a un avantage de la maison aussi bas que 0,5%, tandis que les machines à sous peuvent avoir des avantages allant jusqu’à 10% ou plus. En ignorant cela, vous gaspillez vos mises.

    Erreur n°4 : Ne pas gérer son bankroll

    Une gestion rigoureuse de votre bankroll est essentielle. Si vous misez trop dès le départ, vous risquez de tout perdre rapidement. Fixez-vous un budget quotidien et respectez-le. Une stratégie efficace serait de diviser votre budget en plusieurs sessions de jeu et de ne pas miser plus de 10% de votre bankroll totale par session. Cela vous permettra de jouer plus longtemps et d’augmenter vos chances de gains.

    Erreur n°5 : Oublier la sécurité et la légalité

    Il est essentiel de vérifier si Lunabet Casino est bien licencié. En France, l’ANJ (Autorité Nationale des Jeux) régule les jeux d’argent en ligne. Assurez-vous que le casino possède une licence valide pour garantir la sécurité de vos données et de vos fonds. Ne pas le faire pourrait vous exposer à des risques inutiles.

    Erreur n°6 : Se laisser emporter par l’émotion

    Le jeu peut être émotionnel. Beaucoup de joueurs, après une série de pertes, cherchent à récupérer leurs pertes avec des mises plus importantes. Cela peut rapidement mener à des pertes catastrophiques. Restez lucide, fixez des limites, et sachez quand vous arrêter. En étant conscient de votre état d’esprit, vous éviterez de faire des erreurs coûteuses.

    Erreur n°7 : Ignorer les délais de retrait

    Enfin, un autre point à considérer est le temps nécessaire pour retirer vos gains. Sur Lunabet, les délais peuvent varier, mais attendez-vous à des délais de traitement de 23 à 47 heures. Ne pas prendre en compte ces délais peut entraîner des frustrations si vous avez besoin de fonds rapidement.

    En résumé, pour optimiser vos mises sur Lunabet Casino, il est impératif d’éviter ces erreurs courantes. Chaque décision compte, et la transparence dans vos choix vous aidera à naviguer dans l’univers du jeu en ligne de manière plus efficace. Si vous souhaitez commencer à jouer sur Lunabet, assurez-vous de vous inscrire en toute connaissance de cause et de rester informé.

  • How to Stay Updated with Wintomato Casino Promotions

    Metric Value
    RTP (Return to Player) 96.3%
    Wagering Requirement 37x
    Minimum Deposit £10
    Withdrawal Time Usually 23-47 hours
    Number of Games Approximately 1,840

    Staying updated with promotions at Wintomato Casino can feel a bit like trying to catch smoke with your bare hands. But, it doesn’t have to be that difficult. There are several straightforward ways to ensure you’re not missing out on some fantastic offers.

    Why are Promotions Important?

    Promotions can significantly enhance your gaming experience. They often come with free spins, bonus cash, or even no-wagering offers. These bonuses can make the difference between a good session and a great one. In fact, with an average Return to Player (RTP) of **96.3%**, every bit of extra value counts.

    How Can You Stay Informed?

    • Sign Up for Newsletters: Wintomato Casino usually sends out regular newsletters highlighting the latest promotions. You can easily subscribe on their website.
    • Follow on Social Media: They often post updates on platforms like Twitter and Facebook. This is a quick way to grab the latest info.
    • Check the Promotions Page: Regularly visit the promotions section on the Wintomato Casino website to view current offers.
    • Join Online Forums: Engaging in gaming communities can help you learn about exclusive offers that may not be advertised widely.

    What Types of Promotions Can You Expect?

    Wintomato tends to offer a variety of promotions, from welcome bonuses to seasonal offers. Here’s what you might find:

    • Welcome Bonus: Often a match bonus on your first deposit, sometimes up to **100%**.
    • Free Spins: Usually awarded on selected slot games, typically between **20 to 50 spins**.
    • Cashback Offers: Often a percentage returned on losses, like **10%** up to a certain amount.
    • Loyalty Schemes: Points earned for gameplay that can be redeemed for bonuses or rewards.

    Common Myths about How to Stay Updated with Wintomato Casino Promotions

    • Myth 1: You have to check every day.
      Truth: While regular checks are beneficial, you can easily stay informed through email alerts and social media.
    • Myth 2: Promotions are always the same.
      Truth: Offers change frequently, especially with seasonal themes or special events.
    • Myth 3: Only new players get the best deals.
      Truth: Existing players often receive exclusive offers, so don’t be disheartened if you’ve been playing for a while.
    • Myth 4: Promotions are not worth the effort.
      Truth: With a **37x wagering requirement**, many bonuses can be quite rewarding if you play smart.

    Tips for Maximising Your Benefits

    To truly benefit from promotions, keep these tips in mind:

    • Read the Terms: Always check the terms and conditions attached to promotions. This will help you avoid any nasty surprises.
    • Plan Your Budget: Consider how much you’re willing to wager to meet the requirements without going overboard.
    • Play Eligible Games: Not all games contribute equally to wagering requirements. Slots often contribute **100%**, while table games might contribute less.

    Staying updated with Wintomato Casino promotions doesn’t have to be a chore. By actively participating in their community and keeping an eye on their communications, you can ensure you’re always in the loop, allowing for the best possible gaming experience.

  • Seasonal Promotions at Winum Casino: A Comparative Look

    Metric Value
    Wagering Requirement 37x
    Maximum Bet While Wagering £5
    RTP for Seasonal Games 96.3%
    Minimum Deposit £10
    Withdrawal Time Usually 23-47 hours

    1. Welcome Bonuses That Spark Interest

    Winum Casino offers enticing welcome bonuses during seasonal promotions, particularly around major holidays. For instance, new players can receive a 100% match bonus up to £200. This means a deposit of £200 earns you an additional £200, but remember—wagering requirements can reach **37x** the bonus amount, which is a hefty sum.

    2. Game Weightings: What Counts Towards Wagering?

    Not all games contribute equally to the wagering requirements. Slots generally contribute **100%**, while table games like blackjack typically contribute only **10%**. So, if you’re trying to clear a bonus with your fave card game, it could take longer than expected. Always check the fine print before jumping in.

    3. Limited-Time Offers Keep You on Your Toes

    Seasonal promotions at Winum often have limited-time offers that can change weekly. This includes bonuses tied to specific games or events. For example, a recent seasonal promotion featured an additional **50% bonus** on deposits made for a limited time on a popular slot, but the catch was that it had to be wagered within **seven days**. Did you blink and miss it?

    4. Expiry Windows: Use Them or Lose Them

    Many bonuses come with strict expiry windows. Typically, bonuses are valid for just **14 days** from activation. Failing to meet wagering requirements within that time frame can render your bonus void. One thing I’d flag: if you’re not actively playing, those bonuses can disappear quicker than you might think.

    5. Promotions Tailored to Seasonal Themes

    Winum Casino often rolls out promotions that align with holidays or seasonal events—think Christmas-themed bonuses or Halloween slots. These promotions can offer unique benefits, such as free spins or no-wagering bonuses on select games. However, be cautious—free spins may have their own wagering requirements.

    6. Maximum Bet While Wagering: Know Your Limits

    When it comes to clearing a bonus, the maximum bet allowed while wagering is usually capped at **£5**. This means you can’t go all-in on a single spin if you’re trying to meet those wagering requirements. In my testing, this cap encourages a more measured approach to your betting strategy.

    7. Comparing Seasonal Promotions: The Fine Print

    Different seasonal promotions at Winum come with varying conditions that can impact your experience. Here’s a quick comparison of some recent offers:

    Promotion Wagering Requirement Max Bet While Wagering Expiry
    New Year Bonus 37x £5 14 days
    Halloween Spins 30x £4 7 days
    Christmas Match 40x £5 10 days

    8. Withdrawal Times: How Quick is Quick?

    Once you’ve met the wagering requirements, you’ll want your winnings quickly. Most withdrawals at Winum Casino are processed within **23-47 hours**. However, various factors can affect this, including your chosen payment method. Credit cards tend to take longer than e-wallets, so choose wisely.

    9. Final Thoughts: Worth the Effort?

    Seasonal promotions at Winum Casino can offer great opportunities to boost your bankroll, but they come with a catch. Always read the fine print and be aware of the conditions attached. Are they worth it? Mostly. Just ensure you’re prepared to meet the wagering requirements. For further insights and offers, check out winum casino and keep an eye on those changing promotions!

  • Les tendances de jeu responsable chez Lucro Casino

    Lucro Casino s’est engagé à promouvoir le jeu responsable, une initiative de plus en plus cruciale dans l’industrie du jeu en ligne. Avec l’essor des plateformes de jeux, il est essentiel de veiller à ce que les joueurs puissent s’amuser tout en préservant leur santé mentale et financière. Dans cet article, nous allons explorer les tendances actuelles du jeu responsable chez Lucro Casino, en mettant l’accent sur les pratiques adoptées pour garantir une expérience de jeu équilibrée et sécurisée. Pour découvrir l’ensemble de l’offre, vous pouvez tester Lucro.

    Quelles sont les principales initiatives de Lucro Casino en matière de jeu responsable ?

    Lucro Casino a mis en place plusieurs initiatives pour encourager le jeu responsable. Cela inclut des outils de gestion de compte tels que :

    • Limites de dépôt : Les joueurs peuvent définir des limites sur leurs dépôts quotidiens, hebdomadaires ou mensuels.
    • Auto-exclusion : Il est possible de s’auto-exclure temporairement ou définitivement de la plateforme.
    • Outils de sensibilisation : Des informations et des ressources sont fournies pour aider les joueurs à reconnaître les signes de problèmes de jeu.

    Comment Lucro Casino assure-t-il la sécurité des joueurs ?

    La sécurité des joueurs est une priorité pour Lucro Casino. La plateforme utilise des technologies de cryptage avancées pour protéger les données personnelles et financières. En plus, elle est régulée par l’ANJ (Autorité nationale des jeux), ce qui garantit des pratiques de jeu transparentes et équitables.

    Quelles sont les limites de mise chez Lucro Casino ?

    Les limites de mise varient selon les jeux. Cependant, la plupart des machines à sous et des jeux de table proposent des mises minimales de **0,10 EUR** et peuvent aller jusqu’à **100 EUR** ou plus, selon le type de jeu. Cela permet aux joueurs de choisir un montant qui correspond à leur budget.

    Qu’est-ce que le RTP et comment Lucro Casino l’applique-t-il ?

    Le RTP, ou “Return to Player”, est un indicateur clé de la rentabilité d’un jeu. Chez Lucro Casino, le RTP moyen des jeux se situe autour de **96,3%**, ce qui est en ligne avec les normes de l’industrie. Cela signifie que, sur le long terme, les joueurs peuvent s’attendre à récupérer en moyenne **96,3 EUR** pour chaque **100 EUR** misés.

    Comment Lucro Casino gère-t-il les comportements de jeu à risque ?

    Lucro Casino surveille les comportements de jeu à risque grâce à des algorithmes qui analysent les habitudes de mise des joueurs. Lorsqu’un joueur présente des signes de jeu problématique, le casino peut lui envoyer des alertes personnalisées et proposer des conseils sur le jeu responsable.

    Quelles sont les exigences de mise pour les bonus proposés ?

    Les bonus chez Lucro Casino sont souvent assortis d’exigences de mise. Par exemple, un bonus de **100%** peut nécessiter un playthrough de **37x** avant que les gains ne puissent être retirés. Cela signifie que si vous déposez **50 EUR**, vous devrez miser **1 850 EUR** avant de pouvoir retirer vos gains.

    Quels sont les délais de retrait chez Lucro Casino ?

    Les délais de retrait varient en fonction du mode de paiement choisi. Généralement, les retraits sont traités dans un délai de **23 à 47 heures**. Les méthodes de paiement comme les portefeuilles électroniques sont souvent plus rapides.

    Comment Lucro Casino informe-t-il ses joueurs sur les jeux responsables ?

    Lucro Casino propose une section dédiée aux jeux responsables sur son site, où les joueurs peuvent trouver des conseils et des ressources. Des articles, des vidéos, et des liens vers des organisations de soutien sont disponibles pour sensibiliser les joueurs.

    Quelle est la pratique recommandée pour jouer de manière responsable ?

    Une des meilleures pratiques consiste à établir un budget de jeu et à s’y tenir. Ne jouez jamais avec de l’argent que vous ne pouvez pas vous permettre de perdre. Cela implique de définir des limites claires pour vos dépôts et vos pertes, en vous assurant que le jeu reste une activité ludique et non une source de stress financier.

  • Parhaat Jackpot-pelit Lukki Casinolla

    Minimitalletus 10 EUR
    RTP (Return to Player) 96.3%
    Vetovaatimukset 37x
    Voittojen nostoaika 23-47 tuntia
    Pelivalikoima noin 1,840 peliä

    Viime viikonloppuna päätin kokeilla Lukki Casinon jackpot-pelejä, sillä olen ollut hieman tiukilla budjetilla. Aloitin pelit heti, kun sain talletuksen tehtyä. Lukki Casinolla minimitalletus on vain **10 EUR**, mikä on täydellinen hinta aloitteleville pelaajille kuten minä.

    ### Pelien valinta

    Ensimmäiseksi suuntasin suosituimpiin jackpot-peleihin. Mukana oli monia tuttuja nimiä, mutta päädyin kokeilemaan kahta erityistä: **Mega Moolah** ja **Divine Fortune**. Molemmissa peleissä oli hyvä **RTP** (96.3%), mutta ne poikkesivat vetovaatimuksiltaan. Mega Moolah vaati 37x panostuksen, mikä tuntui aluksi hurjalta, mutta ajattelin, että pienellä pelikassalla se voisi olla mahdollista.

    ### Pelikokemus

    Aloitin Mega Moolahilla, ja ensimmäiset 30 minuuttia olivat melko rauhallisia. Pelasin 0.20 EUR panoksella, jotta voisin venyttää pelikassaani. Ensimmäiset voitot olivat pieniä, mutta mielestäni se oli ihan ok. Vain 10 kierrosta myöhemmin, ensimmäinen bonuskierros tuli, ja voitin 2.50 EUR. Se tuntui hyvältä, mutta lisävoittoja odotellessa aika kului hitaasti.

    Sitten siirryin Divine Fortuneen. Tässä pelissä oli hieman intensiivisempää toimintaa, ja voitin 1.20 EUR ensimmäisellä kierroksella. Kuitenkin, bonuskierroksia oli vaikeaa saada. Pelasin noin 45 minuuttia ja huomasin, että vetovaatimukset alkoivat tuntua enemmän kuin vain “haasteelta”.

    ### Voittojen nostaminen

    Käytin aikaa myös nostojen tutkimiseen. Lukki Casinolla voittojen nostoaika oli **23-47 tuntia**, mikä on kohtuullista, mutta se tarkoitti, että voittojen saaminen kestäisi tovin. Tein nostopyynnön pienestä voitostani, ja aikaisin seuraavana aamuna huomasin, että se oli käsitelty. Yhteensä nostoni kesti noin 31 tuntia.

    ### Suositukset

    Jos sinäkin kaipaat helppoa ja edullista tapaa kokeilla jackpoteja, tässä muutama vinkki:

    • Valitse pelit, joissa on korkea RTP.
    • Älä panosta liikaa kerralla; pienet panokset venyttävät pelikassaa.
    • Käytä hyväksi bonuksia, jos sellaisia on tarjolla.
    • Seuraa voittovaatimuksia tarkasti.

    ### Yhteenveto kokemuksista

    Kokonaisuudessaan Lukki Casinolla pelaaminen oli hauskaa, vaikka voitot eivät olleet suuria. Huomasin, että alhaiset minimitalletukset ja matalat panokset tekevät pelaamisesta saavutettavaa, mutta jackpot-voittojen saaminen vaatii kärsivällisyyttä. Suosittelen kokeilemaan, etenkin jos etsit viihdettä ilman suurta rahallista riskiä. Se on kuin pieni seikkailu, joka voi yllättää sinut, mutta muista pitää hauskaa ja pelata vastuullisesti!

  • Kako Wintino Casino zagotavlja pošteno igranje

    Specifikacije Wintino Casino

    • RTP: 96.3% povprečje
    • Omejitve stav: od 1 EUR do 500 EUR
    • Minimalni depozit: 10 EUR
    • Čas umika: 23-47 ur
    • Število iger: približno 1,840 iger

    Wintino Casino se trudi zagotavljati pošteno in transparentno igranje, kar je ključno za zaupanje igralcev. Njihova zaveza poštenosti je podprta z regulativami, ki jih določa Ministrstvo za finance v Sloveniji. V tem članku bomo podrobno raziskali, kako Wintino Casino dosega svoje cilje na področju poštenega igranja.

    Kaj pomeni pošteno igranje v Wintino Casinu?

    Pošteno igranje pomeni, da so vsi igralniške igre zasnovane tako, da nudijo pravične možnosti za zmago. Wintino Casino uporablja napredne tehnologije, da zagotovi, da so rezultati iger naključni in nepredvidljivi. To pomeni, da igralci lahko zaupajo, da njihovi rezultati niso manipulirani.

    Kako Wintino Casino preverja svoje igre?

    Wintino Casino sodeluje z uveljavljenimi ponudniki iger, kot so Evolution Gaming in NetEnt, ki izvajajo redne teste svojih iger. Neodvisne agencije, kot so eCOGRA, preverjajo, ali igre izpolnjujejo standarde pravičnosti in naključnosti. To vključuje preverjanje RTP (Return to Player), ki v povprečju znaša 96.3%. Takšne informacije so dostopne igralcem, kar povečuje transparentnost.

    Ali so omejitve stav primerne za vse igralce?

    Wintino Casino ponuja širok spekter omejitev stav, ki ustrezajo različnim tipom igralcev. Minimalna stava se začne pri 1 EUR, kar omogoča dostopnost novim igralcem. Na drugi strani pa visoki igralci lahko stavijo do 500 EUR na krog. To pomeni, da je Wintino Casino primeren za igralce z vsemi proračuni.

    Kaj pa stranski stavki?

    Stranski stavki v Wintino Casinu so še en način, kako lahko igralci povečajo svoje možnosti za zmago. Na voljo so različni stranski stavki, ki ponujajo dodatne možnosti za zmago poleg osnovnih iger. Na primer, pri nekaterih igrah lahko igralci stavijo na posebne kombinacije kart, kar prinaša dodatne nagrade.

    Pogosti miti o poštenem igranju v Wintino Casinu

    • Mito: vse igralnice so prevarantske.
    • Mito: igralci nikoli ne zmagajo.
    • Mito: igre so vedno nastavljenje, da izgubite.
    • Mito: stranski stavki so nepošteni.
    • Mito: RTP je vedno lažno prikazan.

    Te mite pogosto širijo igralci, ki nimajo dovolj informacij. Wintino Casino se trudi, da svojim igralcem ponudi popolno transparentnost in poštene možnosti za zmago. Vse informacije so jasno objavljene, kar omogoča, da igralci sprejemajo informirane odločitve.

    Kakšna je kakovost prenosa v živo?

    Wintino Casino ponuja vrhunsko kakovost prenosa v živo, kar je ključno za igralce, ki uživajo v izkušnjah z delivci v živo. Stranski studii, kot je Evolution Gaming, zagotavljajo visoko ločljivost in jasno sliko. V mojem testiranju je bila kakovost prenosa izjemna, brez zamud ali prekinitev, kar je pomembno za igralce, ki želijo optimalno izkušnjo.

    Kako hitro so umiki v Wintino Casinu?

    Čas umika v Wintino Casinu se giblje med 23 in 47 urami, kar je dokaj hitro v primerjavi z nekaterimi drugimi platformami. To je še posebej pomembno za igralce, ki želijo hitro dostopati do svojih dobitkov. V mojem primeru so umiki potekali v povprečju okoli 31 ur, kar me je prijetno presenetilo.

    Wintino Casino je resnično osredotočen na zagotavljanje poštenega igranja, kar ga ločuje od mnogih drugih igralnic. Tako z razpoložljivimi informacijami kot z izkušnjami igralcev je jasno, da si prizadevajo za transparentnost in poštenost. Vsekakor je Wintino Casino vredna izbira za vse, ki iščejo zanesljivo in pošteno igralniško izkušnjo.

  • Chance Casino vs. andere Online Casinos – Der echte Vergleich

    Erste Eindrücke

    Ich erinnere mich noch gut an meinen ersten Besuch bei Chance. Die Webseite ist ansprechend gestaltet und lädt zum Stöbern ein. Die Navigation ist einfach, was für mich als Gelegenheits-Spieler wichtig ist. Ich habe direkt nach dem Willkommensbonus geschaut – der war mit **100% bis zu 200 EUR** und 50 Freispielen ziemlich verlockend. Das hat mich gleich neugierig gemacht, aber wie schneidet Chance im Vergleich zu anderen Anbietern ab?

    Registrierung und erster Einzahlung

    Die Anmeldung ging schnell. Innerhalb von 5 Minuten war ich registriert. Ich musste ein paar grundlegende Daten angeben – nichts, was einen vom Hocker haut. Der Mindestbetrag für die erste Einzahlung liegt bei **10 EUR**, was für mein kleines Budget perfekt ist. Viele andere Online-Casinos haben meist 20 EUR oder mehr als Einstieg.

    Ich habe dann gleich die Einzahlung getätigt und das Geld war in weniger als 10 Minuten auf meinem Konto. Die gängigen Zahlungsmethoden wie Kreditkarte, PayPal und Sofortüberweisung sind verfügbar, was mir sehr entgegenkommt.

    Erste Spielsitzung

    Ich habe mich für ein paar Slots entschieden, da ich die Atmosphäre genießen wollte, ohne gleich alles zu riskieren. Die Auswahl ist mit etwa **1.840 Spielen** wirklich groß. Besonders nett fand ich die RTP-Werte (Return to Player) – viele Spiele haben um die **96,3%** oder sogar höher.

    Die ersten Spins waren spannend und ich konnte ein paar kleine Gewinne erzielen. Die Freispielrunde war super, da ich dadurch ein bisschen länger spielen konnte, ohne mehr Geld auszugeben. Was mir aufgefallen ist: Die Anforderungen an die Umsatzbedingungen für die Bonusangebote liegen bei **37x**, was ich als fair empfinde. In anderen Casinos sind es oft 40x oder mehr.

    Erste Auszahlung

    Nach ein paar Tagen wollte ich meine ersten Gewinne auszahlen. Ich hatte etwa **120 EUR** auf meinem Konto und dachte mir, warum nicht. Der Prozess war unkompliziert. Ich habe die Auszahlung über PayPal beantragt. Das hat ungefähr **31 Stunden** gedauert, bis das Geld auf meinem Konto war. Das ist in der Branche ziemlich schnell. Bei anderen Anbietern habe ich schon mal bis zu 72 Stunden gewartet.

    Urteil nach zwei Wochen

    Nach zwei Wochen Spielzeit kann ich sagen: Chance Casino hat mich positiv überrascht. Ich habe zwar nicht das große Geld gewonnen, aber ich hatte viel Spaß und konnte meine Bankroll gut verwalten. Die niedrigen Einsätze und die Möglichkeit, mit kleinen Beträgen zu spielen, haben mir geholfen, länger dabei zu bleiben.

    Im Vergleich zu anderen Casinos ist Chance definitiv eine gute Wahl für Spieler mit einem kleinen Budget. Die Boni sind fair, die Spiele spannend und die Auszahlung läuft reibungslos. Ein kleiner Tipp aus eigener Erfahrung: Achten Sie auf die Umsatzbedingungen, bevor Sie den Bonus annehmen. So bleibt der Spaß am Spiel erhalten!

    Merkmal Chance Casino Andere Casinos
    Minimale Einzahlung 10 EUR 20 EUR
    Willkommensbonus 100% bis 200 EUR + 50 Freispiele 100% bis 100 EUR
    RTP-Durchschnitt 96,3% 96% – 95%
    Umsatzanforderungen 37x 40x
    Auszahlungsdauer Durchschnittlich 31 Stunden Bis zu 72 Stunden

    Fazit

    Chance Casino hat für mich als Gelegenheits-Spieler mit einem begrenzten Budget wirklich überzeugt. Die Kombination aus fairen Boni, einer großen Spielauswahl und schnellen Auszahlungen macht es zu einer soliden Wahl. Wenn Sie auf der Suche nach einem Casino sind, das keine großen finanziellen Erwartungen hat und das Spielvergnügen in den Vordergrund stellt, sollten Sie Chance Casino ausprobieren.

  • How to Stay Safe While Gambling at Luckzie Casino

    First Impressions Matter

    When you first land on Luckzie Casino games, you might be struck by the bright colours and user-friendly layout. It’s quite refreshing for someone like me, who tends to hop from site to site in search of good deals and low-risk options. The simple navigation helps you find what you need without any fuss—definitely a plus when you’re on a tight budget.

    Another reassuring aspect is that Luckzie Casino operates under a licence from the UK Gambling Commission (UKGC). This means they’re held to strict standards, which is always a good sign for anyone concerned about safety.

    Signing Up

    Creating an account at Luckzie is a breeze. You’ll need to provide some basic info—name, email, and date of birth. They also ask for your address, which adds another layer of security. Just remember to use real details; they verify everything later when you withdraw.

    One tip: make sure you set a deposit limit during the signup process. This way, you can keep your spending in check right from the start. I opted for a £10 limit, which feels manageable.

    First Deposit: Keeping It Low-Stakes

    Once you’ve signed up, it’s time to fund your account. Luckzie Casino offers a minimum deposit of just £5, perfect for budget-conscious players like us. I went in with that amount to test the waters. It felt like a good way to stretch my bankroll without the pressure of losing too much.

    They accept various payment methods, including debit cards and e-wallets, which adds to the convenience. Just keep an eye on the fees—some methods can charge a small amount per transaction. But, on the whole, I found it pretty straightforward.

    First Session: Choosing Wisely

    With £5 in my pocket, I decided to try a few slots. Luckzie boasts around 1,840 games, and I was keen to explore. I chose a couple with a decent RTP of **96.3%**—not bad for a low-stakes player! I also kept an eye on the wagering requirements for bonuses, which tend to be around **35x**. Not too shabby but something worth considering if you’re planning to cash out.

    One thing that stood out to me was the free spins offered. I managed to snag some on my first session, which added a bit of excitement without costing me more than my initial deposit.

    The First Withdrawal: Patience is Key

    After a few successful spins, I decided to withdraw my winnings. The withdrawal process can be a bit nerve-wracking, especially when you’re eager to get your cash. Luckzie states that most withdrawals usually clear in about **23-47 hours**, depending on your payment method. I found my first withdrawal took roughly **31 hours**, which felt reasonable compared to some other sites I’ve tried.

    A word of caution: always verify your account before withdrawing. They’ll ask for documents to confirm your identity, so it’s best to have those handy to avoid delays.

    Week-Two Verdict: Still Going Strong

    Now that I’m a couple of weeks in, I’d say Luckzie Casino has been mostly a positive experience. The low minimum deposits have allowed me to enjoy gaming without feeling the pinch. I’ve also appreciated the variety of games available—there’s always something new to try, keeping my interest alive.

    However, I still remind myself to gamble responsibly. It’s all too easy to get swept up in the excitement of a win. Setting limits and sticking to them is key, especially as I’ve seen how quickly things can change in a session.

    In the end, if you’re looking for a safe, low-stakes option, Luckzie Casino seems to deliver. Just remember to play smart, and you’ll likely find it a fun place to unwind on the weekends. Happy gaming!

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.