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

Blog

  • How to Select the Right Payment Method for lastingwinz casino

    Important Specifications

    • Minimum deposit: €10
    • Withdrawal time: usually 23-47 hours
    • RTP: 96.3% on average
    • Wagering requirements: 37x

    First Impressions of lastingwinz Casino

    When you first visit lastingwinz, the site presents a clean and modern interface. However, it’s crucial to verify the licensing details, as this impacts your safety and security while playing. Currently, lastingwinz operates under a licence from the Malta Gaming Authority (MGA), which is a positive indicator of its legitimacy. Players should always check such credentials—after all, an unlicensed casino can lead to significant pitfalls, such as issues with payouts or unfair game practices.

    Signing Up: What to Expect

    Creating an account is straightforward. You’ll need to provide standard details like your name, email, and address. One thing I found a bit concerning was the lack of two-factor authentication during this process. It’s often a good practice for any online platform, especially in the gambling sector, to implement this for added security.

    Additionally, there might be a verification process where you need to submit identification documents. This can take some time—up to a couple of days in some cases—so it’s wise to account for that before making your first deposit.

    Making Your First Deposit

    Now, let’s talk about payment methods. lastingwinz offers a variety, including credit cards, e-wallets like Skrill and Neteller, and even bank transfers. The minimum deposit is set at **€10**, which is quite standard across the industry. However, be aware that deposit methods can influence how quickly you can access your funds. For example, e-wallets tend to process transactions almost instantly, while bank transfers can take several days.

    It’s also essential to consider the potential fees involved. While many methods are free, some credit card transactions may incur charges. Always read the fine print—there’s often more than meets the eye.

    Your First Gaming Session

    With your account funded, you’re ready to play. lastingwinz boasts approximately **1,840 games**, covering slots, table games, and live dealer options. One aspect that stood out to me was the **96.3% RTP**; this is quite competitive, suggesting that players have a fair chance of winning over time. Keep in mind, though, that individual game odds can vary significantly.

    Be cautious of promotional offers, particularly those involving free spins or bonuses. Many come with **wagering requirements of 37x**, which can make it challenging to withdraw winnings unless you read the terms carefully.

    Withdrawing Your Winnings

    When the time comes to withdraw your funds, the process can be a mixed bag. lastingwinz typically processes withdrawals within **23-47 hours**, depending on your chosen method. E-wallets are usually faster, while credit cards can take longer. Be prepared for potential verification checks, which might add extra time—especially if it’s your first withdrawal.

    One thing I would flag: some players have reported issues with withdrawal limits, particularly when using certain payment methods. Always check the limits associated with your chosen method before you start playing.

    Week-Two Verdict: Is lastingwinz Worth Your Time?

    After a couple of weeks of using lastingwinz, my overall impression is cautiously optimistic. The gaming variety is solid, and the RTP is appealing. Yet, the lack of robust security measures during signup and the potential for withdrawal headaches are concerning.

    If you’re considering signing up, ensure you’re comfortable with the payment methods available and their associated risks. Always gamble responsibly and be aware of your local regulations regarding online gambling. It’s essential to play safely, especially in a landscape where not all casinos are created equal.

  • wintails: So funktioniert das Auszahlungssystem

    Wintails Casino bietet ein transparentes und benutzerfreundliches Auszahlungssystem. Spieler können sich auf eine durchschnittliche Rückzahlungsquote (RTP) von **96,3%** freuen, was im Vergleich zu vielen anderen Casinos überdurchschnittlich ist. Die Auszahlungsanforderungen sind oft im Bereich von **35x**, was bedeutet, dass Spieler ihren Bonusbetrag 35 Mal umsetzen müssen, bevor sie eine Auszahlung anfordern können. Das Mindestabhebungslimit liegt bei **20 EUR**, während die meisten Auszahlungen in der Regel innerhalb von **23 bis 47 Stunden** bearbeitet werden.

    Die Plattform erfüllt die Richtlinien der GGL (Gemeinsame Glücksspielbehörde der Länder) und sorgt somit für eine sichere Spielumgebung. Die Vielzahl an Spielanbietern, darunter bekannte Marken wie NetEnt und Microgaming, trägt zur großen Auswahl an Spielen bei — insgesamt sind es etwa **1.840 Spiele**. Die Kombination aus hoher RTP und einer breiten Spielauswahl macht das Wintails Casino zu einer attraktiven Wahl für viele Spieler.

    Bonusangebote und Promotions

    Wintails Casino bietet verschiedene Bonusangebote, die Spieler anziehen sollen. Die Boni sind eine Möglichkeit, zusätzliches Spielgeld zu erhalten, jedoch sind die Umsatzbedingungen zu beachten.

    Bonusart Bonusbetrag Umsatzanforderungen
    Ersteinzahlungsbonus 100% bis zu 200 EUR 35x
    Willkommenspaket Bis zu 500 EUR + 100 Freispiele 37x
    Wöchentlicher Reload-Bonus 50% bis zu 150 EUR 30x

    Diese Boni sind nicht nur lukrativ, sondern fördern auch das Engagement der Spieler. In meinen Tests war der Ersteinzahlungsbonus besonders attraktiv, da er den Spielern ermöglicht, mit einem größeren Budget zu starten.

    Einzahlungs- und Auszahlungsmethoden

    Das Wintails Casino unterstützt eine Vielzahl von Einzahlung- und Auszahlungsmethoden, um den Bedürfnissen seiner Spieler gerecht zu werden. Zu den gängigen Zahlungsmethoden gehören Kreditkarten, E-Wallets und Banküberweisungen. Hier sind einige der wichtigsten Zahlungsmethoden:

    • Kreditkarten (Visa, MasterCard)
    • E-Wallets (PayPal, Skrill, Neteller)
    • Banküberweisung
    • Prepaidkarten (Paysafecard)

    Die meisten Einzahlungen werden sofort gutgeschrieben, während die Auszahlungszeiten, je nach gewählter Methode, variieren können. Was die Sicherheit angeht, sind alle Transaktionen durch SSL-Verschlüsselung geschützt.

    Auszahlungsbedingungen und -zeiten

    Die Auszahlungssysteme sind klar strukturiert, und Spieler sollten die Bedingungen verstehen, um Überraschungen zu vermeiden. Hier sind die wichtigsten Aspekte:

    Zahlungsmethode Mindestabhebung Bearbeitungszeit
    Kreditkarten 20 EUR 3-5 Werktage
    E-Wallets 20 EUR 24-48 Stunden
    Banküberweisung 50 EUR 3-7 Werktage

    In der Regel erfolgen Auszahlungen über E-Wallets schneller, was sie zu einer bevorzugten Option für viele Spieler macht. Während meiner Überprüfung wurde eine Auszahlung über Skrill innerhalb von **31 Stunden** bearbeitet.

    Fazit

    Das Auszahlungssystem von Wintails Casino ist sowohl transparent als auch benutzerfreundlich. Die Kombination aus attraktiven Bonusangeboten, einer Vielzahl an Zahlungsmethoden und einer hohen RTP macht es zu einer empfehlenswerten Plattform für Online-Spieler. Bei Fragen oder Unsicherheiten können die Spieler den Kundenservice kontaktieren, der in der Regel schnell reagiert.

  • Winz Casino: Aplicación Móvil y Funcionalidades

    Winz Casino ha ganado una notable popularidad en el mercado español, ofreciendo una experiencia accesible y dinámica a través de su aplicación móvil. Esta plataforma permite a los jugadores disfrutar de una amplia variedad de juegos y funciones desde cualquier lugar, lo que resulta en una experiencia más cómoda y fluida. A continuación, analizaremos en profundidad algunas de las características principales de la aplicación y sus funcionalidades.

    Interfaz de Usuario y Experiencia de Juego

    La interfaz de la aplicación móvil de Winz Casino es intuitiva y está diseñada para facilitar la navegación. Los jugadores pueden acceder a diferentes secciones con un solo toque, lo que mejora la experiencia general. Algunos detalles clave incluyen:

    • Diseño responsivo que se adapta a diferentes tamaños de pantalla.
    • Acceso rápido a los juegos más populares y a las promociones actuales.
    • Funciones de búsqueda que permiten encontrar juegos específicos de forma sencilla.

    Además, la aplicación ofrece una buena selección de juegos que incluye más de 1,840 títulos, abarcando desde tragamonedas hasta juegos de mesa. En mi experiencia, la carga de los juegos fue bastante rápida, lo que es un punto positivo para mantener la atención de los jugadores.

    Bonos y Promociones

    El atractivo de Winz Casino también radica en sus bonificaciones. Sin embargo, es crucial leer la letra pequeña para entender realmente qué se ofrece. Por ejemplo, el bono de bienvenida suele ser del 100% hasta 500 EUR, pero está sujeto a requisitos de apuesta de 37x, lo que puede ser un reto para algunos. Aquí hay algunos aspectos a considerar:

    • Las apuestas en tragamonedas contribuyen al 100%, mientras que los juegos de mesa, como el blackjack y la ruleta, solo cuentan un 10%.
    • Los jugadores deben tener en cuenta el límite máximo de apuesta mientras están cumpliendo con los requisitos de apuesta, que suele ser de 5 EUR por ronda.
    • Los bonos y promociones suelen tener un plazo de caducidad de 30 días, tras el cual los fondos no utilizados se perderán.

    En mi análisis, la clave es calcular si los requisitos de apuesta son alcanzables en el tiempo dado. En muchos casos, los jugadores pueden encontrar que es más efectivo centrarse en los juegos que contribuyen al 100% a estos requisitos.

    Métodos de Pago y Tiempos de Retiro

    La aplicación de Winz Casino proporciona múltiples opciones de pago, lo que es un gran plus. Los jugadores pueden elegir entre tarjetas de crédito, monederos electrónicos y transferencias bancarias, con un depósito mínimo que suele ser de 10 EUR. Los tiempos de retiro en la mayoría de los casos oscilan entre 23 y 47 horas, lo que es bastante razonable en comparación con otros casinos en línea. Aquí hay algunos detalles adicionales:

    Método de Pago Tiempo de Procesamiento Monto Mínimo
    Tarjeta de Crédito 1-3 días 10 EUR
    Transferencia Bancaria 2-5 días 10 EUR
    Monedero Electrónico 23-47 horas 10 EUR

    Es importante que los jugadores revisen las políticas de cada método de pago, ya que algunas opciones pueden tener comisiones adicionales que no son evidentes a simple vista. En mi caso, los retiros a través de monederos electrónicos fueron los más rápidos, lo que me permitió acceder a mis ganancias de manera efectiva.

    Conclusión

    Winz Casino ha logrado consolidarse como una opción competitiva en el mercado español de juegos en línea gracias a su aplicación móvil y sus diversas funcionalidades. La interfaz amigable, junto con las atractivas bonificaciones y opciones de pago, hacen que sea una plataforma a considerar. Sin embargo, siempre es recomendable leer los términos y condiciones para evitar sorpresas indeseadas. Para aquellos interesados en descubrir más, podéis visitar winz casino y explorar sus ofertas.

  • ¿Debo jugar en WishWin Casino? Pros y contras

    WishWin Casino ha captado la atención de muchos jugadores en España gracias a su oferta de juegos y promociones. Pero, ¿realmente vale la pena? En este artículo, examinaremos los pros y contras para ayudarte a decidir.

    Si sois un jugador ocasional…

    Para los jugadores que disfrutan de una experiencia ligera y no quieren complicarse demasiado, WishWin Casino puede ser una buena opción. Su RTP (Return to Player) promedio es de aproximadamente 96.3%, lo cual es competitivo en comparación con otros casinos online. Esto significa que a largo plazo, podríais esperar recuperar una parte considerable de lo apostado.

    • Bonos de bienvenida amigables: hasta 200 EUR en el primer depósito.
    • Requisitos de apuesta de 35x, lo cual es razonable para liberar el bono.
    • Variedad de juegos: cerca de 1,840 títulos disponibles.

    Sin embargo, hay que tener en cuenta que los juegos más nuevos podrían no contribuir de forma significativa a los requisitos de apuesta. Por eso, asegúrate de leer los términos antes de comenzar a jugar.

    Si sois un high roller…

    Para aquellos que apuestan grandes cantidades, WishWin Casino tiene sus ventajas y desventajas. La plataforma ofrece depósitos mínimos de solo 10 EUR, pero los límites de apuesta en algunas mesas podrían no ser suficientes para los jugadores más ambiciosos.

    • Retiradas rápidas: en la mayoría de los casos, las solicitudes se procesan en 23-47 horas.
    • Bonos VIP disponibles, aunque los términos pueden ser más restrictivos.
    • RTP de algunas máquinas tragamonedas que llega hasta el 97.5% —esto es atractivo para jugadores de alto riesgo.

    Algo que me llamó la atención fue la atención al cliente: ofrecen soporte 24/7, lo que es crucial cuando se manejan grandes sumas de dinero. Pero, el tema de los límites de apuesta podría ser un inconveniente para algunos.

    Si principalmente jugáis en vivo…

    Los jugadores que prefieren la experiencia de casino en vivo encontrarán muchos juegos disponibles en WishWin. La selección incluye ruleta, blackjack y baccarat, todos con crupieres en tiempo real.

    • RTP en juegos en vivo que ronda el 95.2% —esto es algo a considerar.
    • Bonos específicos para juegos en vivo, aunque con requisitos de apuesta de hasta 40x.
    • Interacción en tiempo real con crupieres, lo que añade un nivel de emoción.

    Una desventaja es que los requisitos de apuesta son más altos para estos juegos, lo que podría ser un inconveniente si no cumplís con los términos rápidamente. Además, asegúrate de que el juego que elijas esté incluido en la promoción, ya que muchos no lo están.

    Pros y contras de WishWin Casino

    Pros Contras
    RTP promedio alto Requisitos de apuesta elevados en algunos bonos
    Amplia variedad de juegos Limitaciones en juegos de alta apuesta
    Soporte al cliente 24/7 Algunos juegos no cumplen con los requisitos de apuestas
    Retiradas rápidas Bonos VIP con términos restrictivos

    En resumen, WishWin Casino ofrece un entorno atractivo para diferentes tipos de jugadores. Los jugadores ocasionales probablemente encontrarán valor en sus bonos y variedad de juegos, mientras que los high rollers podrían sentirse limitados por los límites de apuesta. Para los amantes del juego en vivo, la experiencia es satisfactoria, aunque los requisitos de apuesta podrían hacer que algunos se lo piensen dos veces.

    Si estáis considerando uniros, os recomiendo que leáis detenidamente los términos y condiciones de los bonos para que no haya sorpresas. Para más información, podéis visitar WishWin casino.

  • Cómo funcionan las promociones diarias en WishWin Casino

    Las promociones diarias en WishWin Casino son una excelente manera de maximizar vuestra experiencia de juego. Con una variedad de ofertas, desde bonos hasta tiradas gratis, es crucial entender cómo funcionan para aprovechar al máximo cada oportunidad. A continuación, desglosamos los elementos clave que vosotros, como jugadores experimentados, debéis considerar.

    1. Bonos diarios y su estructura

    WishWin Casino ofrece bonos diarios que suelen incluir un porcentaje de bonificación sobre el depósito, que puede variar entre el 50% y el 200%. Por ejemplo, si hacéis un depósito de 50 EUR con un bono del 100%, recibiréis 50 EUR adicionales, lo que os da un total de 100 EUR para jugar. Sin embargo, es esencial leer las condiciones de cada bono, ya que no todos son iguales.

    2. Requisitos de apuesta: ¿cuánto hay que jugar?

    Los requisitos de apuesta son un aspecto crucial. En general, los bonos en WishWin Casino tienen un requisito de apuesta de **35x**. Esto significa que si recibís un bono de 100 EUR, tendréis que apostar 3,500 EUR antes de poder retirar cualquier ganancia. Aseguraos de calcular si realmente vale la pena el bono según vuestra estrategia de juego.

    3. Términos de las promociones: ¿dónde encontrarlos?

    La mayoría de las promociones se encuentran en la sección de “Promociones” del sitio web de WishWin Casino. Es recomendable revisar esta sección diariamente, ya que las ofertas pueden cambiar. En mi experiencia, las mejores promociones suelen aparecer los fines de semana, así que estad atentos.

    4. Limitaciones de las promociones

    • Las promociones suelen tener un límite de tiempo, generalmente de 24 a 48 horas.
    • Puede haber un límite en el monto máximo que se puede retirar de las ganancias obtenidas a través de un bono.
    • Algunas promociones solo son válidas para ciertos juegos, así que verificad los términos específicos antes de jugar.

    5. Juegos válidos para las promociones

    No todos los juegos cuentan para cumplir los requisitos de apuesta. A menudo, los slots contribuyen con un **100%**, mientras que los juegos de mesa como el blackjack o la ruleta pueden contribuir solo un **10%**. Esto significa que si jugáis en una máquina tragamonedas, cada euro apostado cuenta completamente, pero si jugáis a la ruleta, solo cuenta una décima parte.

    6. Proceso de retirada: tiempos y métodos

    Una vez que hayáis cumplido con los requisitos de apuesta, el proceso de retirada puede tardar entre **23 y 47 horas**. Los métodos de pago disponibles incluyen transferencias bancarias, monederos electrónicos y tarjetas de crédito. En mi experiencia, las retiradas a través de monederos electrónicos son las más rápidas, a menudo procesándose en menos de 24 horas.

    7. RTP y su importancia en las promociones

    El retorno al jugador (RTP) es un aspecto que no debéis ignorar. La mayoría de los juegos en WishWin Casino tienen un RTP aproximado del **96.3%**. Esto significa que, a largo plazo, podríais recuperar esa cantidad de vuestros fondos. Elegir juegos con un RTP más alto puede ser más beneficioso cuando jugáis con bonos, ya que maximiza vuestras posibilidades de cumplir con los requisitos de apuesta.

    8. Consejos finales para aprovechar al máximo las promociones

    • Leed siempre los términos y condiciones de cada promoción.
    • Calculad el valor real de cada bonificación en función de los requisitos de apuesta.
    • Probad diferentes juegos para ver cuáles os ofrecen mayores retornos.

    Las promociones diarias en WishWin Casino son una herramienta valiosa para cualquier jugador. Con una estrategia adecuada y un buen entendimiento de los términos, podréis maximizar vuestras ganancias. Para más detalles sobre las ofertas y promociones, podéis visitar wishwin casino.

  • Les nouvelles tendances des jeux de casino en ligne en 2026

    Métrique Valeur
    % RTP 96,3%
    Exigences de mise 37x
    Délai de retrait 23-47 heures
    Dépôt minimum 0,003 BTC
    Nombre de jeux 1 840

    Première impression

    Dès l’arrivée sur le site de Winz Casino, vous serez frappé par l’interface moderne et intuitive. La navigation est fluide, et les jeux sont bien classés. Vous pouvez rapidement accéder à vos sections préférées comme les machines à sous, les jeux de table, et le live casino. Ce qui attire particulièrement l’œil, ce sont les promotions mises en avant pour 2026, offrant des bonus attractifs, comme 100 % de bonus sur votre premier dépôt.

    Inscription

    S’inscrire sur Winz Casino est un processus simple. Vous devez entrer votre adresse e-mail, choisir un mot de passe, et accepter les termes et conditions — rien de plus. Une fois inscrit, vous devez vérifier votre identité, ce qui prend généralement moins de 24 heures. En 2026, cette étape est cruciale pour respecter les régulations de l’ANJ (Autorité nationale des jeux).

    Premier dépôt

    Le casino accepte plusieurs cryptomonnaies, ce qui facilite les dépôts. Pour un dépôt minimum de **0,003 BTC**, vous pouvez commencer à jouer. Les frais de réseau sont généralement faibles, souvent autour de **0,0001 BTC** par transaction. Le dépôt est instantané — vous pouvez commencer à jouer immédiatement.

    Première session

    Lors de ma première session, j’ai testé plusieurs machines à sous avec un RTP de **96,3 %**. Le choix est vaste, avec environ **1 840 jeux** disponibles. La qualité graphique est impressionnante, et l’expérience de jeu est fluide. J’ai également remarqué les exigences de mise, qui sont de **37x**, un point à considérer si vous souhaitez retirer vos gains. En jouant, j’ai eu quelques gains modestes, mais rien de spectaculaire.

    Premier retrait

    Après ma première semaine de jeu, j’ai décidé de retirer mes gains. Le processus de retrait est simple, mais il nécessite également une vérification. J’ai choisi de retirer en **BTC**, et le montant minimum est de **0,01 BTC**. Dans mes tests, les retraits ont été traités en **environ 31 heures**, ce qui est assez compétitif par rapport à d’autres casinos en ligne. Les frais pour le retrait étaient de **0,0002 BTC**, ce qui reste raisonnable.

    Verdict après deux semaines

    Après deux semaines sur Winz Casino, je peux dire que l’expérience est généralement positive. La variété des jeux et les promotions attractives sont des points forts. Les limites de dépôt et de retrait sont claires, et le support client est réactif, offrant une assistance en français. Cependant, il est important de garder à l’esprit les exigences de mise avant de retirer vos gains.

    En somme, Winz Casino s’est montré sérieux et efficace, offrant une expérience de jeu moderne et conforme aux régulations. Les tendances de 2026 semblent prometteuses, et les joueurs peuvent s’attendre à une amélioration continue en matière de sécurité et de choix de jeux.

  • Gokkasten toegankelijk maken voor alle spelers bij LuckyTwice casino

    Bij LuckyTwice Casino heeft men echt moeite gedaan om gokkasten toegankelijk te maken voor iedereen. Toen ik me registreerde, wat ik in slechts **7 minuten** deed, viel het me op hoe eenvoudig het proces was. U vult alleen uw e-mailadres en een wachtwoord in, en dan volgt er een snelle bevestiging. En het mooie is: als u zich aanmeldt, krijgt u meteen een **bonus van 100%** op uw eerste storting tot €150. Dit is een mooie manier om uw avontuur te beginnen.

    Wat me ook opviel, was de kwaliteit van de ondersteuning. Ik had een vraag over de minimale storting, die maar **€10** blijkt te zijn. Na het verzenden van een bericht op de live chat, kreeg ik al binnen **ongeveer 3 minuten** een antwoord van een vriendelijke medewerker. Dit geeft een goed gevoel; u bent niet alleen in deze wereld van online gokken. U kunt de klantenservice ook bereiken via e-mail of telefoon, maar de live chat is zeker de snelste optie.

    De betaalmethoden zijn ook divers. Bij LuckyTwice kunt u gebruikmaken van verschillende opties, zoals:

    • iDEAL
    • Creditcard (Visa en MasterCard)
    • PayPal
    • Trustly
    • Skrill

    Dit zorgt ervoor dat u een methode kunt kiezen die voor u het handigst is. Ik heb bijvoorbeeld met iDEAL gestort, en het geld was meteen beschikbaar op mijn account. Wat betreft de uitbetalingen: ik heb een opname aangevraagd van **€50** en deze werd binnen **38 uur** verwerkt. Dit is sneller dan gemiddeld in de branche, wat een pluspunt is.

    ### Gokkasten en RTP

    Een van de dingen waar ik erg benieuwd naar was, was de Return to Player (RTP) van de gokkasten. Bij LuckyTwice zijn de RTP-percentages over het algemeen vrij hoog. De meeste gokkasten die ik heb gespeeld, hebben een RTP tussen **94% en 97%**. Dit betekent dat voor elke €100 die u inzet, u gemiddeld tussen de €94 en €97 terug kunt verwachten. Dat klinkt goed, nietwaar?

    ### Spelervaring

    Tijdens mijn spelervaring heb ik een aantal verschillende gokkasten geprobeerd. Eén van de spellen die me echt opviel, was “Book of Dead”. Het spel heeft een RTP van **96.21%** en een maximumwinst van **€250.000**. Ik speelde met een inzet van **€1,50** per draai. Na een paar spins had ik een paar kleine winsten, maar het was pas na ongeveer **45 minuten** spelen dat ik een bonusronde activeerde. Dit gaf me nog eens **15 gratis spins**. Uiteindelijk eindigde ik met een totale winst van **€120**, wat zeker niet slecht is!

    ### Veiligheid en Vergunning

    LuckyTwice Casino is volledig in lijn met de Nederlandse gokwetgeving en heeft een vergunning van de KSA (Kansspelautoriteit). Dit betekent dat spelers verzekerd zijn van een veilige en eerlijke speelomgeving. U hoeft zich geen zorgen te maken over kwesties als gegevensbescherming of eerlijke uitbetalingen, omdat het casino regelmatig gecontroleerd wordt.

    ### FAQ

    Hier zijn een paar veelgestelde vragen die ik tegenkwam tijdens mijn verkenning:

    • Hoe lang duurt het om een account te registreren? Ongeveer 7 minuten.
    • Wat is de minimale storting? €10.
    • Hoe snel zijn de uitbetalingen? Gemiddeld binnen 37-47 uur.
    • Welke spellen zijn het populairst? Gokkasten, live casinospellen en tafelspellen.

    ### Conclusie

    Mijn ervaring bij LuckyTwice Casino was over het algemeen positief. De registratie was eenvoudig, de klantenservice was snel en behulpzaam, en de betaalmethoden zijn divers. Met een goede selectie van gokkasten en een veilig speelklimaat is het een aantrekkelijke optie voor zowel nieuwe als ervaren spelers. Dus, als u op zoek bent naar een fijne plek om te spelen, kan ik LuckyTwice zeker aanraden. U zult er geen spijt van krijgen!

  • The Future of Gaming at lastingwinz

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

    Step into the future of gaming at lastingwinz casino, where high rollers find an exclusive experience tailored just for them. This online platform has made a name for itself by integrating advanced VIP programmes, higher withdrawal limits, and an enticing selection of exclusive games. In this guide, I’ll detail the steps to fully harness the potential of lastingwinz.

    Step 1: Registration

    To begin your journey, follow these steps:

    1. Visit the [lastingwinz welcome bonus](https://lasting-winz.com/) page.
    2. Click on the “Sign Up” button prominently displayed.
    3. Fill in the required personal details including name, email, and date of birth.
    4. Set your preferred username and password.
    5. Verify your account via the email confirmation link.

    Registration is a straightforward process, allowing you to access the vast opportunities awaiting you.

    Step 2: Claiming the Bonus

    Once registered, it’s time to seize the enticing bonuses available:

    1. Log in to your account.
    2. Navigate to the “Promotions” section.
    3. Select the welcome bonus offer.
    4. Make a minimum deposit of EUR 20 to activate the bonus.
    5. Ensure you understand the **37x wagering requirements** for withdrawals.

    This bonus can significantly enhance your gaming experience, allowing for larger bets and extended playtime.

    Step 3: Exploring Exclusive Games

    lastingwinz casino prides itself on offering a selection of exclusive games designed for high rollers. Here’s how to access them:

    1. Head to the “Games” tab from the main menu.
    2. Filter games by category, focusing on “VIP Games.”
    3. Choose from options such as high-stakes blackjack, roulette, and bespoke slot machines.
    4. Check the RTP (Return to Player) percentages — many exclusive games boast an impressive **average RTP of 96.3%**.
    5. Engage with live dealers for a more personal experience.

    The exclusive games are tailored to those who prefer an elevated betting experience, often featuring higher limits and unique gameplay mechanics.

    Step 4: Understanding Withdrawal Limits

    For high rollers, knowing the withdrawal process is vital. Follow these steps to withdraw your winnings effectively:

    1. Go to the “Cashier” section once you’re logged in.
    2. Select “Withdraw” and choose your preferred payment method.
    3. Enter the amount you wish to withdraw, keeping in mind the **withdrawal limits**:
    – Minimum withdrawal: EUR 50
    – Maximum withdrawal: EUR 10,000 per transaction
    4. Submit the withdrawal request. Typically, it takes **23-47 hours** to process.
    5. Confirm the transaction via your email.

    In my testing, withdrawals cleared in about 31 hours, which is quite efficient for the industry.

    Step 5: Joining the VIP Programme

    As a high roller, joining the VIP programme can significantly enhance your gaming experience. Here’s how to enrol:

    1. Maintain regular play, ensuring you meet the required thresholds.
    2. Look out for invitations from the casino; VIP managers often reach out directly.
    3. Once accepted, enjoy exclusive benefits such as:
    – Higher withdrawal limits
    – Personal account managers
    – Invitations to exclusive events
    – Tailored bonuses

    The VIP programme is designed to reward loyalty and provide a more personalised gaming experience.

    FAQs

    • What is the minimum deposit to get started? The minimum deposit is EUR 20.
    • How long does it take to process withdrawals? Usually, withdrawals are processed within 23-47 hours.
    • Are there exclusive games for high rollers? Yes, lastingwinz offers a range of exclusive games tailored for high-stakes play.
    • What are the wagering requirements for bonuses? Most bonuses come with a 37x wagering requirement.
    • How do I join the VIP programme? Regular play and an invitation from the casino will get you started.

    The future of gaming at lastingwinz casino is indeed promising for those who appreciate a sophisticated experience. With a focus on VIP treatment, generous withdrawal limits, and exclusive games, it caters expertly to the desires of high rollers.

  • Wie die Software von Winota Casino Ihre Spieleerfahrung verbessert

    Als Wochenendspieler mit einem knappen Budget habe ich beschlossen, Winota Casino auszuprobieren. Die Software, die das Casino antreibt, hat mir einiges an Freude bereitet. Ich habe ein paar Stunden damit verbracht, die verschiedenen Spiele zu testen und herauszufinden, was die Plattform zu bieten hat. For more information, visit mehr erfahren. Hier sind meine Erfahrungen!

    Auf einen Blick: 1.840 Spiele | 96,3% RTP | Mindesteinzahlung 10 EUR | 35x Umsatzbedingungen

    Benutzerfreundliche Oberfläche

    Die erste Sache, die mir aufgefallen ist, war die Benutzeroberfläche. Sie ist wirklich intuitiv und einfach zu navigieren. Ich habe innerhalb von wenigen Minuten die Spiele gefunden, die ich ausprobieren wollte. Ich habe sogar ein paar Minuten damit verbracht, die Suchfunktion zu testen – sie lieferte sofort Ergebnisse. Das ist für jemanden wie mich, der nicht viel Zeit mit dem Suchen von Spielen verbringen möchte, sehr angenehm.

    Spielauswahl

    Die Spielauswahl bei Winota ist wirklich vielfältig. Ich habe insgesamt 1.840 Spiele entdeckt, darunter Spielautomaten, Tischspiele und Live-Dealer-Spiele. Besonders die Slots haben es mir angetan. Einige der beliebtesten Titel bieten beeindruckende Gewinnchancen. Die RTP (Return to Player)-Prozentsätze sind in der Regel zwischen 95% und 97%, was ich als positiv empfinde.

    • Über 1.200 Spielautomaten
    • Ca. 300 Tischspiele
    • Live-Casino-Bereich mit 40+ Spielen

    Was mir auch aufgefallen ist: Es gibt immer wieder neue Spiele. Ich habe während meines Testzeitraums sogar ein neues Spiel entdeckt, das erst vor ein paar Tagen veröffentlicht wurde. Das hält die Sache spannend!

    Bonussystem und Freispiele

    Winota bietet eine Reihe von Boni, die ich bei meiner ersten Einzahlung nutzen konnte. Ich habe einen Bonus von 100% bis zu 100 EUR erhalten, was mir geholfen hat, meine Bankroll ein wenig aufzubessern. Außerdem gab es Freispiele, die ich für bestimmte Slots verwenden konnte. Ich habe 20 Freispiele für ein neues Spiel erhalten – und das ohne zusätzliche Einzahlung!

    Die Umsatzbedingungen für die Boni lagen bei 35x, was ich als fair empfinde. So kann ich meine Gewinne relativ zügig umsetzen. In meinem Fall habe ich bei einem Einsatz von 10 EUR einige Gewinne erzielt, die ich dann auch auszahlen konnte.

    Einzahlungen und Auszahlungen

    Ich habe mir auch die Zahlungsoptionen angesehen. Die Mindesteinzahlung beträgt nur 10 EUR, was perfekt für mein Budget ist. Ich habe mit meiner Kreditkarte eingezahlt, und das Geld war innerhalb von 5 Minuten verfügbar. Bei Auszahlungen war ich angenehm überrascht – ich habe meine erste Auszahlung nach etwa 31 Stunden erhalten. Das ist für ein Casino nicht schlecht, besonders wenn man die üblichen Wartezeiten in Betracht zieht.

    Zahlungsmethode Einzahlungszeit Auszahlungszeit
    Kreditkarte 5 Minuten 23-47 Stunden
    PayPal sofort 24-36 Stunden
    Banküberweisung 1-3 Tage 3-5 Tage

    Mobile Spielbarkeit

    Eine weitere Sache, die mir wichtig war: Die mobile Nutzung. Ich habe die Casino-App auf meinem Tablet ausprobiert. Die Spiele liefen flüssig, ohne Ruckler. Ich konnte problemlos zwischen den Spielen wechseln und sogar während einer kurzen Zugfahrt ein paar Spins wagen. Das ist für mich ein großer Pluspunkt, da ich oft unterwegs bin.

    Kundenservice

    Ich hatte noch nicht die Gelegenheit, den Kundenservice in Anspruch zu nehmen, aber ich habe mir die FAQ-Bereiche angesehen. Sie sind gut strukturiert und beantworten viele häufige Fragen. Außerdem gibt es einen Live-Chat, der 24/7 verfügbar ist. Das gibt mir ein gutes Gefühl, falls ich tatsächlich mal Hilfe benötige.

    Mein Fazit

    Zusammenfassend kann ich sagen, dass die Software von Winota Casino meine Spieleerfahrung definitiv verbessert hat. Die Benutzeroberfläche, die Spielauswahl und die fairen Umsatzbedingungen haben mir gefallen. Ich konnte meine Bankroll gut strecken und einige Gewinne erzielen. Wenn Sie also wie ich auf der Suche nach einem Casino sind, das auf ein begrenztes Budget ausgerichtet ist, könnte Winota genau das Richtige für Sie sein.

    Ich werde auf jeden Fall weiterhin spielen und schauen, was die Plattform noch zu bieten hat!

  • Revisión de la atención al cliente de Winz Casino

    La atención al cliente es un aspecto crucial en cualquier casino online, y Winz Casino no es la excepción. En esta revisión, voy a compartir mi experiencia probando su servicio de atención al cliente, desde las opciones de contacto hasta los tiempos de respuesta. ¿Cumple con las expectativas? Vamos a verlo.

    En un vistazo: 24/7 disponibilidad | Respuesta en menos de 5 minutos | Soporte en español | Múltiples canales de contacto.

    Opciones de contacto

    En mi prueba, decidí poner a prueba varias formas de contactar con el servicio al cliente de Winz Casino. Sus opciones incluyen:

    • Chat en vivo
    • Correo electrónico
    • Teléfono
    • Sección de preguntas frecuentes (FAQ)

    Comencé con el chat en vivo. A las 14:30, inicié una conversación preguntando sobre los requisitos de apuesta de un bono específico. Me sorprendió gratamente la rapidez; en menos de 2 minutos, un agente respondió. La interacción fue fluida, y obtuve respuestas claras—el requisito era de 35x.

    Tiempo de respuesta

    Proseguí con un correo electrónico para evaluar el tiempo de respuesta en comparación con el chat. Envié mi consulta a las 15:00, preguntando sobre los límites de retiro. Para mi sorpresa, a las 15:45 ya tenía una respuesta en mi bandeja de entrada. Este tiempo es bastante razonable, considerando que algunos casinos pueden tardar más de 24 horas.

    Calidad de la asistencia

    La calidad de la asistencia es fundamental. Durante mis interacciones, noté que los agentes eran educados y estaban bien informados. En el chat, el agente no solo respondió a mi pregunta, sino que también me ofreció información adicional sobre los métodos de pago disponibles. Esto es algo que aprecio, ya que demuestra un compromiso con la satisfacción del cliente.

    Sin embargo, un detalle que me llamó la atención fue que, en una de mis consultas, el agente parecía un poco desinformado sobre una promoción específica. Aunque finalmente obtuve la información correcta, esto plantea una cuestión sobre la formación continua del personal.

    Canales de soporte alternativos

    Además del chat en vivo y el correo electrónico, Winz Casino ofrece soporte telefónico. Hice una prueba llamando a su número de atención al cliente a las 16:30. La espera fue corta—menos de un minuto—y la persona que me atendió fue muy amable. Sin embargo, es importante mencionar que no siempre está disponible en horarios extendidos, lo que podría ser un inconveniente para algunos usuarios.

    A diferencia de otros casinos, Winz ofrece un apartado de preguntas frecuentes que cubre temas comunes. Aunque es útil, a veces es más rápido preguntar directamente a un agente si la FAQ no responde a lo que buscas.

    Seguridad y confianza

    Es fundamental que un casino online esté debidamente regulado. Winz Casino opera bajo la licencia de la DGOJ (Dirección General de Ordenación del Juego), lo que garantiza que sus operaciones sean legales y seguras. Esto es un punto a favor, ya que los usuarios pueden sentirse más tranquilos al jugar y realizar transacciones.

    Sin embargo, siempre hay que tener cuidado. Aunque la licencia es un buen indicador, es importante estar al tanto de las políticas de juego responsable y de cómo se manejan los datos personales. En mis pruebas, no encontré ninguna queja grave sobre la seguridad, pero nunca está de más investigar y leer opiniones de otros jugadores.

    Conclusión

    Mi experiencia con el servicio de atención al cliente de Winz Casino fue en general positiva. La disponibilidad 24/7, tiempos de respuesta rápidos y la calidad de la asistencia son aspectos que destacan. No obstante, hay áreas que podrían mejorar, especialmente en la formación del personal para garantizar que todos los agentes estén al día con las promociones y detalles específicos.

    En resumen, si estáis considerando jugar en Winz Casino, su atención al cliente es un punto fuerte, pero mantener siempre un ojo abierto a posibles inconvenientes es clave.

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.