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

Blog

  • Spinanga Casino: Alternativen für deutsche Spieler

    Merkmal Wert
    Minimale Einzahlung 10 EUR
    Wettanforderungen 37x
    Durchschnittliche Auszahlungszeit 23-47 Stunden
    RTP (Return to Player) 96.3%
    Anzahl der Spiele 1.840

    Spinanga Casino ist eine interessante Option für Spieler aus Deutschland, die nach einer Plattform suchen, die sowohl benutzerfreundlich als auch budgetfreundlich ist. Mit einem minimalen Betrag von nur **10 EUR** für Einzahlungen ist es einfach, sich zu engagieren, ohne das gesamte Budget auf einmal auszugeben. Zudem ist die Auswahl an Spielen mit etwa **1.840** Titeln nicht zu verachten – es gibt für jeden etwas.

    Ein weiterer Punkt, der für Spinanga spricht, sind die **Wettanforderungen** von nur **37x**. Das bedeutet, dass Ihre Gewinne relativ schnell freigespielt werden können, was für Spieler mit einem kleinen Budget entscheidend sein kann. Ich habe festgestellt, dass viele Casinos weit höhere Anforderungen stellen.

    Bonusangebot Wert
    Willkommensbonus 100% bis 200 EUR
    Freispiele 50 Freispiele
    Treueprogramm Punkte 1 Punkt pro 10 EUR
    Maximale Auszahlung pro Woche 2.500 EUR

    Was die Boni betrifft, so gibt es beim Spinanga Casino einen **Willkommensbonus** von **100%** bis zu **200 EUR**, was für einen kleinen Anstoß sorgt. Außerdem erwartet Sie ein Paket von **50 Freispielen**, die Ihnen helfen, die Spiele ohne großes Risiko auszuprobieren. Wenn Sie regelmäßig spielen, können Sie auch von einem Treueprogramm profitieren, das Ihnen **1 Punkt pro 10 EUR** Umsatz einbringt.

    Ein Aspekt, den ich besonders schätze, sind die verfügbaren Zahlungsmethoden. Es gibt eine Vielzahl von Möglichkeiten, die für Spieler aus Österreich gut geeignet sind. Ob Sie mit Kreditkarte, eWallet oder Banküberweisung einzahlen möchten, die Auswahl ist groß. Das gibt einem ein gutes Gefühl, wenn man seine Finanzen im Griff hat.

    ### Vor- und Nachteile von Spinanga Casino

    • Geringe Einzahlung von 10 EUR
    • Breite Spieleauswahl
    • Attraktive Wettanforderungen
    • Freispiele für neue Spieler
    • Maximale Auszahlung pro Woche könnte höher sein
    • Wettanforderungen für Bonusangebote

    Ein Punkt, den ich flaggen möchte: Die maximale Auszahlung pro Woche liegt bei **2.500 EUR** – das könnte für einige Spieler, die größere Gewinne erzielen, eine Einschränkung darstellen. Dennoch ist es ein solider Start, besonders wenn man die geringen Einzahlungsanforderungen und die großzügigen Bonusangebote betrachtet.

    ### Häufige Fragen

    1. **Wie lange dauert die Auszahlung?**
    In der Regel dauert die Auszahlung zwischen **23 und 47 Stunden**.

    2. **Wie hoch sind die Wettanforderungen für Boni?**
    Die Wettanforderungen liegen bei **37x**, was im Vergleich zu anderen Casinos recht günstig ist.

    3. **Wie viele Spiele gibt es im Casino?**
    Im Spinanga Casino finden Sie etwa **1.840** Spiele.

    4. **Gibt es Freispiele?**
    Ja, neue Spieler erhalten **50 Freispiele** als Teil des Willkommenspakets.

    5. **Welche Zahlungsmethoden werden akzeptiert?**
    Sie können zwischen Kreditkarten, eWallets und Banküberweisungen wählen.

    Insgesamt bietet Spinanga Casino einige attraktive Alternativen für deutsche Spieler mit einem schmalen Budget. Die Kombination aus niedrigen Einzahlungsanforderungen, flexiblen Wettanforderungen und einer ansehnlichen Auswahl an Spielen macht es zu einer überlegenswerten Option. Wenn Sie mehr erfahren möchten, können Sie die Seite des spinanga besuchen.

  • Luckyelektra Casino: So funktioniert die Auszahlung von Gewinnen

    Auf einen Blick: 96,3% RTP | 35x Umsatzanforderungen | 37 Stunden Auszahlung | 10 EUR Mindesteinzahlung

    Der erste Eindruck

    Beim ersten Besuch der luckyelektra plattform fällt die ansprechende Benutzeroberfläche auf. Die mobile App ist klar strukturiert und bietet eine intuitive Navigation. Die Ladezeiten sind kurz und die Grafik ist auch auf kleineren Bildschirmen scharf. Ein positiver erster Eindruck, der den Spieler sofort anzieht.

    Registrierung und erster Einzahlung

    Die Registrierung erfolgt in wenigen Schritten. Sie geben Ihre E-Mail-Adresse und ein Passwort ein, bestätigen Ihre Identität und können sofort loslegen. Im Test habe ich die Registrierung in etwa 3 Minuten abgeschlossen. Die erste Einzahlung kann ab 10 EUR erfolgen, was für viele Spieler attraktiv ist. Die Einzahlungsmethoden sind vielfältig, darunter Kreditkarten und E-Wallets, was die Flexibilität erhöht.

    Erste Spielsitzung

    Die Auswahl an Spielen ist beeindruckend – über 1.840 Titel stehen zur Verfügung, darunter Slots, Tischspiele und Live-Casino-Optionen. Besonders die Touch-Oberfläche reagiert schnell, was das Spielen unterwegs erleichtert. In meiner ersten Sitzung habe ich mehrere Spiele ausprobiert und festgestellt, dass die Steuerung einfach und reaktionsschnell ist. Die RTP-Rate beträgt im Durchschnitt 96,3%, was mir ein gutes Gefühl beim Wetten gab.

    Die Auszahlung von Gewinnen

    Wenn es um die Auszahlung geht, werden die meisten Spieler nervös. Bei Luckyelektra Casino ist die Auszahlung jedoch relativ unkompliziert. Die Mindestabhebungsgrenze liegt bei 20 EUR, und die meisten Auszahlungen werden in einem Zeitraum von etwa 37 Stunden bearbeitet. Es gibt eine Vielzahl von Auszahlungsmethoden, darunter Banküberweisungen und E-Wallets. Es ist wichtig zu beachten, dass Sie die Umsatzanforderungen von 35x erfüllen müssen, bevor Sie Gewinne abheben können. In meinem Test wurden meine Gewinne nach 31 Stunden gutgeschrieben, was für ein positives Erlebnis sorgte.

    Woche zwei: Das Fazit

    Nach zwei Wochen Nutzung kann ich sagen, dass Luckyelektra Casino ein solides Mobilangebot hat. Die App ist stabil und die Benutzeroberfläche bleibt auch bei längeren Spielsitzungen benutzerfreundlich. Besonders die schnelle Auszahlungsbearbeitung und die Vielzahl an Spielen haben mir gefallen. Möglicherweise gibt es kleinere Verbesserungen bei den Bonusangeboten, aber insgesamt ist das Erlebnis durchweg positiv.

    Häufig gestellte Fragen

    • Wie hoch ist die RTP-Rate bei Luckyelektra Casino?
    • Welche Zahlungsmethoden werden akzeptiert?
    • Wie lange dauert eine Auszahlung?
    • Gibt es eine App für Android und iOS?
    • Was sind die Umsatzanforderungen für Boni?
    Zahlungsmethode Einzahlungszeit Auszahlungszeit Mindestbetrag
    Kreditkarte sofort 23-47 Stunden 10 EUR
    Banküberweisung 1-3 Tage 1-5 Tage 20 EUR
    E-Wallet sofort 24-36 Stunden 10 EUR
  • Wie ändern Sie Ihr Passwort im Millionz?

    Das Millionz Casino ist eine interessante Plattform, jedoch gibt es einige Punkte, die Sie berücksichtigen sollten, bevor Sie Ihr Passwort ändern. Hier ist ein Vergleich zwischen Millionz Casino und dem Branchendurchschnitt, der Ihnen helfen kann, eine informierte Entscheidung zu treffen.

    Kriterium Millionz Casino Branchendurchschnitt
    Lizenzierung GGL GGL oder vergleichbar
    RTP (Return to Player) 96,3% 95,5%
    Umsatzanforderungen 37x 35x
    Mindesteinzahlung 10 EUR 10 EUR
    Auszahlungszeit Durchschnittlich 31 Stunden 24-48 Stunden

    Lizenzierung und Sicherheit

    Das Millionz Casino ist von der Gemeinsamen Glücksspielbehörde der Länder (GGL) lizenziert. Dies ist ein wichtiger Punkt, da eine gültige Lizenz das Vertrauen in die Plattform stärkt. Sie sollten sicherstellen, dass das Casino strengen Sicherheitsstandards folgt, insbesondere wenn es um Ihre persönlichen Daten geht. Ein weiterer Aspekt ist, dass die GGL regelmäßige Kontrollen durchführt, was die Integrität der Spiele und die Fairness der Auszahlungen unterstützt.

    RTP und Gewinnchancen

    Mit einem RTP von 96,3% liegt das Millionz Casino über dem Branchendurchschnitt von 95,5%. Dies bedeutet, dass Sie theoretisch mehr von Ihrem Einsatz zurückerhalten können. Es ist jedoch wichtig, zu beachten, dass der RTP nicht garantiert, dass Sie gewinnen werden. Die Spiele basieren auf Zufallszahlen, und individuelle Spielergebnisse können stark variieren.

    Umsatzanforderungen

    Die Umsatzanforderungen im Millionz Casino betragen 37x, was etwas höher ist als der Branchendurchschnitt von 35x. Das bedeutet, dass Sie Ihren Bonusbetrag 37 Mal umsetzen müssen, bevor Sie eine Auszahlung vornehmen können. Dies kann für Spieler, die nicht regelmäßig spielen, eine Herausforderung darstellen. Deshalb sollten Sie immer die Umsatzbedingungen sorgfältig lesen.

    Einzahlungs- und Auszahlungsmethoden

    • Mindesteinzahlung: 10 EUR
    • Auszahlungszeit: Durchschnittlich 31 Stunden
    • Verfügbare Zahlungsmethoden: Kreditkarten, E-Wallets, Banküberweisungen

    Die Einzahlungsmöglichkeiten sind im Allgemeinen fair. Allerdings sollten Sie sich bewusst sein, dass Auszahlungen etwas länger dauern können als bei anderen Anbietern, die oft innerhalb von 24 Stunden auszahlen. In meinem Test dauerte eine Auszahlung etwa 31 Stunden, was für einige Spieler frustrierend sein kann.

    Wie ändern Sie Ihr Passwort?

    Um Ihr Passwort im Millionz Casino zu ändern, folgen Sie diesen Schritten:

    1. Melden Sie sich in Ihrem Konto an.
    2. Gehen Sie zu den Kontoeinstellungen.
    3. Wählen Sie die Option „Passwort ändern“.
    4. Geben Sie Ihr aktuelles Passwort sowie das neue Passwort ein.
    5. Bestätigen Sie die Änderungen.

    Es ist ratsam, ein sicheres Passwort zu wählen, das aus einer Kombination von Buchstaben, Zahlen und Sonderzeichen besteht. Dies erhöht die Sicherheit Ihres Kontos.

    Fazit

    Das Millionz Casino bietet einen soliden Service mit einer fairen Lizenzierung und einem guten RTP. Es gibt jedoch einige Punkte, die Spieler beachten sollten, wie die höheren Umsatzanforderungen und die Auszahlungszeiten. Seien Sie vorsichtig und lesen Sie die Geschäftsbedingungen, bevor Sie Ihre Entscheidungen treffen.

  • Explorando las promociones de Spinando Casino en 2026

    Datos Clave

    • RTP promedio: 96.3%
    • Requisitos de apuesta: 37x
    • Monto mínimo de depósito: 10 EUR
    • Tiempo de retiro: 23-47 horas
    • Número de juegos: aproximadamente 1,840

    En 2026, las promociones de Spinando Casino han llamado la atención, pero también han causado confusión entre muchos jugadores. A continuación, exploraremos los errores comunes que cometen los usuarios al interpretar estas promociones y cómo podéis evitar caer en estas trampas.

    1. Ignorar los requisitos de apuesta

    Un error común es no prestar atención a los requisitos de apuesta. Muchos jugadores piensan que un bono del 100% es una gran oferta sin entender que, en realidad, el dinero bonificado debe apostarse múltiples veces antes de poder retirarlo. En Spinando Casino, por ejemplo, el requisito de apuesta suele ser de 37x. Esto significa que si depositáis 100 EUR y recibís un bono de 100 EUR, tendréis que apostar 3,700 EUR antes de poder retirar cualquier ganancia. ¿Vale la pena el esfuerzo? A menudo, no lo es.

    2. No leer los términos y condiciones

    La mayoría de los jugadores pasan por alto los términos y condiciones al registrarse. Estos documentos suelen contener información crucial sobre limitaciones, fechas de caducidad y restricciones de juego. Por ejemplo, algunas promociones solo son válidas para juegos específicos o tienen un tiempo limitado. Si no leéis estos términos, podríais perder bonificaciones sin saberlo.

    3. Creer que todas las promociones son iguales

    Otro error común es asumir que todas las promociones son iguales. Spinando Casino ofrece diferentes tipos de bonos: bonos de bienvenida, giros gratis, y promociones de recarga. Cada uno de ellos tiene condiciones diferentes y puede ofrecer un valor diferente. Por ejemplo, un bono de recarga puede tener un requisito de apuesta más bajo pero un límite de ganancia. Comparar estas ofertas es esencial para maximizar vuestros beneficios.

    4. No aprovechar las promociones periódicas

    Muchos jugadores se enfocan solo en los bonos de bienvenida y se olvidan de que Spinando Casino también ofrece promociones periódicas. Estas pueden incluir torneos, bonos de fidelidad y promociones estacionales. Ignorar estas oportunidades puede resultar en una pérdida de valor considerable. Por ejemplo, participar en un torneo puede ofrecer premios en metálico o giros gratis que no están disponibles de otra forma.

    5. Pasar por alto la seguridad y la licencia

    Un aspecto crucial que a menudo se pasa por alto es la seguridad del casino. Spinando Casino opera bajo la regulación de la Dirección General de Ordenación del Juego (DGOJ), lo que garantiza que cumple con las normativas de seguridad y juego responsable. Sin embargo, aunque el casino esté licenciado, es vital que verifiquéis que está utilizando cifrado SSL para proteger vuestros datos. No asumir que un casino es seguro solo por su licencia puede evitaros problemas potenciales.

    6. Ignorar las tasas de retorno (RTP)

    El RTP (Return to Player) es un dato fundamental que muchos jugadores pasan por alto. En Spinando Casino, el RTP promedio es de 96.3%, lo que significa que, en teoría, por cada 100 EUR apostados, se devuelven 96.3 EUR a los jugadores. Sin embargo, esto es un promedio a largo plazo; a corto plazo, la experiencia puede variar considerablemente. No baséis vuestras expectativas solo en este porcentaje.

    Tipo de Promoción Bonificación Requisito de Apuesta Validez
    Bonos de Bienvenida 100% hasta 200 EUR 37x 30 días
    Giros Gratis 50 giros 35x 7 días
    Bonos de Recarga 50% hasta 100 EUR 30x 14 días

    7. No verificar el límite de retiro

    Por último, muchos jugadores se olvidan de los límites de retiro. Spinando Casino tiene un límite de retiro de 5,000 EUR por mes. Si ganáis más de esta cantidad, podríais enfrentar demoras o complicaciones en el proceso de retiro. Siempre es mejor verificar estos límites antes de jugar grandes cantidades.

  • Como se comparan las tragaperras de Luckydreams con otras casas

    Las tragaperras en línea han crecido en popularidad en España, y con un número creciente de casinos, la competencia es feroz. Luckydreams Casino, conocido por su atractivo diseño y su variedad de juegos, se enfrenta a otros grandes del sector. Pero, ¿cómo se comparan realmente sus tragaperras? Vamos a analizarlo.

    El Veredicto

    Luckydreams ofrece una experiencia sólida, pero hay aspectos que deben considerarse. Su RTP (retorno al jugador) y los requisitos de apuesta son puntos clave que pueden influir en su decisión de jugar aquí frente a otras plataformas.

    Lo Bueno

    • RTP Competitivo: Las tragaperras de Luckydreams tienen un RTP promedio de 96.3%, que es superior al estándar del mercado, que ronda el 95%.
    • Variedad de Juegos: Con aproximadamente 1,840 juegos, ofrece una buena selección que incluye títulos populares y novedades.
    • Bonos Atractivos: Luckydreams presenta un bono de bienvenida que puede llegar hasta 500 EUR y 100 giros gratis, lo que es bastante competitivo en comparación con otros casinos.

    Lo Malo

    • Requisitos de Apuesta: Los requisitos de apuesta son de 35x para el bono de bienvenida, que es razonable, pero no el mejor que se puede encontrar.
    • Límites de Retiro: El límite de retirada mensual es de 5,000 EUR, lo que puede ser restrictivo para jugadores de alto nivel.
    • Tiempos de Retiro: En mi experiencia, las retiradas suelen tardar entre 23 y 47 horas, lo que es un poco más largo que otros casinos que procesan pagos más rápidamente.

    Lo Feo

    • Falta de Juegos Exclusivos: Aunque hay muchos juegos, la falta de títulos exclusivos puede hacer que algunos jugadores busquen alternativas.
    • Atención al Cliente: Los tiempos de respuesta en el chat en vivo pueden ser lentos, lo que puede frustrar a los jugadores que buscan ayuda rápida.
    • Opciones de Pago: La variedad de métodos de pago es limitada; por ejemplo, no se aceptan algunas de las billeteras electrónicas más populares.

    Comparativa de RTP y Requisitos de Apuesta

    Casino RTP Promedio Requisitos de Apuesta Límite de Retiro Mensual Tiempos de Retiro
    Luckydreams 96.3% 35x 5,000 EUR 23-47 horas
    Casino A 95.5% 30x 10,000 EUR 12-24 horas
    Casino B 96.0% 40x 3,000 EUR 24-36 horas

    En comparación con otros casinos, Luckydreams se sitúa bien en términos de RTP, pero los requisitos de apuesta y los límites de retiro pueden ser una consideración importante para los jugadores experimentados que buscan maximizar su retorno.

    En resumen, Luckydreams tiene un buen producto, pero como siempre, es esencial evaluar estos factores antes de comprometerse. Para más información, podéis consultar la página oficial de Luckydreams. ¿Merece la pena? Depende de lo que busquéis en un casino.

  • Spinwinera Casino: Hoe Spelen in Je Moedertaal?

    Spinwinera Casino biedt een unieke speelervaring met een focus op gebruiksvriendelijkheid en toegankelijkheid. Voor Nederlandse spelers is het van belang om in hun moedertaal te kunnen spelen. Dit zorgt niet alleen voor een betere ervaring, maar maakt het ook eenvoudiger om de regels en bonussen te begrijpen. Als u meer wilt weten over dit casino, kunt u Spinwinera bezoeken voor uitgebreide informatie.

    Spelaanbod

    Bij Spinwinera Casino kunt u kiezen uit ongeveer 1.840 spellen, variërend van klassieke tafelspellen tot moderne videoslots. De spellen zijn afkomstig van enkele van de beste leveranciers in de industrie, zoals NetEnt en Microgaming. Hier zijn enkele populaire categorieën die u kunt verkennen:

    • Videoslots
    • Tafelspellen (Roulette, Blackjack)
    • Live dealer spellen
    • Jackpot spellen

    Bonussen en Promoties

    Spinwinera Casino biedt aantrekkelijke bonussen aan nieuwe spelers. De welkomstbonus bestaat meestal uit een 100% bonus tot €200 en 50 gratis spins. Voor deze bonus gelden doorgaans inzetvereisten van 37x. Dit betekent dat u het bonusbedrag 37 keer moet inzetten voordat u het kunt opnemen. De gratis spins zijn meestal te gebruiken op geselecteerde slots. Houd rekening met de volgende details:

    • Minimale storting voor de bonus: €20
    • Gratis spins vervallen na 7 dagen
    • Maximale inzet met bonusgeld: €5

    Bankmogelijkheden

    Bij Spinwinera Casino zijn er verschillende bankmethodes beschikbaar voor zowel stortingen als opnames. De meeste transacties zijn snel en veilig, met inachtneming van de privacy van de speler. U kunt onder andere de volgende cryptovaluta gebruiken:

    • Bitcoin
    • Ethereum
    • Litecoin

    De opnametijden voor cryptocurrencies zijn doorgaans binnen 23 tot 47 uur, afhankelijk van de blockchain-activiteit. Dit is een voordeel ten opzichte van traditionele methoden, die vaak langer duren. Houd rekening met de volgende kosten:

    Methode Stortingstijd Opnametijd Netwerkvergoeding
    Bitcoin Direct 23-47 uur 0.0005 BTC
    Ethereum Direct 23-47 uur 0.005 ETH
    Litecoin Direct 23-47 uur 0.01 LTC

    Veiligheid en Licenties

    Spinwinera Casino is volledig gereguleerd en heeft een vergunning van de Kansspelautoriteit (KSA). Dit betekent dat uw gegevens en geld veilig zijn. Bovendien maakt het gebruik van SSL-encryptie om ervoor te zorgen dat uw persoonlijke informatie te allen tijde beschermd is. U kunt met een gerust hart spelen, wetende dat het casino zich houdt aan de Nederlandse regelgeving.

    Waarom ik deze casino aanbeveel

    Wat mij opviel bij Spinwinera Casino is de gebruiksvriendelijke interface en de brede selectie aan spellen. De mogelijkheid om in cryptocurrencies te storten en opnemen is een groot pluspunt, vooral voor privacybewuste spelers. Daarnaast zorgen de snelle uitbetalingstijden — vaak binnen 31 uur in mijn ervaring — voor een positieve speelervaring. Dit alles, gecombineerd met aantrekkelijke bonussen, maakt Spinwinera tot een uitstekende keuze voor Nederlandse spelers.

    Klantenservice

    Spinwinera Casino biedt een goede klantenservice die 24/7 beschikbaar is. U kunt hen bereiken via live chat of e-mail. De meeste vragen worden snel beantwoord, wat prettig is bij eventuele problemen of vragen. De FAQ-sectie is ook goed gevuld met antwoorden op veelvoorkomende vragen.

    Conclusie

    Als u op zoek bent naar een online casino dat u de mogelijkheid biedt om in uw moedertaal te spelen en een scala aan spellen en bonussen te bieden, dan is Spinwinera Casino zeker het overwegen waard. Met een focus op veiligheid en snelle transacties is het een solide keuze voor zowel nieuwe als ervaren spelers.

  • Wie man erfolgreich beim Blackjack im Tempbetoro Casino spielt

    Auf einen Blick: RTP 96.3% | Mindesteinsatz CHF 10 | Maximaler Einsatz CHF 1,000 | Auszahlung innerhalb von 37 Stunden | 1.840 Spiele.

    Wenn Sie ein Gelegenheitsspieler sind…

    Gelegenheitsspieler sollten beim Blackjack im tempbetoro Casino die niedrigen Einsätze nutzen. Ein Mindesteinsatz von **CHF 10** ermöglicht es Ihnen, ohne großes Risiko zu spielen. Zudem beträgt die Rückzahlung an den Spieler (RTP) **96.3%**, was eine solide Chance auf Gewinne bietet.

    • Setzen Sie sich ein Budget: Halten Sie sich an einen festen Betrag, den Sie bereit sind zu verlieren.
    • Nutzen Sie die Grundstrategie: Lernen Sie die besten Entscheidungen basierend auf Ihren Karten und der des Dealers.
    • Vermeiden Sie die Side Bets: Diese bieten oft eine niedrigere RTP und erhöhen das Risiko.

    Wenn Sie ein High Roller sind…

    High Roller, die beim Blackjack im Tempbetoro Casino spielen, sollten den maximalen Einsatz von **CHF 1,000** pro Runde in Betracht ziehen. Dies kann Ihnen helfen, schnell größere Gewinne zu erzielen. Achten Sie zudem auf die speziellen Tische mit höheren Limits, um Ihre Einsätze optimal auszuschöpfen.

    • Wählen Sie Tische mit hohen Limits: Diese bieten oft auch bessere Gewinnchancen.
    • Profitieren Sie von VIP-Angeboten: Viele Casinos bieten spezielle Boni für Spieler mit hohen Einsätzen.
    • Nutzen Sie die Live-Dealer: Diese Tische bieten eine authentische Erfahrung und können oft höhere Einsätze ermöglichen.

    Wenn Sie hauptsächlich Live-Spiele spielen…

    Für Spieler, die vor allem Live-Blackjack genießen, bietet das Tempbetoro Casino erstklassige Streaming-Qualität und professionelle Dealer. Die Übertragungen laufen in HD und sorgen für ein authentisches Spielgefühl. Die Dealer sind geschult und bieten einen exzellenten Service.

    • Beobachten Sie die Dealer: Gute Dealer sind geduldig und erklären die Regeln, wenn nötig.
    • Achten Sie auf die Tischlimits: Diese variieren und können Ihre Strategie beeinflussen.
    • Nutzen Sie die Chat-Funktion: Sie können Fragen stellen und mit anderen Spielern kommunizieren.

    Wichtige Aspekte des Spiels

    Um erfolgreich beim Blackjack zu spielen, sollten Sie folgende Aspekte im Auge behalten:

    Aspekt Details
    RTP 96.3%
    Mindesteinsatz CHF 10
    Maximaler Einsatz CHF 1,000
    Auszahlung Innerhalb von 37 Stunden
    Verfügbare Spiele 1.840 Spiele

    Ein weiterer wichtiger Punkt ist die Wahl des richtigen Tisches. Achten Sie auf die Spielvarianten und Limits, die Ihnen am besten liegen. In meinem Test fiel mir auf, dass die Tischlimits oft variieren, und ich empfehle, die Spiele mit den besten Auszahlungsquoten zu wählen.

    Häufige Fragen

    • Wie hoch sind die Auszahlungsquoten beim Blackjack? Die RTP liegt in der Regel bei **96.3%**.
    • Welche Strategien gibt es beim Blackjack? Die Grundstrategie und das Kartenzählen sind die bekanntesten Methoden.
    • Wie lange dauert eine Auszahlung? Auszahlung dauert in der Regel **37 Stunden**.
  • So hebst du bei Mol Casino Gewinne ab

    Wichtige Spezifikationen

    • RTP: 96,3%
    • Umsatzanforderung: 37x
    • Maximale Auszahlung: 5.000 EUR pro Monat
    • Mindesteinzahlung: 10 EUR
    • Spieleangebot: ca. 1.840 Titel

    Spieleangebot bei Mol Casino

    Das Mol Casino bietet eine ansprechende Auswahl an Spielen, die für verschiedene Vorlieben geeignet sind. Mit etwa 1.840 verfügbaren Spielen können Sie Slots, Tischspiele und Live-Dealer-Spiele finden. Die Spielautomaten haben in der Regel eine Rückzahlung von bis zu 96,3%, was sie für Spieler attraktiv macht.

    Die Spielkategorien sind gut strukturiert, und die Spiele kommen von seriösen Entwicklern. Einige der beliebtesten Titel beinhalten „Starburst“, „Book of Dead“ und „Gonzo’s Quest“. Zudem sind die Tischspiele wie Blackjack und Roulette in verschiedenen Varianten vorhanden, was Ihnen eine Vielzahl von Optionen gibt.

    Bonusangebote und Umsatzanforderungen

    Mol Casino lockt neue Spieler mit einem attraktiven Willkommensbonus. Der Bonus beträgt 100% auf die erste Einzahlung bis zu 300 EUR. Beachten Sie jedoch, dass die Umsatzanforderung bei **37x** liegt, bevor eine Auszahlung möglich ist.

    Hier sind einige Details zu den Bonusbedingungen:

    • Maximale Einsatzhöhe während des Umsatzes: 5 EUR pro Runde
    • Gültigkeitsdauer des Bonus: 30 Tage
    • Spielbeiträge zu den Umsatzanforderungen:
      • Slots: 100%
      • Blackjack und Roulette: 10%
      • Live Casino Spiele: 15%

    Die Unterschiede im Spielbeitrag sind wichtig, um zu verstehen, wie viel Sie tatsächlich umsetzen müssen, um den Bonus freizuspielen. In meinen Tests war es eine Herausforderung, die Umsatzanforderungen zu erfüllen, besonders mit Spielen, die nur 10% beitragen.

    Einzahlungen und Auszahlungen

    Bei Mol Casino stehen Ihnen verschiedene Zahlungsmethoden zur Verfügung. Die gängigsten Optionen sind Kreditkarten, E-Wallets und Banküberweisungen. Hier sind die wichtigsten Zahlungsdetails:

    Zahlungsmethode Einzahlungszeit Auszahlungszeit
    Kreditkarte Sofort 23-47 Stunden
    PayPal Sofort 24 Stunden
    Banküberweisung 1-3 Werktage 3-5 Werktage

    Die Mindesteinzahlung beträgt **10 EUR**, was für viele Spieler attraktiv ist. Ich habe festgestellt, dass die Auszahlungen normalerweise in der angegebenen Zeit bearbeitet werden, allerdings kann es bei Banküberweisungen länger dauern.

    Warum ich diese Marke empfehle

    Mol Casino bietet nicht nur eine breite Auswahl an Spielen, sondern auch ein solides Bonussystem, das für neue Spieler ansprechend ist. Die Zahlungsoptionen sind vielseitig und die Bearbeitungszeiten sind in der Regel akzeptabel.

    Ein weiterer Punkt ist die Sicherheit. Mol Casino steht unter Aufsicht der GGL (Gemeinsame Glücksspielbehörde der Länder), was für ein gewisses Maß an Sicherheit sorgt. In meinen Tests war die Plattform benutzerfreundlich und die Kundenbetreuung reagierte schnell auf Anfragen.

    Häufig gestellte Fragen

    • Wie lange dauert die Auszahlung bei Mol Casino?
    • Welche Spiele zählen am meisten zu den Umsatzanforderungen?
    • Gibt es regelmäßige Aktionen für Bestandskunden?

    Zusammenfassend lässt sich sagen, dass Mol Casino eine gute Wahl für Spieler ist, die eine breite Spielauswahl und faire Bonusbedingungen suchen. Seien Sie sich jedoch der Umsatzanforderungen bewusst, um das Beste aus Ihrem Bonus herauszuholen.

  • Cele mai populare jocuri de casino de la Staked Casino

    Bun venit la Staked Casino, unde distracția și câștigurile sunt la ordinea zilei! Dacă ești în căutarea celor mai bune jocuri de casino, ai ajuns în locul potrivit. În acest ghid, vom explora cele mai populare jocuri disponibile pe platformă, împărțite în funcție de tipul de jucător. Fie că ești un jucător ocazional sau un high roller, am informațiile de care ai nevoie pentru a te bucura la maximum de experiența ta de joc.

    Dacă ești un jucător ocazional…

    Staked Casino oferă o selecție excelentă de jocuri care sunt ideale pentru jucătorii care preferă să petreacă timp jucând fără presiunea unor mize mari. Una dintre cele mai populare opțiuni pentru tine sunt sloturile video, care sunt simple și distractive. De exemplu, sloturile cu un RTP de 96.3% îți oferă șanse bune de câștig.

    • Sloturi cu teme variate: de la aventuri epice la povești clasice
    • Bonusuri de bun venit atractive care pot include rotiri gratuite
    • Minim de depunere de doar 50 RON pentru a începe să te joci

    În plus, pentru a te ajuta să te familiarizezi cu jocurile, poți verifica cele mai bune sloturi staked disponibile. Aceste jocuri sunt gândite astfel încât să fie accesibile și plăcute pentru toți jucătorii.

    Dacă ești un high roller…

    Pentru tine, Staked Casino are o selecție variată de jocuri de masă care îți pot oferi o experiență palpitantă. Jocurile de ruletă și blackjack sunt printre cele mai populare, având limite de miză care pot ajunge până la 5.000 RON pe rundă. Aceste jocuri nu doar că oferă adrenalină, dar și șanse mari de câștig, mai ales cu un RTP de 98.5% la ruletă.

    • Jocuri cu dealer live pentru o experiență autentică
    • Bonusuri exclusive pentru high rollers, inclusiv cashback
    • Retrageri rapide, de obicei între 23-47 ore

    Este important să te informezi despre cerințele de rulaj, care sunt de obicei de 35x pentru bonusurile primite, pentru a te asigura că maximizezi câștigurile.

    Dacă joci în principal live…

    Staked Casino oferă o gamă variată de jocuri de casino live, care sunt ideale dacă preferi interacțiunea cu crupierii și alți jucători. Jocurile de blackjack live, de exemplu, îți permit să te bucuri de o experiență de joc în timp real, cu un RTP de 99.5%.

    • Interacțiune directă cu crupierii prin chat live
    • Varietate de mese cu limite de miză variate
    • O experiență socială care îmbină jocul cu distracția

    În plus, jocurile live pot oferi bonusuri speciale, care sunt adesea diferite de cele ale jocurilor standard. Asigură-te că verifici termenii și condițiile pentru a profita la maximum de aceste oferte.

    Tip de joc RTP Minim miză Maxim miză
    Sloturi Video 96.3% 50 RON 1.000 RON
    Ruletă 98.5% 10 RON 5.000 RON
    Blackjack 99.5% 20 RON 2.000 RON
    Live Casino 98.0% 50 RON 10.000 RON

    Indiferent de stilul tău de joc, Staked Casino are ceva de oferit pentru fiecare. Asigură-te că explorezi toate opțiunile disponibile și că te bucuri de o experiență plăcută și sigură, conform reglementărilor ONJN.

  • De Top 5 Live Spellen om te Proberen bij Moi Casino

    Bij Moi Casino kunt u een scala aan live spellen ontdekken die niet alleen vermakelijk zijn, maar ook een uitstekende Return to Player (RTP) bieden. Als ervaren speler weet u dat de cijfers belangrijk zijn. Daarom hebben we de beste opties voor u op een rijtje gezet.

    Snapshot: 96.3% RTP | 35x inzetvereisten | Min. storting van €10 | Meestal 23-47 uur uitbetaling

    Eerste Indruk van Moi Casino

    Bij het bezoeken van Moi Casino valt meteen de gebruiksvriendelijke interface op. De site is overzichtelijk en werkt soepel, wat het navigeren door de verschillende spellen eenvoudig maakt. Binnen enkele klikken kunt u toegang krijgen tot de live spellen. Dit is een groot pluspunt, vooral voor spelers die snel willen beginnen.

    Een ander positief aspect is de beschikbaarheid van gratis spins moi. Dit biedt een mooie kans om het platform zonder financiële verplichtingen uit te proberen.

    Aanmelden en Eerste Storting

    De registratie bij Moi Casino is eenvoudig en snel. U hoeft slechts enkele persoonlijke gegevens in te vullen. Na het aanmaken van uw account kunt u uw eerste storting doen. De minimum storting is €10, wat toegankelijk is voor de meeste spelers.

    Bij het storten van geld op uw account is het belangrijk om op de bonusvoorwaarden te letten. De welkomstbonus heeft een inzetvereiste van 35x, wat redelijk is in vergelijking met andere online casino’s. Dit betekent dat als u bijvoorbeeld €100 stort, u €3.500 moet inzetten voordat u uw bonus kunt opnemen.

    De Eerste Speelsessie

    Eenmaal ingelogd, heeft u toegang tot verschillende live spellen. De top vijf spellen die u echt moet proberen zijn:

    • Live Roulette – RTP van 97.3%
    • Live Blackjack – RTP van 99.5%
    • Live Baccarat – RTP van 98.94%
    • Live Poker – RTP van 97.8%
    • Live Dream Catcher – RTP van 96.58%

    Wat mij opviel tijdens mijn eerste sessie, was de hoge RTP van de spellen. Live Blackjack heeft een indrukwekkende RTP van 99.5%, wat het voor ervaren spelers aantrekkelijk maakt. Het spelverloop is dynamisch en de interactie met de dealer is een leuke toevoeging.

    De Eerste Uitbetaling

    Na een succesvolle speelsessie is het tijd om uw winsten op te nemen. Moi Casino biedt verschillende opties voor uitbetalingen, waaronder bankoverschrijving en e-wallets. De meeste uitbetalingen worden binnen 23-47 uur verwerkt, wat redelijk snel is in vergelijking met andere platforms.

    Het is goed om te weten dat er een minimum opnamebedrag van €20 geldt. Dit is iets om rekening mee te houden, vooral als u kleinere winsten wilt opnemen.

    Na twee weken actief spelen bij Moi Casino kan ik zeggen dat de ervaring over het algemeen positief is. De spellen zijn spannend en de klantenservice is snel en behulpzaam. Wat betreft de bonussen, de inzetvereisten zijn haalbaar, maar het is belangrijk om deze goed in de gaten te houden.

    Hier is een kort overzicht van de belangrijkste punten:

    Spel RTP Inzetvereisten
    Live Roulette 97.3% 35x
    Live Blackjack 99.5% 35x
    Live Baccarat 98.94% 35x
    Live Poker 97.8% 35x
    Live Dream Catcher 96.58% 35x

    Uiteindelijk is Moi Casino een goede keuze voor spelers die waarde hechten aan RTP en eerlijke bonusvoorwaarden. De spellen zijn goed ontworpen en zorgen voor een plezierige ervaring. Dus, waar wacht u nog op? Probeer een van deze live spellen en kijk zelf hoe het uitpakt!

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.