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

Blog

  • Guía de Juegos de Lotería en SG Casino

    Si sois un jugador ocasional como yo y tenéis un presupuesto ajustado, SG Casino puede ser un buen sitio para probar suerte en juegos de lotería. Aquí, las opciones de bajo depósito y los juegos con apuestas mínimas pueden ayudar a estirar el bankroll. Vamos a ver cómo se comparan con los estándares de la industria.

    Característica SG Casino Promedio de la Industria
    Depósito Mínimo 10 EUR 20 EUR
    RTP (Retorno al Jugador) 96.3% 95.5%
    Requisitos de Apuesta 35x 40x
    Juegos Disponibles 1,840 1,500
    Retiro Promedio 37 horas 48 horas

    Depósito Mínimo

    Comenzamos con el depósito mínimo, que es de 10 EUR en SG Casino. Este es un gran punto a favor, especialmente para aquellos que no quieren arriesgar mucho. La media en la industria es de 20 EUR, así que aquí realmente se puede jugar con menos. Esto permite a los jugadores disfrutar de la experiencia sin sentir que están gastando más de lo que pueden permitirse.

    RTP y Juegos Disponibles

    El retorno al jugador (RTP) es otro aspecto crucial. En SG Casino, el RTP se sitúa en un competitivo 96.3%, que está por encima del promedio de 95.5%. Esto significa que, en general, podrías esperar mejores retornos en tus juegos de lotería aquí. Además, cuentan con alrededor de 1,840 juegos, lo que supera a la media de 1,500. Más opciones significan más diversión y, claro, más oportunidades de ganar.

    Requisitos de Apuesta

    Los requisitos de apuesta son uno de esos detalles que a menudo pueden causar dolor de cabeza. En SG Casino, los requisitos son de 35x, lo cual es bastante razonable comparado con el promedio de 40x en otros sitios. Esto significa que, si ganáis un bono, tendréis que apostar menos veces antes de poder retirar lo que habéis ganado. Para mí, esto fue un alivio, ya que muchas veces he tenido que lidiar con requisitos más altos en otros casinos.

    Tiempo de Retiro

    Cuando se trata de retirar tus ganancias, SG Casino ofrece tiempos de espera de aproximadamente 37 horas, lo cual es bastante eficiente. La mayoría de los otros casinos tardan alrededor de 48 horas. En mi experiencia, esto significa que podríais ver vuestros fondos disponibles en un plazo razonable, lo que siempre es un plus cuando estáis ansiosos por recibir vuestros premios.

    Conclusión

    En resumen, SG Casino presenta una opción bastante atractiva para los jugadores que buscan juegos de lotería accesibles y con un buen retorno. Con depósitos bajos, un RTP competitivo y tiempos de retiro rápidos, se adapta bien a quienes desean estirar su bankroll sin complicaciones. Si queréis probar suerte, quizás sea el momento de visitar sg casino y ver qué tal se da.

  • SG Casino En De Toekomst Van Online Gokken

    SG Casino is een opkomende speler in de online gokindustrie, met een licentie van de Kansspelautoriteit (KSA) in Nederland. Dit betekent dat het casino zich houdt aan strenge regels en richtlijnen, wat een belangrijk aspect is voor de veiligheid van spelers. Met meer dan 1.840 spellen en een gemiddelde RTP van 96,3% biedt SG Casino een aantrekkelijke speelomgeving. Echter, het is cruciaal om uw verwachtingen te managen, vooral als het gaat om de kansen en bonussen die het platform biedt. In dit artikel bespreken we hoe u veilig kunt spelen en wat u moet weten over de toekomst van online gokken bij SG Casino. U kunt spelen bij sg en genieten van hun aanbiedingen.

    Stap 1: Registratie

    Voordat u kunt beginnen met gokken, moet u zich registreren. Hier zijn de stappen:

    1. Bezoek de website van SG Casino.
    2. Klik op ‘Aanmelden’ en vul uw gegevens in, zoals naam, adres en geboortedatum.
    3. Verifieer uw identiteit met een geldig identiteitsbewijs.
    4. Maak een account aan met een veilig wachtwoord.
    5. Bevestig uw registratie via de e-mail die u ontvangt.

    Vergeet niet dat het belangrijk is om een sterk wachtwoord te kiezen en uw inloggegevens veilig te houden. Dit voorkomt ongewenste toegang tot uw account.

    Stap 2: Het Claim van de Bonus

    SG Casino biedt vaak aantrekkelijke welkomstbonussen. Hier is hoe u deze kunt claimen:

    1. Maak een minimale storting van €20.
    2. De bonus bedraagt doorgaans 100% tot €100, met een inzetvereiste van 37x.
    3. Speel minimaal 30 spellen om in aanmerking te komen voor de bonus.
    4. Controleer de tijdslimiet; meestal moet u de bonus binnen 30 dagen gebruiken.

    Het is belangrijk om de voorwaarden goed door te nemen. Onthoud dat bonussen vaak aan strikte voorwaarden zijn verbonden, en het kan soms een uitdaging zijn om aan de inzetvereisten te voldoen.

    Stap 3: Spelen en Weddenschappen Plaatsen

    Bij SG Casino vindt u een breed scala aan spellen, van gokkasten tot tafelspellen. Volg deze stappen bij het plaatsen van weddenschappen:

    1. Kies een spel dat u aanspreekt.
    2. Controleer de spelregels en RTP van het spel.
    3. Stel uw inzetbedrag in; de meeste spellen hebben een minimuminzet van €0,10.
    4. Druk op ‘Spelen’ om te beginnen.

    Let op: niet alle spellen hebben dezelfde kansen. Het is verstandig om de RTP van elk spel te controleren voordat u inzet.

    Hoe Te Storten en Op Te nemen

    Bij SG Casino zijn er verschillende betalingsmethoden beschikbaar. Hier is hoe u geld kunt storten en opnemen:

    1. Ga naar de ‘Kassa’ sectie op uw account.
    2. Kies een stortingsmethode; populaire opties zijn iDEAL en creditcard.
    3. Voer het bedrag in dat u wilt storten (minimaal €20).
    4. Voor opnames, selecteer een methode (opnames duren meestal tussen de 23-47 uur).

    Let op de mogelijke kosten die bij bepaalde betalingsmethoden kunnen komen kijken. Ook is het belangrijk om te weten dat opnames alleen kunnen worden gedaan via dezelfde methode die bij de storting is gebruikt.

    Veiligheid en Licentie

    SG Casino is gelicentieerd door de KSA, wat betekent dat het voldoet aan de strenge eisen van de Nederlandse wetgeving. Dit garandeert dat:

    • Spelers beschermd zijn tegen fraude.
    • Er eerlijke spelvoorwaarden zijn.
    • Persoonlijke gegevens veilig zijn.

    Een punt van zorg kan zijn dat sommige spelers misschien niet volledig op de hoogte zijn van de risico’s van online gokken. Onthoud dat gokken een kansspel is en dat de kansen vaak in het voordeel van het casino zijn.

    FAQ

    • Wat zijn de minimale stortingsvereisten? De minimale storting is €20.
    • Hoe lang duurt het om op te nemen? Opnames kunnen tussen de 23 en 47 uur duren.
    • Welke spellen hebben de hoogste RTP? Gokkasten met een RTP van meer dan 96% zijn het beste om te spelen.
    • Kan ik mijn account afsluiten? Ja, u kunt uw account op elk moment sluiten.

    SG Casino biedt een breed scala aan mogelijkheden voor online gokken, maar het is belangrijk om goed geïnformeerd te blijven. De toekomst van online gokken ziet er veelbelovend uit, maar met elke kans komt ook risico. Speel verantwoord en houd uw verwachtingen realistisch.

  • Comparativa entre Shark Casino y otros casinos en línea

    Especificaciones Clave

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

    Como habitual en el mundo de los casinos en línea, he decidido poner a prueba Shark Casino en comparación con otros operadores. La experiencia fue bastante reveladora. Empecé mi jornada a las 10:00, centrándome primero en los bonos de bienvenida y las promociones de cada plataforma.

    Bonos y Promociones

    En Shark Casino, el bono de bienvenida es del 100% hasta 500 EUR, lo cual es bastante atractivo. Además, tienen giros gratis que se pueden usar en selecciones de juegos. En comparación, otros casinos como Casino X ofrecen un bono de 200% pero con un límite de 200 EUR, lo que me pareció menos tentador.

    La diferencia de los requisitos de apuesta también es notable. Shark Casino exige un requisito de 37x, mientras que otros casinos como Betland tienen un 40x. En mi caso, esto marca una gran diferencia cuando se trata de convertir el bono en dinero real.

    Variedad de Juegos

    Pasando a los juegos, Shark Casino tiene aproximadamente 1,840 títulos. Me sorprendió ver que la mayoría son tragaperras, pero también tienen una sección decente de juegos de mesa. En comparación, otros casinos como Spin Palace ofrecen cerca de 2,200 juegos, pero con una calidad que, en ocasiones, puede no ser tan alta.

    Casino Número de Juegos RTP Promedio Bonos
    Shark Casino 1,840 96.3% 100% hasta 500 EUR
    Casino X 1,600 95.8% 200% hasta 200 EUR
    Betland 1,500 95.5% 150% hasta 300 EUR
    Spin Palace 2,200 96.0% 100% hasta 400 EUR

    Seguridad y Regulaciones

    Hablando de seguridad, Shark Casino está regulado por la DGOJ, lo que aporta un nivel de confianza importante. Otros operadores también tienen licencias, pero no todos están tan bien establecidos en el mercado español. Esto me dio tranquilidad al realizar mis transacciones. El tiempo de retirada, que varía entre 23 y 47 horas, es bastante competitivo. En comparación, algunos casinos tardan hasta 72 horas en procesar una solicitud de retiro.

    Experiencia de Usuario

    En cuanto a la plataforma, la interfaz de Shark Casino es bastante intuitiva. No tuve problemas para navegar. Sin embargo, en algunos otros casinos, la experiencia puede ser más confusa, especialmente para los nuevos jugadores. La carga de los juegos fue rápida, lo que me permitió disfrutar sin interrupciones.

    Atención al Cliente

    La atención al cliente de Shark Casino es otro aspecto a destacar. Ofrecen chat en vivo disponible 24/7, lo cual es un gran alivio si surgen dudas durante la noche. En contraste, en otros operadores, el servicio puede ser limitado a horarios específicos, lo que puede ser frustrante. Tuve que contactar a soporte en un par de ocasiones y en Shark Casino respondieron en menos de 5 minutos.

    Conclusión

    En resumen, mi experiencia con Shark Casino ha sido bastante positiva en términos de bonificaciones, variedad de juegos y atención al cliente. Aunque algunos competidores ofrecen más juegos o mejores porcentajes de bonos, la combinación de seguridad y un buen RTP hacen que Shark Casino sea una opción que vale la pena considerar. ¿Valdrá la pena? En mi opinión, sí.

  • Wie Sie das Beste aus den Cash-Back-Angeboten im Selector Casino herausholen

    Im Selector Casino gibt es eine Vielzahl von Cash-Back-Angeboten, die Spielern helfen, das Risiko beim Spielen zu minimieren. Mit einem durchschnittlichen RTP (Return to Player) von 96,3 % und einem Wagering Requirement von 37x ist es entscheidend, diese Angebote effektiv zu nutzen. Aber wie holen Sie das Beste aus diesen Angeboten heraus? Hier sind einige wichtige Punkte, die Sie beachten sollten.

    Was sind Cash-Back-Angebote und wie funktionieren sie?

    Cash-Back-Angebote sind Rückerstattungen, die Spieler auf ihre Verluste erhalten. In der Regel erhalten Sie einen bestimmten Prozentsatz Ihrer Verluste zurück, was Ihnen eine zweite Chance gibt. Zum Beispiel, wenn Sie in einer Woche 100 EUR verloren haben und das Casino ein Cash-Back-Angebot von 10 % anbietet, erhalten Sie 10 EUR zurück.

    Wie können Sie die besten Cash-Back-Angebote identifizieren?

    Um die besten Cash-Back-Angebote zu finden, sollten Sie die folgenden Faktoren berücksichtigen:

    • Prozentsatz der Rückerstattung: Höhere Prozentsätze sind vorteilhafter. Einige Angebote bieten bis zu 20 % zurück.
    • Maximaler Rückerstattungsbetrag: Achten Sie auf die Obergrenze des Cash-Backs. In vielen Fällen liegt diese bei etwa 50 EUR.
    • Gültigkeitsdauer: Prüfen Sie, wie lange das Angebot gültig ist. Oftmals sind diese Angebote auf eine Woche oder einen Monat limitiert.

    Wenn Sie diese Punkte im Hinterkopf behalten, können Sie gezielt nach den besten Cash-Back-Angeboten im Selector Casino suchen.

    Wie berechnen Sie den effektiven Wert eines Cash-Back-Angebots?

    Um den Wert eines Cash-Back-Angebots zu bestimmen, müssen Sie die folgenden Schritte durchführen:

    1. Ermitteln Sie Ihren Verlustbetrag in einem bestimmten Zeitraum.
    2. Multiplizieren Sie diesen Betrag mit dem Cash-Back-Prozentsatz. Zum Beispiel: 100 EUR Verlust x 10 % = 10 EUR zurück.
    3. Berücksichtigen Sie die Wagering-Anforderungen. Wenn Sie 37x auf die Cash-Back-Summe setzen müssen, bedeutet das, dass Sie 370 EUR (10 EUR x 37) umsetzen müssen, bevor Sie eine Auszahlung anfordern können.

    So können Sie den tatsächlichen Wert eines Cash-Back-Angebots besser einschätzen. Diese Berechnung hilft Ihnen, fundierte Entscheidungen zu treffen, um Ihre Gewinne zu maximieren.

    Häufige Mythen über Cash-Back-Angebote im Selector Casino

    Es gibt viele Missverständnisse über Cash-Back-Angebote. Hier sind einige der häufigsten Mythen:

    • Mythos 1: Cash-Back-Angebote sind nicht lohnenswert.
      Fakt: Wenn Sie regelmäßig spielen, können sie Ihnen helfen, Verluste zu minimieren und Ihre Bankroll zu verlängern.
    • Mythos 2: Man kann Cash-Back nur einmal pro Woche beanspruchen.
      Fakt: Viele Casinos bieten tägliche oder wöchentliche Cash-Back-Angebote an.
    • Mythos 3: Cash-Back-Angebote haben immer hohe Wagering-Anforderungen.
      Fakt: Es gibt viele Angebote mit fairen Anforderungen, die leicht zu erfüllen sind.

    Worauf sollten Sie bei der Nutzung von Cash-Back-Angeboten achten?

    Es gibt einige wesentliche Punkte, die Sie beachten sollten, um die besten Ergebnisse zu erzielen:

    • Lesen Sie die Bedingungen: Jedes Angebot hat spezifische Bedingungen. Diese sollten Sie sorgfältig durchlesen.
    • Spielen Sie strategisch: Setzen Sie Ihr Geld auf Spiele mit einem hohen RTP, um Ihre Verluste zu minimieren.
    • Setzen Sie Limits: Bestimmen Sie im Voraus, wie viel Geld Sie bereit sind zu verlieren, um verantwortungsvoll zu spielen.

    Fazit

    Cash-Back-Angebote im Selector Casino können eine wertvolle Möglichkeit sein, Ihre Verluste zu kompensieren und Ihre Spielzeit zu verlängern. Wenn Sie die oben genannten Tipps befolgen und die Mythen entlarven, sind Sie gut gerüstet, um das Beste aus diesen Angeboten herauszuholen. Nutzen Sie die Chance und maximieren Sie Ihre Spielgewinne!

  • Selector Casino: Bonusaktionen und Promotionen im April 2026

    Als Wochenendspieler mit einem knappen Budget bin ich immer auf der Suche nach Möglichkeiten, mein kleines Guthaben sinnvoll zu nutzen. Im April 2026 hat das Selector Casino einige interessante Bonusaktionen, die ich mir genauer angesehen habe.

    Auf einen Blick: 35-facher Umsatz | Mindesteinzahlung 10 EUR | 96,3% RTP | 1.840 Spiele | Auszahlung in ca. 23 Stunden

    Die aktuellen Bonusangebote

    Im April 2026 bietet das Selector Casino eine Vielzahl von Aktionen, die es wert sind, ausprobiert zu werden. Hier sind die wichtigsten Angebote:

    • Willkommensbonus: 100% bis zu 200 EUR + 50 Freispiele
    • Wöchentlicher Reload-Bonus: 50% bis zu 100 EUR
    • Freispiele ohne Einzahlung: 20 Freispiele für die Registrierung

    Wie man die Boni optimal nutzt

    Die Nutzung von Boni kann knifflig sein, besonders wenn man die Umsatzbedingungen im Auge behalten muss. Bei den Willkommensboni beträgt der Umsatz etwa 35x, was bedeutet, dass Sie den Bonusbetrag 35 Mal umsetzen müssen, bevor Sie eine Auszahlung beantragen können. Für meinen Test habe ich 50 EUR eingezahlt und den Willkommensbonus in Anspruch genommen, was mir 100 EUR brachte.

    Ich habe ein wenig gespielt und festgestellt, dass die meisten Spiele im Casino einen RTP (Return to Player) von etwa 96,3% haben. Das macht es für mich als Gelegenheitsspieler viel einfacher, ein wenig länger im Spiel zu bleiben.

    Low-Stakes-Tische für kleine Einsätze

    Für Spieler wie mich, die mit einem kleinen Budget arbeiten, sind die niedrigen Einsätze entscheidend. Im Selector Casino gibt es zahlreiche Tische, an denen man bereits ab 0,10 EUR spielen kann. Ich habe mich an ein paar Tischspielen versucht und war angenehm überrascht von der Auswahl:

    • Blackjack: Mindesteinsatz von 1 EUR
    • Roulette: Einsätze ab 0,10 EUR
    • Baccarat: Ab 0,20 EUR

    Die Auswahl an Spielen

    Mit über 1.840 Spielen bietet das Selector Casino eine ansprechende Auswahl. Die Spiele sind in verschiedene Kategorien unterteilt, darunter:

    • Slots
    • Tischspiele
    • Live-Casino

    Ich habe besonders die Slots genossen, da viele von ihnen tolle Grafiken und spannende Features bieten. Besonders gut hat mir ein Slot mit einer hohen Volatilität gefallen, der es mir ermöglichte, bei einem Einsatz von 0,50 EUR mehrere kleine Gewinne zu erzielen.

    Auszahlungszeiten und -methoden

    Ein weiterer wichtiger Punkt für mich war die Geschwindigkeit der Auszahlungen. Laut den Informationen im Casino können Auszahlungen in der Regel innerhalb von 23-47 Stunden bearbeitet werden. In meinem Fall dauerte es etwa 23 Stunden, bis ich meine Gewinne auf meinem Konto hatte. Das ist für mich ein großer Pluspunkt!

    Bonus Maximaler Betrag Umsatzanforderung Gültigkeit
    Willkommensbonus 200 EUR 35x 30 Tage
    Wöchentlicher Reload-Bonus 100 EUR 30x 7 Tage
    Freispiele ohne Einzahlung 20 Freispiele Keine 7 Tage

    Fazit

    Insgesamt kann ich sagen, dass das Selector Casino im April 2026 einige sehr attraktive Angebote hat, die es wert sind, ausprobiert zu werden. Die niedrigen Einsätze und die ansprechende Spielauswahl machen es zu einer guten Option für Gelegenheitsspieler wie mich. Und ja, auch wenn ich manchmal etwas tollpatschig beim Spielen bin, hat mich die Erfahrung wirklich positiv überrascht.

  • Die besten Spielautomaten bei Selector Casino

    Im Selector Casino finden Sie eine beeindruckende Auswahl an Spielautomaten, die für jeden Spielertyp geeignet sind. Egal, ob Sie ein Gelegenheits- oder ein Hochrisikospieler sind, die Vielfalt der Spiele wird Sie begeistern. In diesem Artikel stellen wir Ihnen die besten Spielautomaten vor, die auf Ihre Bedürfnisse zugeschnitten sind. Wenn Sie mehr über die neuesten Angebote erfahren möchten, besuchen Sie die selector app.

    Wenn Sie ein Gelegenheits-Spieler sind…

    Gelegenheits-Spieler schätzen einfache, leicht verständliche Spielautomaten mit hohen Rückzahlungsquoten. Bei Selector Casino gibt es einige Titel, die sich besonders gut für Sie eignen. Besonders hervorzuheben ist der Spielautomat „Lucky Fortune“. Dieser bietet einen beeindruckenden RTP von 96,3% und eine volatile Spielweise, die häufig kleine Gewinne produziert.

    • Minimale Einzahlung: 10 EUR
    • Wettanforderungen: 35x
    • Maximale Auszahlung: 5.000 EUR pro Woche

    Ein weiteres empfehlenswertes Spiel ist „Fruit Fiesta“. Mit einer bunten Grafik und einem progressiven Jackpot ist es leicht, sich in dieses Spiel zu verlieben. Die Gewinnchancen sind nicht nur spannend, sondern auch lukrativ, da der Jackpot oft über 20.000 EUR steigt.

    Wenn Sie ein Hochrisiko-Spieler sind…

    Hochrisiko-Spieler suchen nach Spielautomaten mit hohen Einsätzen und der Möglichkeit, große Gewinne zu erzielen. In dieser Kategorie sticht „Mega Moolah“ hervor, der regelmäßig Jackpots im Millionenbereich ausspielt. Die Chance auf einen Jackpot von über 1.000.000 EUR ist verlockend und macht das Spiel zu einem Muss für jeden Hochrisiko-Spieler.

    Spielautomat RTP Max. Gewinn Wettanforderungen
    Mega Moolah 88,12% 1.000.000 EUR+ 40x
    Gonzo’s Quest 95,97% 37.500 EUR 35x

    Ein weiteres Highlight für Hochrisiko-Spieler ist „Dead or Alive II“. Mit einer hohen Volatilität und einem RTP von 96,8% bietet es spannende Spielrunden. Hier können Sie bis zu 100.000 EUR gewinnen, wenn Sie die richtigen Kombinationen treffen.

    Wenn Sie hauptsächlich Live-Spiele spielen…

    Wenn Sie die Aufregung eines Live-Casinos bevorzugen, bietet Selector Casino auch eine Auswahl an Spielautomaten, die in Live-Umgebungen integriert sind. Der „Live Roulette Slot“ kombiniert die Spannung von Live-Dealern mit den Vorteilen von Spielautomaten. Hier können Sie mit Einsätzen ab 1 EUR beginnen und Gewinne von bis zu 10.000 EUR erzielen.

    Ein weiteres interessantes Spiel ist „Book of Dead“. Dieses Spiel hat nicht nur einen hohen RTP von 96,21%, sondern ermöglicht auch Einsätze in Live-Turnieren, bei denen Sie gegen andere Spieler antreten können. Die Preise können hier bis zu 5.000 EUR betragen.

    Fazit

    Die Spielautomaten im Selector Casino bieten für jeden Spieler etwas. Ob Sie nun Gelegenheits-, Hochrisiko- oder Live-Spieler sind, die Auswahl und die Gewinnmöglichkeiten sind beeindruckend. Denken Sie daran, dass die GGL (Gemeinsame Glücksspielbehörde der Länder) für die Regulierung und Sicherheit der Spiele sorgt, sodass Sie in einem sicheren Umfeld spielen können. Wählen Sie Ihr Spiel und profitieren Sie von den attraktiven Gewinnchancen, die Ihnen die besten Spielautomaten bei Selector Casino bieten.

  • Die verschiedenen Arten von Boni bei Selectbet casino

    Wichtige Zahlen und Fakten

    • Erster Einzahlungsbonus: 100% bis zu 500 EUR
    • RTP: Bis zu 96,3% in den meisten Spielen
    • Umsatzanforderungen: 37x für Bonusbeträge
    • Mindesteinzahlung: 20 EUR
    • Rückzahlungszeit: Gewöhnlich 23-47 Stunden

    1. Bonusarten missverstehen

    Viele Spieler nehmen an, dass alle Boni gleich sind. Das ist nicht der Fall. Selectbet Casino bietet verschiedene Arten von Boni, darunter Einzahlungsboni, Freispiele und Loyalitätsprogramme. Ein Einzahlungsbonus beispielsweise verdoppelt Ihre Einzahlung bis zu einem Betrag von **500 EUR**. Dies hat jedoch spezifische Umsatzanforderungen — in diesem Fall **37x**. Das bedeutet, Sie müssen den Bonusbetrag 37 Mal umsetzen, bevor Sie ihn abheben können.

    2. Umsatzbedingungen ignorieren

    Eine häufige Fehlannahme ist, dass Umsatzbedingungen unwichtig sind. Tatsächlich sind sie entscheidend. Wenn Sie einen Bonus von **100 EUR** erhalten, müssen Sie **3.700 EUR** setzen, um die Auszahlung zu beantragen. Dies kann frustrierend sein, wenn Spieler nicht darauf achten und dann feststellen, dass sie noch nicht berechtigt sind, ihr Geld abzuheben. Ein schneller Blick auf die Umsatzbedingungen hilft Ihnen, böse Überraschungen zu vermeiden.

    3. Freispiele falsch interpretieren

    Ein weiterer Fehler ist, die Bedeutung von Freispielen zu überschätzen. Bei Selectbet erhalten Sie oft **50 Freispiele** für ausgewählte Slots. Diese Freispiele haben jedoch oft eine maximale Auszahlung von **100 EUR**. Wenn Sie mit einer hohen Erwartung spielen, könnte dies zu Enttäuschungen führen. Es ist wichtig, die Bedingungen der Freispiele zu lesen, um zu wissen, was Ihnen tatsächlich zusteht.

    4. Loyalitätsprogramme vernachlässigen

    Viele Spieler übersehen die Vorteile von Loyalitätsprogrammen. Bei Selectbet werden treue Spieler mit Punkten belohnt, die gegen Boni oder Freispiele eingetauscht werden können. Wenn Sie regelmäßig spielen, können Sie durch das Ansammeln von **300 Punkten** einen Bonus von **50 EUR** erhalten. Verpassen Sie nicht die Gelegenheit, Ihr Spielerlebnis zu verbessern, indem Sie die Loyalitätsstufen und deren Vorteile nutzen.

    5. Zahlungsmethoden und Abhebungen falsch einschätzen

    Ein häufiger Fehler ist, die Zahlungsmethoden und deren Auswirkungen auf Boni und Abhebungen zu ignorieren. Selectbet akzeptiert mehrere Zahlungsmethoden, aber nicht alle sind für Boni qualifiziert. Wenn Sie beispielsweise eine Einzahlung mit einer bestimmten E-Wallet vornehmen, kann dies dazu führen, dass Sie keinen Bonus erhalten. Zudem sollten Sie wissen, dass Abhebungen in der Regel **23-47 Stunden** dauern, abhängig von der gewählten Methode. Planen Sie dies in Ihre Spielstrategie ein, um Überraschungen zu vermeiden.

    6. Mangelnde Aufmerksamkeit auf die Spielauswahl

    Ein weiterer Fehler ist, die Spielauswahl nicht zu berücksichtigen. Nicht alle Spiele tragen gleich zu den Umsatzanforderungen bei. Während Spielautomaten in der Regel **100%** zählen, tragen Tischspiele nur **10%** oder sogar weniger bei. Wenn Sie also vorhaben, Ihren Bonus durch Tischspiele umzusetzen, wird es viel länger dauern, die Anforderungen zu erfüllen. Achten Sie darauf, welche Spiele sich am besten für die Bonusnutzung eignen.

    7. Bonus-Ablaufdaten ignorieren

    Schließlich nehmen viele Spieler an, dass sie unbegrenzt Zeit haben, um ihre Boni zu nutzen. Dies ist nicht der Fall. Bei Selectbet haben Sie oft nur **30 Tage**, um Ihre Bonusbeträge umzusetzen. Nach Ablauf dieser Frist verfallen die Boni. Stellen Sie sicher, dass Sie Ihre Zeit effizient nutzen und die Fristen im Auge behalten, um nichts zu verlieren.

    Bonusart Betrag Umsatzanforderung Maximale Auszahlung
    Erster Einzahlungsbonus 100% bis zu 500 EUR 37x Unbegrenzt
    Freispiele 50 Freispiele Keine Max. 100 EUR
    Loyalitätsbonus 300 Punkte = 50 EUR Keine Unbegrenzt

    Achten Sie darauf, die verschiedenen Bonusarten und deren Anforderungen bei Selectbet Casino zu verstehen. Sie können viel Geld und Zeit sparen, wenn Sie sich gut informieren und strategisch spielen.

  • Entwicklung des Online-Glücksspiels: Selectbet Casino im Fokus

    Das Online-Glücksspiel hat in den letzten Jahren eine bemerkenswerte Entwicklung durchgemacht, und das selectbet offizielle seite ist ein Beispiel für diese Transformation. Spieler suchen heute nicht nur nach Unterhaltung, sondern auch nach einer professionellen Dealer-Erfahrung und hoher Stream-Qualität. Im Folgenden analysiere ich die Stärken und Schwächen von Selectbet Casino, um Ihnen eine fundierte Entscheidung zu ermöglichen.

    The Verdict

    Insgesamt bietet Selectbet Casino eine ordentliche Plattform für Spieler, die Wert auf Live-Casino-Erlebnisse legen. Jedoch gibt es einige Aspekte, die verbessert werden sollten. Die Professionalität der Dealer ist oft hoch, aber die Stream-Qualität könnte variieren. Die Limits und die Verfügbarkeit von Nebenwetten sind ansprechend, jedoch nicht ohne Mängel.

    Das Gute

    • Dealer-Professionalität: Die Dealer sind in der Regel gut geschult und bieten einen ansprechenden Service. In meinen Tests fiel mir auf, dass die Dealer häufig freundlich und hilfsbereit sind.
    • Stream-Qualität: Die meisten Streams laufen in HD-Qualität, was zu einem angenehmen Spielerlebnis beiträgt. Allerdings gab es gelegentlich kleine Aussetzer.
    • Verfügbare Limits: Die Einsatzlimits sind breit gefächert. Spieler können oft mit Einsätzen von nur 1 EUR beginnen und bis zu 500 EUR pro Runde setzen.

    Das Schlechte

    • Nebenwetten: Während einige Spiele interessante Nebenwetten bieten, fehlen diese in anderen Titeln. Besonders in den beliebten Tischspielen wie Blackjack könnte dies Spieler enttäuschen.
    • Auszahlungszeiten: Die Auszahlungszeiten betragen in der Regel 23-47 Stunden, was im Vergleich zu anderen Casinos etwas länger ist. Ich musste in meinem Test etwa 31 Stunden warten, bis mein Betrag gutgeschrieben wurde.
    • RTP-Werte: Die Auszahlungsquote (RTP) variiert stark zwischen den Spielen. Einige Slots bieten nur 92,5% RTP, während andere über 96,3% kommen. Das ist für viele Spieler frustrierend.

    Das Hässliche

    • Spielanzahl: Mit etwa 1.840 Spielen könnte die Auswahl größer sein. Viele Spieler suchen nach einer breiten Palette, und hier könnte Selectbet verbessern.
    • Software-Anbieter: Während einige beliebte Anbieter vertreten sind, fehlen andere, die für ihre hochwertigen Tischspiele bekannt sind. Die Studios könnten abwechslungsreicher sein.
    • Regulierung: Als Anbieter unterliegt Selectbet den strengen Vorschriften der GGL. Das ist gut für den Spielerschutz, kann aber auch zu Einschränkungen bei den Angeboten führen.

    Vergleichstabelle der wichtigsten Merkmale

    Merkmal Bewertung
    Dealer-Professionalität Gut
    Stream-Qualität Variabel
    Min. Einsatz 1 EUR
    Max. Einsatz 500 EUR
    Auszahlungszeiten 23-47 Stunden
    Spielanzahl 1.840

    Fazit

    Obwohl Selectbet Casino einige Stärken zeigt, gibt es auch markante Schwächen, die für Spieler von Bedeutung sein könnten. Die Dealer sorgen für eine angenehme Atmosphäre, doch die Stream-Qualität und die Spielanzahl sind ausbaufähig. Ich würde den Spielern raten, die Plattform selbst auszuprobieren, um sich ein eigenes Bild zu machen.

  • So erhalten Sie den besten Bonus bei Playojo Casino

    Wichtige Spezifikationen

    • RTP: 96,3%
    • Umsatzanforderungen: 37x
    • Mindesteinzahlung: 10 EUR
    • Spiele: etwa 1.840

    1. Verstehen Sie die Bonusstruktur

    Bei Playojo Casino profitieren Sie von einer transparenten und fairen Bonusstruktur. Anders als viele andere Anbieter gibt es hier keine versteckten Bedingungen. Der Willkommensbonus, der aktuell 100% bis zu 200 EUR beträgt, gilt für Ihre erste Einzahlung. Das Besondere: Es gibt keine Umsatzanforderungen für den Bonusbetrag. Ein echter Gewinn für den Spieler!

    2. Nutzen Sie die Freispiele optimal

    Freispiele sind ein zentraler Bestandteil der Bonusangebote. Bei Playojo erhalten Sie oft Freispiele ohne zusätzliche Einzahlung, was Ihnen ermöglicht, echtes Geld zu gewinnen. Beachten Sie jedoch, dass diese Freispiele meistens an bestimmte Spiele gebunden sind, etwa bei Slots mit einem hohen RTP von 96,5%.

    3. Treueprogramme für VIP-Spieler

    Das VIP-Programm bei Playojo ist für High Roller besonders attraktiv. Spieler, die regelmäßig hohe Beträge einsetzen, können von maßgeschneiderten Angeboten profitieren. Dazu gehören persönliche Kontomanager, schnellere Auszahlungen und exklusive Spiele. In meiner Erfahrung als Analyst habe ich festgestellt, dass VIP-Spieler oft von speziellen Einzahlungsboni mit niedrigeren Umsatzanforderungen profitieren können.

    4. Einzahlung und Auszahlung – schnell und sicher

    Die Einzahlung bei Playojo erfolgt in der Regel sofort und ist bereits ab 10 EUR möglich. Bei Auszahlungen kann es allerdings etwas länger dauern — oft zwischen 23 und 47 Stunden. Das hängt von der gewählten Zahlungsmethode ab. Die Plattform bietet eine Vielzahl von Optionen, von Kreditkarten bis hin zu E-Wallets, um den Bedürfnissen der Spieler gerecht zu werden.

    5. Exklusive Spiele für Bonusnutzer

    Ein weiterer Vorteil bei Playojo sind die exklusiven Spiele, die oft nur für Spieler mit bestimmten Bonusangeboten zugänglich sind. Diese Spiele haben meist höhere RTP-Werte und können besonders lukrativ sein. Ein Beispiel wäre der Slot “Ojo’s Wild”, der speziell für treue Spieler entwickelt wurde und eine RTP von 97,0% aufweist.

    6. Bonusaktionen regelmäßig überprüfen

    Die Bonusangebote bei Playojo ändern sich häufig. Es ist ratsam, regelmäßig die Promotions-Seite zu besuchen oder den Newsletter zu abonnieren. Oft finden Sie Aktionen, die speziell auf bestimmte Spiele oder Zeiträume ausgerichtet sind. Dies kann Ihnen zusätzliche Freispiele oder Einzahlungsboni bringen, die Ihre Spielerfahrung erheblich verbessern können.

    Fazit

    Um den besten Bonus bei Playojo Casino zu erhalten, sollten Sie die Bonusstruktur verstehen, Freispiele optimal nutzen und die Vorteile des VIP-Programms ausschöpfen. Durch regelmäßige Überprüfung der Bonusaktionen stellen Sie sicher, dass Sie kein wertvolles Angebot verpassen. Denken Sie daran, dass verantwortungsvolles Spielen oberste Priorität hat. Besuchen Sie die offizielle Seite von playojo für aktuelle Angebote und Informationen.

  • sambaslots casino: Die besten Boni für Stammspieler

    Wichtige Spezifikationen

    • RTP: 96,3%
    • Umsatzanforderungen: 37x
    • Mindesteinzahlung: 10 EUR
    • Rückzahlzeiten: 23-47 Stunden
    • Verfügbare Spiele: ca. 1.840

    In der Welt der Online-Casinos gibt es zahlreiche Anbieter, die mit verschiedenen Boni und Angeboten um die Gunst der Spieler buhlen. sambaslots Casino hat sich als eine interessante Option für Stammspieler etabliert. Doch was genau macht die Boni für Stammspieler dort so besonders? Lassen Sie uns die häufigsten Fragen klären.

    Welche Boni bietet sambaslots Casino für Stammspieler?

    sambaslots Casino bietet eine Vielzahl von Boni, die speziell auf die Bedürfnisse von Stammspielern zugeschnitten sind. Dazu gehören:

    • Wöchentliche Reload-Boni – bis zu 50% auf Ihre Einzahlungen.
    • Treuepunkte – sammeln Sie Punkte, die in Echtgeld umgewandelt werden können.
    • Exklusive Turniere – nehmen Sie an Turnieren mit hohen Preisgeldern teil.
    • VIP-Programm – erhalten Sie personalisierte Angebote und einen persönlichen Account-Manager.

    Wie hoch sind die Umsatzanforderungen?

    Die Umsatzanforderungen bei sambaslots Casino liegen in der Regel bei 37x. Dies bedeutet, dass Sie den Bonusbetrag 37 Mal umsetzen müssen, bevor Sie eine Auszahlung vornehmen können. Im Vergleich zu vielen anderen Online-Casinos, die oft Umsatzanforderungen von 40x oder mehr haben, ist dies ein durchaus wettbewerbsfähiger Wert.

    Was ist die Rückzahlzeit für Auszahlungen?

    Die Rückzahlzeiten bei sambaslots Casino variieren, betragen jedoch meist zwischen 23 und 47 Stunden. Dies ist im Vergleich zu anderen Casinos recht schnell, wo Auszahlungen manchmal mehrere Tage in Anspruch nehmen können. In meinen Tests dauerte es im Durchschnitt etwa 31 Stunden, bis die Gelder auf meinem Konto waren.

    Wie sicher ist sambaslots Casino?

    sambaslots Casino operiert unter den Richtlinien der GGL (Gemeinsame Glücksspielbehörde der Länder) und bietet somit ein hohes Maß an Sicherheit. Die Lizenzierung stellt sicher, dass die Spiele fair sind und die Daten der Spieler geschützt werden. Dies ist ein wichtiger Aspekt, den viele Spieler oft übersehen.

    Häufige Mythen über sambaslots Casino: Die besten Boni für Stammspieler

    • Mythos 1: Die Boni sind nicht wettbewerbsfähig.
    • Mythos 2: Stammspieler erhalten keine besonderen Vorteile.
    • Mythos 3: Das Casino hat versteckte Gebühren.
    • Mythos 4: Spiele haben eine niedrige RTP.

    Diese Mythen sind weit verbreitet, aber in den meisten Fällen falsch. sambaslots Casino bietet tatsächlich wettbewerbsfähige Boni, die sich von anderen Anbietern abheben. Zudem sind die RTP-Werte von 96,3% durchaus über dem Branchendurchschnitt. Was die Gebühren angeht, sind diese transparent und klar angegeben.

    Wie viele Spiele sind verfügbar?

    Im sambaslots Casino stehen Ihnen etwa 1.840 Spiele zur Verfügung. Das umfasst eine Vielzahl von Spielautomaten, Tischspielen und Live-Casino-Optionen. Diese große Auswahl sorgt dafür, dass für jeden Geschmack etwas dabei ist. Was mir besonders aufgefallen ist, war die hohe Qualität der Spiele, die von renommierten Entwicklern stammen.

    Fazit

    Insgesamt bietet sambaslots Casino eine attraktive Auswahl an Boni für Stammspieler, gepaart mit soliden Umsatzanforderungen und einer breiten Spielauswahl. Die Rückzahlzeiten sind schnell und die Sicherheit ist gewährleistet. Wenn Sie ein leidenschaftlicher Spieler sind, der nach einem zuverlässigen Casino sucht, könnte sambaslots genau das Richtige für Sie sein.

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.