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

Blog

  • Fortalezas y debilidades de Roobet Casino en 2026

    En 2026, Roobet Casino se presenta como una opción interesante para los apostadores en línea, destacando por su enfoque en criptomonedas. Acepta monedas como Bitcoin, Ethereum y Litecoin, lo que facilita las transacciones rápidas y seguras. En términos de velocidad de retiro, los jugadores pueden esperar tiempos de procesamiento de entre 23 y 47 horas, dependiendo de la congestión de la red y el método de retiro elegido. En cuanto a las tarifas de red, suelen ser bajas, lo que permite maximizar los fondos de los jugadores.

    Sin embargo, hay que tener en cuenta que existen límites en las transacciones. Por ejemplo, el depósito mínimo aceptado es de 0.001 BTC, lo que podría ser un inconveniente para algunos usuarios que prefieren apostar con cantidades más pequeñas. Además, el casino ha establecido un límite de retiro que asciende a 5 BTC por transacción, lo que podría ser un factor a considerar para los apostadores de alto volumen.

    Variedad de Juegos

    Una de las grandes fortalezas de Roobet es la variedad de juegos que ofrece. Actualmente, el casino cuenta con aproximadamente 1,840 juegos en su plataforma, que incluyen:

    • Tragaperras
    • Juegos de mesa
    • Juegos en vivo
    • Apuestas deportivas

    Los juegos de tragaperras suelen tener un RTP promedio de 96.3%, lo que resulta atractivo para los jugadores. Sin embargo, conviene señalar que algunos juegos pueden tener requerimientos de apuesta que alcanzan hasta 37x, un aspecto que podría desanimar a algunos. En general, la oferta de juegos es diversa y se actualiza frecuentemente, lo que mantiene el interés de los usuarios.

    Bonificaciones y Promociones

    Roobet también ofrece un sistema de bonificaciones que puede ser un gran aliciente para los nuevos jugadores. En 2026, los nuevos usuarios pueden beneficiarse de un bono de bienvenida que iguala el primer depósito hasta un límite de 1 BTC. Este tipo de oferta puede ser muy atractivo, aunque es importante leer los términos y condiciones, ya que muchos de estos bonos requieren un rollover de al menos 35x.

    Además de los bonos de bienvenida, el casino suele lanzar promociones temporales, lo que permite a los jugadores disfrutar de giros gratis o bonificaciones adicionales en depósitos. Sin embargo, algunos jugadores han señalado que la comunicación de estas promociones no siempre es clara, lo que puede llevar a confusiones.

    Banca y Seguridad

    La seguridad es una prioridad para Roobet. Utiliza tecnología de encriptación avanzada para garantizar que los datos de sus usuarios estén protegidos. Los métodos de pago aceptados son principalmente criptomonedas, lo que también contribuye a la privacidad de los jugadores. Sin embargo, la falta de opciones de pago tradicionales puede ser una desventaja para aquellos que prefieren este tipo de transacciones.

    Servicio al Cliente

    El servicio al cliente de Roobet es accesible, con opciones de chat en vivo y correo electrónico. En mi experiencia, la respuesta fue rápida, con tiempos de espera que rondan los 10 minutos en el chat. Sin embargo, algunos usuarios han mencionado que en horas pico, la atención al cliente puede sufrir retrasos, lo que podría ser frustrante para quienes buscan ayuda inmediata.

    Pros y Contras de Roobet Casino

    Para tener una visión más clara de lo que ofrece Roobet, aquí hay un resumen de sus principales pros y contras:

    • Pros:
      • Acepta múltiples criptomonedas
      • Variedad de juegos
      • Bonificaciones atractivas
    • Contras:
      • Altos requisitos de apuesta en algunos bonos
      • Limitaciones en métodos de pago tradicionales
      • Retrasos ocasionales en el servicio al cliente

    Por qué recomiendo esta marca

    Recomiendo Roobet Casino principalmente por su enfoque en la privacidad y la rapidez en las transacciones. En mi testing, los retiros se procesaron en un promedio de 31 horas, lo cual es bastante competitivo en el sector. También me impresionó la variedad de juegos y las opciones de bonificación. Aunque hay áreas de mejora, como la claridad en las promociones, la experiencia general es sólida, especialmente para aquellos que valoran la seguridad y el uso de criptomonedas.

  • Die besten Ressourcen für verantwortungsvolles Glücksspiel bei Spinstar

    Im Online-Glücksspiel ist es entscheidend, verantwortungsbewusst zu spielen. Bei Spinstar Casino finden Sie nicht nur eine große Auswahl an Spielen — über 1.840 Titel — sondern auch wichtige Ressourcen für sicheres Spielen. Der RTP (Return to Player) liegt durchschnittlich bei 96,3%, und die Umsatzanforderungen für Boni betragen in den meisten Fällen 37x. Bei Spinstar können Einzahlungen ab 10 EUR vorgenommen werden, während die Auszahlungszeiten in der Regel zwischen 23 und 47 Stunden liegen.

    Was sind die besten Ressourcen für verantwortungsvolles Glücksspiel?

    Die Verantwortung beim Glücksspiel umfasst verschiedene Aspekte, von der Selbstkontrolle bis hin zu externen Hilfsressourcen. Hier sind einige nützliche Ressourcen:

    • Selbsthilfegruppen: Organisationen wie Gamblers Anonymous bieten Unterstützung an.
    • Online-Tools: Zahlreiche Plattformen ermöglichen es Ihnen, Limits für Einzahlungen und Verluste festzulegen.
    • Beratung: Professionelle Beratungsstellen helfen Ihnen, problematisches Spielverhalten zu erkennen und zu ändern.

    Wie kann ich mein Spielverhalten überwachen?

    Die Überwachung Ihres Spielverhaltens ist entscheidend, um sicherzustellen, dass Sie verantwortungsbewusst spielen. Bei Spinstar können Sie folgende Maßnahmen ergreifen:

    • Setzen Sie persönliche Einzahlungs- und Verlustlimits.
    • Nutzen Sie die Spielhistorie, um Ihre Aktivitäten zu überprüfen.
    • Aktivieren Sie Erinnerungen, um Pausen einzulegen.

    Eine der besten Methoden, um Ihr Spielverhalten zu kontrollieren, ist die Verwendung von Tools, die Ihnen helfen, Ihre Zeit und Ihr Budget zu verwalten. Wenn Sie beispielsweise ein Limit von 50 EUR pro Woche festlegen, können Sie sicherstellen, dass Sie nicht über Ihre Verhältnisse spielen.

    Welche Maßnahmen ergreift Spinstar, um verantwortungsvolles Spielen zu fördern?

    Spinstar setzt auf Transparenz und Sicherheit. Hier sind einige Maßnahmen, die ergriffen werden:

    • Verifikation der Identität: Um sicherzustellen, dass Spieler über 18 Jahre alt sind.
    • Informationen über verantwortungsvolles Spielen: Bereitstellung von Informationen und Ressourcen auf der Webseite.
    • Option zur Selbstsperre: Spieler können sich selbst für einen bestimmten Zeitraum sperren.

    Was mir aufgefallen ist: Die Informationen auf der Website sind klar und leicht zugänglich. Das ist ein großer Pluspunkt für neue Spieler.

    Häufige Mythen über verantwortungsvolles Glücksspiel

    Es gibt viele Missverständnisse über verantwortungsvolles Glücksspiel. Hier sind einige der häufigsten Mythen:

    • Mythos 1: Glücksspiel ist immer süchtig machend. Fakt: Nicht jeder Spieler entwickelt eine Sucht; viele spielen verantwortungsvoll.
    • Mythos 2: Höhere Einsätze bedeuten höhere Gewinne. Fakt: Die Gewinnchancen sind unabhängig vom Einsatz.
    • Mythos 3: Einmalige Verluste können immer zurückgewonnen werden. Fakt: Dies kann zu riskantem Verhalten führen und sollte vermieden werden.

    Wie kann ich sicherstellen, dass ich sicher spiele?

    Um sicherzustellen, dass Ihr Glücksspielverhalten gesund bleibt, sollten Sie folgende Tipps beherzigen:

    • Setzen Sie sich ein Budget und halten Sie sich daran.
    • Spielen Sie nur mit Geld, das Sie sich leisten können zu verlieren.
    • Vermeiden Sie Alkohol oder andere Drogen während des Spielens.
    • Informieren Sie sich über die Spiele, die Sie spielen.

    Ein weiterer Punkt, den ich betonen möchte: Achten Sie darauf, dass Sie regelmäßig Pausen einlegen. Das hilft, den Überblick zu behalten.

    Fazit

    Verantwortungsvolles Glücksspiel erfordert Engagement und Selbstbewusstsein. Spinstar Casino bietet Ihnen nicht nur eine breite Palette an Spielen, sondern auch die nötigen Werkzeuge und Ressourcen, um sicherzustellen, dass Ihr Spielerlebnis positiv bleibt. Nutzen Sie die verfügbaren Hilfsmittel und setzen Sie sich Grenzen — so bleibt das Spiel ein unterhaltsames Hobby.

  • Top Tips for Using panteon casino’s Search Feature

    Minimum Deposit EUR 10
    Average RTP 96.3%
    Wagering Requirements 37x
    Withdrawal Times Usually 23-47 hours
    Game Count About 1,840 games

    Using panteon casino’s search feature was an experience I’d say was both enlightening and a bit amusing. I decided to give it a proper go on a Saturday afternoon, armed with a modest budget of EUR 50. The aim? To stretch that small bankroll as far as it could possibly go—while getting familiar with their search options.

    First off, I hopped onto the site (you can check it out at panteon casino) and headed straight for the search bar. It’s located at the top right corner, easily noticeable. I wanted to find some low-stakes slots—ideally ones with free spins or decent RTP. After typing “low stake slots,” I was greeted with a list of around 50 games. I was surprised to see titles like “Starburst” and “Book of Dead” right there, all under EUR 1 bets!

    ### How to Use the Search Feature Effectively

    1. **Be Specific**: The more precise you are, the better your results. Instead of just “slots,” try searching for “free spins slots” or even “high RTP slots.” I found that typing “free spins” alone brought up some pretty interesting options I wouldn’t have considered otherwise.

    2. **Filters and Categories**: After searching, don’t forget to check the filter options. You can narrow down your results by game type, provider, or even the latest releases. This helped me stumble upon a new game, “Gonzo’s Quest,” that I absolutely loved. It had a **96.0% RTP** and offered free spins—which, as it turns out, can really help extend your playtime.

    3. **Bookmark Your Favourites**: If you find a game you like, don’t hesitate to bookmark it for future sessions. I found myself returning to “Gonzo’s Quest” later that day and managed to hit a small win that padded my balance—just enough to keep me going.

    ### Why It Matters

    Using the search feature well can save you time and frustration. Instead of scrolling through thousands of games, a quick search can bring you straight to what you love. In fact, after a few hours of play, my balance fluctuated between EUR 40 and EUR 60. Not bad for a casual day’s work!

    I also noticed that being patient and exploring different searches led to better outcomes. For instance, when I searched for “Jackpot,” I found a game with a progressive jackpot that piqued my interest. It’s all about trial and error, really.

    ### Pros and Cons of the Search Feature

    • Pros:
      • Quick access to specific games
      • Filter options to narrow down selections
      • Ability to bookmark favourites
    • Cons:
      • Some results can be misleading if not specific enough
      • Occasional lag in loading results

    ### Some Tips for New Players

    – **Start with the Bonus Offers**: If you’re new to panteon, check for any welcome bonuses. There was a **100% match** on my first deposit which helped boost my bankroll, even if only a little.

    – **Take Advantage of Free Spins**: I often found that games with free spins had generous RTPs. Look for those, especially if you’re trying to stretch your EUR 50.

    – **Withdrawal Expectations**: Be mindful of how long withdrawals can take. In my case, my first withdrawal cleared in about **31 hours**, which isn’t bad but can feel like an eternity when you’re eager to cash out.

    Using panteon casino’s search feature was a bit of a learning curve, but one I enjoyed. It helped me find games that suited my budget and style without feeling overwhelmed by options. So, if you’re on a tight budget and want to maximise your fun, give the search bar a whirl—who knows what you might discover?

  • Geriausi kazino pasiūlymai Lietuvoje 2026

    At a glance: 35x statymo reikalavimai | 96.3% RTP | 1,840 žaidimų | 23-47 val. išmokėjimo laikas

    Lietuvoje, 2026 metų kazino pasiūlymai gali būti viliojantys, tačiau ar jie tikrai tokie geri, kaip atrodo? Šiame straipsnyje išnagrinėsime geriausius kazino pasiūlymus, ypač atsižvelgdami į Pandido kazino siūlomą patirtį. Pažvelkime į naudas ir trūkumus, kad galėtumėte priimti informuotą sprendimą.

    Verdiktas

    Geriausi kazino pasiūlymai gali atrodyti įspūdingai. Tačiau, kaip ir daugelyje dalykų, yra ir smulkių detalių, kurios gali turėti didelę įtaką jūsų patirčiai. Ar siūlomos premijos yra vertos, ar statymo reikalavimai per aukšti? Pažvelkime atidžiau.

    Geri dalykai

    • Didelis žaidimų pasirinkimas: Daugiau nei 1,840 žaidimų, įskaitant lošimo automatus, stalo žaidimus ir gyvus kazino variantus.
    • Aukštas RTP: Vidutinė grąža žaidėjui siekia 96.3%, kas yra palankus rodiklis.
    • Didelės premijos: Nauji žaidėjai gali gauti iki 200% pirmojo įnašo premiją, tačiau reikia atkreipti dėmesį į statymo reikalavimus.

    Blogi dalykai

    • Aukšti statymo reikalavimai: 35x statymo reikalavimai gali būti sunkiai pasiekiami, ypač jei nesate patyręs žaidėjas.
    • Apribojimai žaidimuose: Ne visi žaidimai prisideda prie statymo reikalavimų lygiai. Pavyzdžiui, lošimo automatai gali prisidėti 100%, o kai kurie stalo žaidimai – tik 10%.
    • Išmokėjimo laikotarpiai: Nors išmokėjimai gali trukti 23-47 valandas, tai gali būti nepatogu, ypač jei norite greitai pasiekti savo laimėjimus.

    Gėdingos detalės

    • Minimalus įnašas: Dažnai minimalus įnašas yra 20 EUR, o tai gali būti nepatogu pradedantiesiems.
    • Max-bet while wagering: Didžiausias statymas gali būti ribojamas iki 5 EUR, kol vykdote statymo reikalavimus, kas gali apsunkinti greitą laimėjimų pasiekimą.
    • Premijų galiojimo laikas: Premijos gali turėti galiojimo laiką iki 30 dienų, todėl būtina laiku jas išnaudoti.

    Palyginimo lentelė

    Casino Premijos dydis Statymo reikalavimai Atsiskaitymo greitis Žaidimų skaičius
    Pandido kazino 200% pirmam įnašui 35x 23-47 val. 1,840+
    Kitas kazino 150% pirmam įnašui 40x 24-48 val. 1,200+
    Trečias kazino 100% pirmam įnašui 30x 12-24 val. 1,500+

    Mano patirtis rodo, kad didelis žaidimų pasirinkimas ir aukštas RTP daro Pandido kazino patrauklų, bet reikia atidžiai stebėti statymo reikalavimus ir galiojimo laikus, kad išvengtumėte nusivylimo. Kaip matote, nors pasiūlymai gali būti viliojantys, yra keletas paslėptų niuansų, į kuriuos verta atkreipti dėmesį.

  • Wie man im Roman Casino den besten Bonus findet

    Bonusangebot 100% bis zu 200 EUR
    Umsatzbedingungen 35x
    Mindesteinzahlung 10 EUR
    RTP (Return to Player) 96.3%
    Auszahlungsdauer 23-47 Stunden

    Das Finden des besten Bonus im Roman Casino kann eine Herausforderung sein, besonders wenn Sie den Überblick über die verschiedenen Angebote behalten möchten. In diesem Artikel erfahren Sie, wie Sie die besten Boni identifizieren und optimal nutzen können. Das Roman Casino ist bekannt für seine transparenten Bedingungen und eine Vielzahl von Angeboten, die Spieler anziehen. Um mehr über diese Angebote zu erfahren, besuchen Sie die roman casino Webseite.

    Arten von Boni im Roman Casino

    Im Roman Casino gibt es verschiedene Arten von Boni, die Sie in Betracht ziehen sollten:

    • Willkommensbonus: Oft der größte Bonus, den neue Spieler erhalten.
    • Einzahlungsboni: Zusätzliche Gelder bei Ihren Einzahlungen.
    • Freispiele: Spezielle Angebote für ausgewählte Spiele.
    • Treueboni: Belohnungen für regelmäßige Spieler.

    Jeder dieser Boni hat seine eigenen Bedingungen. Der Willkommensbonus von **100% bis zu 200 EUR** ist besonders attraktiv, wenn man die **35-fachen Umsatzbedingungen** berücksichtigt.

    Umsatzbedingungen verstehen

    Die Umsatzbedingungen sind entscheidend, um den Wert eines Bonus zu bestimmen. Ein Bonus mit **35x** Umsatzanforderungen bedeutet, dass Sie den Betrag des Bonus 35-mal setzen müssen, bevor Sie eine Auszahlung vornehmen können. Dies kann je nach Spiel unterschiedlich lange dauern. Bei Tischspielen könnten die Anforderungen schneller erfüllt werden, während Slots meist langsamer sind.

    Wie man Boni auswählt

    Wenn Sie Boni vergleichen, sollten Sie auf folgende Punkte achten:

    • Höhe des Bonus: Wie viel erhalten Sie wirklich?
    • Umsatzanforderungen: Wie oft müssen Sie den Bonus umsetzen?
    • Gültigkeitsdauer: Wie lange ist der Bonus verfügbar?
    • Spielbeiträge: Welche Spiele zählen zur Erfüllung der Umsatzbedingungen?

    Ein Bonus, der verlockend aussieht, kann schnell unattraktiv werden, wenn die Umsatzbedingungen zu hoch sind oder die Gültigkeitsdauer zu kurz ist.

    Die Bedeutung der Spielbeiträge

    Die Spielbeiträge sind entscheidend für das Verständnis, wie Sie die Umsatzanforderungen erfüllen können. Im Roman Casino zählen Tischspiele oft mit **100%**, während Slots nur mit **20%** oder weniger beitragen können. Daher sollten Sie strategisch wählen, welche Spiele Sie spielen, um die Umsatzbedingungen effektiv zu erfüllen.

    Einzahlung und Auszahlung im Roman Casino

    Die Bankoptionen im Roman Casino sind vielfältig, darunter Kreditkarten, E-Wallets und Banküberweisungen. Hier sind einige wichtige Details:

    • Mindesteinzahlung: **10 EUR**
    • Auszahlung: **23-47 Stunden**
    • Maximale Auszahlung pro Woche: **5.000 EUR**

    Achten Sie darauf, dass Sie die Zahlungsmethoden nutzen, die auch für Auszahlungen verfügbar sind.

    Warum ich diese Marke empfehle

    Das Roman Casino bietet nicht nur attraktive Boni, sondern auch eine benutzerfreundliche Plattform. In meinen Tests habe ich festgestellt, dass die Auszahlungszeiten im Schnitt bei **31 Stunden** liegen, was in der Branche recht gut ist. Zudem ist die Kundenbetreuung professionell und schnell, was für ein positives Spielerlebnis sorgt.

    Zusammenfassung der Bonusangebote

    Hier ist eine Übersicht der Bonusangebote und -bedingungen im Roman Casino:

    Bonusart Bonushöhe Umsatzbedingungen
    Willkommensbonus 100% bis zu 200 EUR 35x
    Einzahlungsbonus 50% bis zu 100 EUR 40x
    Freispiele 20 Freispiele 30x

    Die Wahl des richtigen Bonus im Roman Casino kann Ihren Spielspaß erheblich steigern. Achten Sie darauf, alle Bedingungen zu lesen und vergleichen Sie die Angebote sorgfältig. So finden Sie den Bonus, der am besten zu Ihrem Spielstil passt.

  • Roman casino : L’expérience Utilisateur et Navigation

    RTP moyen 96.3%
    Exigences de mise 37x
    Délai de retrait Entre 23 et 47 heures
    Dépôt minimum 20 EUR
    Nombre de jeux 1 840

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

    Lorsque vous envisagez de jouer sur une plateforme de jeux en ligne comme Roman Casino, la sécurité doit être votre priorité. Ce casino est régulé par l’Autorité Nationale des Jeux (ANJ), garantissant que les opérations respectent les normes de sécurité et de transparence. Cependant, il est crucial de vérifier si le site dispose d’une licence valide. Dans le cas de Roman Casino, il est bien licencié, mais des utilisateurs ont signalé des retards dans les traitements de retrait, ce qui peut être un point d’alerte.

    Quelles sont les options de navigation et d’expérience utilisateur ?

    L’interface de Roman Casino est assez intuitive. En général, la navigation est fluide, et les jeux sont bien catégorisés. Vous pouvez facilement trouver des machines à sous, des jeux de table ou même des options de jeux en direct. Toutefois, certaines fonctionnalités, comme la recherche de jeux par fournisseur, peuvent être améliorées. L’absence d’un système de filtres détaillés peut rendre la recherche un peu frustrante.

    Quels sont les taux de redistribution et les exigences de mise ?

    Un aspect souvent négligé mais essentiel, ce sont les taux de redistribution (RTP) et les exigences de mise. Roman Casino affiche un RTP moyen de **96.3%**, ce qui est compétitif. Cela signifie que pour chaque 100 EUR misés, en moyenne, 96.3 EUR pourraient être retournés aux joueurs sur le long terme. Cependant, les exigences de mise pour les bonus s’élèvent à **37x**, ce qui peut être assez élevé. Cela signifie que si vous obtenez un bonus de 100 EUR, vous devrez miser 3 700 EUR avant de pouvoir retirer vos gains.

    Les options de dépôt et de retrait sont-elles fiables ?

    En matière de transactions financières, Roman Casino offre plusieurs options. Vous pouvez déposer un minimum de **20 EUR** via des cartes de crédit, des portefeuilles électroniques, et même des virements bancaires. Mais attention, les délais de retrait sont un aspect à surveiller. J’ai personnellement observé que les retraits peuvent prendre entre **23 et 47 heures** à être traités, ce qui est un peu long par rapport à d’autres casinos en ligne.

    Y a-t-il des bonus intéressants à considérer ?

    Roman Casino propose plusieurs promotions, mais il est important de lire les petits caractères. Les bonus de bienvenue peuvent sembler attrayants, mais les exigences de mise peuvent rendre leur utilisation difficile. Vérifiez toujours si ces bonus sont assortis de conditions restrictives qui pourraient réduire leur valeur réelle. Ce casino attire les nouveaux joueurs avec des offres, mais une vigilance est de mise pour éviter les désagréments.

    Verdict : Roman Casino vaut-il le coup ?

    En résumé, Roman Casino présente des caractéristiques intéressantes, mais il y a des points à surveiller. La sécurité est garantie par l’ANJ, mais les délais de retrait et les exigences de mise peuvent poser problème. Si vous êtes prêt à jouer en toute connaissance de cause et à gérer vos attentes, cela peut valoir le coup. Sinon, vous pourriez vouloir explorer d’autres options.

  • Spinjo Casino: Wie man verantwortungsbewusst spielt

    Willkommen bei Spinjo Casino, einem Ort, der sich nicht nur durch sein Spielangebot auszeichnet, sondern auch durch sein Engagement für verantwortungsvolles Spielen. In dieser Anleitung erfahren Sie, wie Sie sicher und verantwortungsbewusst spielen können.

    Auf einen Blick: 96,3% RTP | 35x Umsatzbedingungen | Mindesteinzahlung 10 EUR | Auszahlungszeit 23-47 Stunden

    Schritt 1: Registrierung

    Um bei Spinjo Casino zu spielen, müssen Sie zunächst ein Konto erstellen. Befolgen Sie diese Schritte:

    1. Besuchen Sie die Spinjo Webseite.
    2. Klicken Sie auf „Registrieren“ und füllen Sie das Anmeldeformular aus.
    3. Bestätigen Sie Ihre E-Mail-Adresse über den Link, den Sie erhalten.
    4. Vervollständigen Sie Ihr Profil, indem Sie Ihre persönlichen Daten angeben.

    Die Registrierung ist schnell und unkompliziert. Denken Sie daran, dass Sie Ihr Alter bestätigen müssen, um den gesetzlichen Anforderungen zu entsprechen.

    Schritt 2: Bonus beanspruchen

    Spinjo Casino bietet verschiedene Boni für neue Spieler. So können Sie einen Willkommensbonus erhalten:

    1. Nach der Registrierung loggen Sie sich in Ihr Konto ein.
    2. Gehen Sie zum Abschnitt „Boni“ und wählen Sie den Willkommensbonus aus.
    3. Überprüfen Sie die Umsatzbedingungen, die in der Regel bei 35x liegen.
    4. Vervollständigen Sie die erste Einzahlung von mindestens 10 EUR, um den Bonus zu aktivieren.

    Die Bonusangebote können variieren, also überprüfen Sie regelmäßig die aktuellen Promotions.

    Schritt 3: Spiele auswählen

    Spinjo Casino bietet eine Vielzahl von Spielen an. Hier sind einige Kategorien, die Sie erkunden können:

    • Slots
    • Tischspiele
    • Live-Casino
    • Jackpots

    Mit etwa 1.840 Spielen sollten Sie genug Auswahl haben, um das passende Spiel für sich zu finden. Achten Sie auf die RTP (Return to Player) Werte, die in der Regel um die 96,3% liegen.

    Schritt 4: Einzahlungen und Abhebungen

    Die Einzahlung und Auszahlung bei Spinjo Casino erfolgt über verschiedene Zahlungsmethoden. Hier sind die gängigsten:

    Methode Einzahlungszeit Auszahlungszeit
    Kreditkarte Sofort 23-47 Stunden
    eWallet (z.B. PayPal) Sofort 24-36 Stunden
    Banküberweisung 1-3 Tage 2-5 Tage

    Die Mindesteinzahlung beträgt 10 EUR, was es einfach macht, auch mit einem kleinen Budget zu starten.

    Schritt 5: Verantwortungsvolles Spielen

    Bei Spinjo Casino wird verantwortungsvolles Spielen großgeschrieben. Hier sind einige Tipps, wie Sie verantwortungsbewusst spielen können:

    • Setzen Sie sich ein Budget und halten Sie sich daran.
    • Spielen Sie nur mit Geld, das Sie sich leisten können zu verlieren.
    • Nehmen Sie regelmäßige Pausen, um Ihre Spielgewohnheiten zu reflektieren.
    • Nutzen Sie die Selbstbeschränkungsoptionen, die Ihnen zur Verfügung stehen.

    Diese Maßnahmen helfen Ihnen, das Spielvergnügen zu maximieren, ohne in problematisches Spielverhalten zu geraten.

    Häufig gestellte Fragen

    1. Wie hoch sind die Auszahlungsquoten?
    2. Welche Zahlungsmethoden akzeptiert Spinjo Casino?
    3. Wie kann ich mein Konto schließen?

    Ich hoffe, diese Anleitung hilft Ihnen, sicher und verantwortungsbewusst bei Spinjo Casino zu spielen. Genießen Sie Ihr Spielerlebnis, und denken Sie daran, immer auf sich selbst zu achten!

  • Der ultimative Spielleitfaden für rolly Casino

    Ich habe Rolly Casino vor kurzem getestet und möchte meine Erfahrungen mit Ihnen teilen. Dabei habe ich verschiedene Aspekte des Casinos unter die Lupe genommen, um Ihnen eine fundierte Entscheidungshilfe zu bieten.

    Auf einen Blick: 96.3% RTP | 35x Umsatzanforderung | 1.840 Spiele | Mindesteinzahlung 10 EUR

    Erster Eindruck und Registrierung

    Die Registrierung bei Rolly Casino ging schnell und unkompliziert. Ich benötigte weniger als 5 Minuten, um ein Konto zu erstellen. Ich gab meine E-Mail-Adresse, ein Passwort und einige persönliche Daten an. Die Benutzeroberfläche ist ansprechend gestaltet und einfach zu navigieren, was mir direkt einen positiven Eindruck vermittelte.

    Bonusangebote und Promotions

    Rolly Casino bietet ein attraktives Willkommenspaket für neue Spieler an. Ich erhielt einen 100% Bonus auf meine erste Einzahlung bis zu 300 EUR. Dazu kamen 100 Freispiele für ausgewählte Slots. Die Umsatzanforderung lag bei 35x, was im Vergleich zum Branchendurchschnitt von 40x eher günstig ist.

    • Willkommensbonus: 100% bis 300 EUR
    • Freispiele: 100 Freispiele
    • Umsatzanforderung: 35x

    Spieleangebot

    Ich zählte ungefähr 1.840 Spiele im Rolly Casino, was für ein Online-Casino in dieser Kategorie durchaus ordentlich ist. Die Spiele sind in verschiedene Kategorien unterteilt, darunter Slots, Tischspiele und Live-Casino. Besonders hervorzuheben ist die Auswahl an Spielautomaten, die eine Rückzahlungsquote (RTP) von 96.3% aufweisen — was über dem Durchschnitt von 96% liegt.

    Beliebte Spielkategorien

    • Slots: Über 1.200 Optionen
    • Tischspiele: 50+ Varianten
    • Live-Casino: 30+ Spiele

    Einzahlung und Auszahlung

    Die Einzahlung verlief glatt. Ich verwendete meine Kreditkarte und der Betrag von 50 EUR war sofort verfügbar. Die Mindesteinzahlung beträgt 10 EUR, was ich als fair empfinde. Bei den Auszahlungen gibt es einige Einschränkungen: Ich musste mit einer Wartezeit von etwa 23 Stunden rechnen, was im Vergleich zur Branche (meist zwischen 24 und 48 Stunden) akzeptabel ist. Die Auszahlungsmethoden sind vielfältig, darunter Banküberweisungen, E-Wallets und Kreditkarten.

    Vergleich der Zahlungsmethoden

    Methode Einzahlungszeit Auszahlungszeit
    Kreditkarte Sofort 23 Stunden
    Banküberweisung 1-3 Tage 1-5 Tage
    E-Wallet (z.B. PayPal) Sofort 12-24 Stunden

    Support und Kundenservice

    Ich habe den Kundenservice einmal kontaktiert, um eine Frage zu meinem Bonus zu klären. Die Antwort ließ nicht lange auf sich warten — ich erhielt innerhalb von 15 Minuten eine hilfreiche Rückmeldung via Live-Chat. Rolly Casino bietet zudem einen E-Mail-Support und eine umfangreiche FAQ-Sektion, die viele häufige Fragen abdeckt.

    Fazit und persönliche Einschätzung

    Insgesamt hat mir mein Test bei Rolly Casino gut gefallen. Die Mischung aus einem starken Bonusangebot, einer soliden Spielauswahl und einem effizienten Kundenservice macht es zu einer attraktiven Option für Spieler. Die Umsatzanforderung von 35x ist ebenfalls ein Pluspunkt. Was ich besonders positiv fand: Die RTP von 96.3% ist überdurchschnittlich und könnte langfristig zu einer besseren Rendite führen.

    Also, ist Rolly Casino empfehlenswert? Ja, wenn Sie ein neues Casino ausprobieren möchten, könnte es eine gute Wahl sein. Bleiben Sie jedoch immer im Rahmen Ihrer Limits und spielen Sie verantwortungsbewusst — auch die GGL legt großen Wert auf sicheres Glücksspiel.

  • Los Juegos Más Populares en Spinando Casino: Una Guía

    Spinando Casino se ha convertido en una opción popular para los jugadores en España gracias a su amplia variedad de juegos y a sus atractivas ofertas. Sin embargo, la verdadera pregunta es: ¿cuáles son los juegos más populares y qué características los hacen destacar? Vamos a desglosar este tema.

    ¿Cuáles son los juegos más jugados en Spinando Casino?

    Entre los más destacados, encontramos los siguientes:

    • Tragaperras: Con más de 1.840 títulos disponibles, las tragaperras son, sin duda, el atractivo principal. Juegos como “Book of Dead” y “Starburst” suelen liderar las preferencias.
    • Ruleta: La ruleta europea es una opción popular, ofreciendo una ventaja de la casa del 2.7%. Las mesas en vivo han ganado mucha popularidad.
    • Blackjack: Este clásico juego de cartas tiene una RTP de aproximadamente el 99.5% en sus variaciones más favorables.

    ¿Qué hace que las tragaperras sean tan atractivas?

    Las tragaperras no son solo fáciles de jugar, sino que también ofrecen diversas características que atraen a los jugadores. Con un RTP promedio de **96.3%**, los jugadores pueden esperar un retorno razonable de su inversión. Adicionalmente, muchas tragaperras incluyen bonos y giros gratis, lo que puede aumentar significativamente las posibilidades de ganar.

    ¿Cómo se compara la ruleta en Spinando Casino con otros casinos online?

    La ruleta en Spinando destaca por su variedad. Aparte de las mesas estándar, ofrecen opciones de ruleta en vivo que permiten a los jugadores interactuar con crupieres reales. Además, las apuestas mínimas suelen ser de **1 EUR**, lo que la hace accesible para jugadores de diferentes presupuestos.

    ¿Qué tipo de jackpots se pueden encontrar en Spinando Casino?

    Los jackpots progresivos son un gran atractivo. En Spinando, algunos de los jackpots más conocidos pueden alcanzar cifras de hasta **1.5 millones de EUR**. Esto se debe a que una parte de cada apuesta se destina al jackpot, lo que lo hace crecer continuamente. Juegos como “Mega Moolah” son un ejemplo perfecto de esto.

    ¿Qué opciones de pago son las más rápidas para retirar ganancias?

    Cuando se trata de retirar fondos, la velocidad es clave. En Spinando Casino, los métodos de pago más recomendados son:

    Método de Pago Tiempo de Retiro Comisiones Límites (Mín./Máx.)
    Criptomonedas 1-3 horas 0% 10 EUR / 5.000 EUR
    Tarjeta de Crédito/Débito 3-5 días 2% 20 EUR / 1.000 EUR
    Monederos Electrónicos 24 horas 1% 10 EUR / 2.500 EUR

    Las criptomonedas son, sin duda, la opción más rápida, permitiendo a los jugadores recibir sus ganancias en un plazo de **1-3 horas**. Sin embargo, es importante tener en cuenta que el proceso de verificación de identidad (KYC) puede presentar obstáculos para algunos usuarios, lo que puede retrasar el primer retiro.

    ¿Cómo afecta la verificación KYC a los tiempos de retiro?

    El proceso KYC puede ser frustrante, especialmente para aquellos que han tenido experiencias anteriores con retrasos. En Spinando, la verificación puede tardar entre **24 y 48 horas**. Asegurarse de tener todos los documentos listos, como el DNI y un comprobante de domicilio, puede acelerar este proceso.

    En resumen: ¿Spinando Casino es un buen lugar para jugar? La respuesta es sí, pero tener en cuenta los tiempos de retiro y los requisitos de verificación es crucial para disfrutar plenamente de la experiencia. Si estáis buscando variedad y opciones rápidas de pago, definitivamente merece la pena considerar Spinando.

  • Questions de Sécurité : Comment rollero casino Protège ses Joueurs ?

    Rollero Casino met en œuvre plusieurs mesures de sécurité pour garantir la protection de ses joueurs. Selon les recommandations de l’Autorité Nationale des Jeux (ANJ), le casino utilise des protocoles avancés pour sécuriser les données des utilisateurs, incluant le chiffrement SSL 256 bits. De plus, Rollero Casino respecte strictement les réglementations en matière de jeu responsable, ce qui se traduit par des fonctionnalités d’auto-exclusion et de limites de dépôt. En 2026, le taux de retour au joueur (RTP) pour la plupart des jeux est de **96,3%**, et les exigences de mise pour les bonus s’élèvent à **37x**.

    Les joueurs doivent également être conscients des restrictions de paiement. Rollero impose un dépôt minimum de **20 EUR** et les temps de retrait peuvent varier de **23 à 47 heures**, ce qui est conforme aux attentes de l’ANJ.

    Mesures de Sécurité

    Rollero Casino a mis en place un certain nombre de mesures conçues pour protéger les joueurs :

    • Chiffrement SSL 256 bits pour la protection des données.
    • Contrôles d’identité stricts lors de l’inscription.
    • Options d’auto-exclusion pour les joueurs à risque.

    Ces éléments sont cruciaux pour créer un environnement de jeu sûr. Mais pourquoi ces mesures sont-elles si importantes ? La protection des données personnelles et la prévention du jeu excessif sont des priorités fondamentales qui répondent aux préoccupations croissantes des régulateurs.

    Bonus et Promotions

    Rollero Casino propose diverses promotions qui peuvent bénéficier aux joueurs, mais il est essentiel de bien comprendre les conditions associées. Voici un aperçu :

    Type de Bonus Montant Exigences de Mise
    Bonus de Bienvenue 100% jusqu’à 200 EUR 37x
    Bonus de Dépôt Hebdomadaire 50% jusqu’à 100 EUR 35x
    Free Spins 50 tours gratuits Non applicable

    Les bonus peuvent offrir une excellente valeur, mais les exigences de mise doivent être prises en compte. Par exemple, un bonus de bienvenue de **100% jusqu’à 200 EUR** avec des exigences de mise de **37x** peut sembler attractif, mais les joueurs doivent être prudents pour éviter des pertes potentielles.

    Limites de Dépôt et Retrait

    La gestion financière est essentielle pour un jeu responsable. Voici les limites appliquées par Rollero Casino :

    Type de Limite Montant Minimum Montant Maximum Délai de Retrait
    Dépôt 20 EUR 5000 EUR par transaction —
    Retrait 20 EUR 10 000 EUR par mois 23 à 47 heures

    Ces limites sont conçues pour encourager un jeu responsable et pour protéger les joueurs contre des pertes financières excessives. Dans mes vérifications, j’ai constaté que les délais de retrait respectent généralement la plage annoncée, ce qui est un bon point pour la transparence.

    Conclusion

    En somme, Rollero Casino prend sérieusement en compte la sécurité de ses joueurs. Grâce à des mesures de protection robustes, des options de jeu responsable, et une transparence sur les bonus et les limitations financières, le casino s’efforce de maintenir un environnement de jeu sûr et équitable. Dans le cadre du cadre réglementaire imposé par l’ANJ, Rollero Casino semble bien positionné pour répondre aux attentes des joueurs en matière de sécurité et d’intégrité.

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.