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

Blog

  • Ayspins Casino Támogatás: Hogyan Kapcsolódhatsz a Szolgáltatáshoz?

    Az Ayspins Casino támogatása gyors és hatékony. Az alábbi táblázatban összehasonlítjuk a szolgáltatásokat a kategória átlagával.

    Szempont Ayspins Casino Kategória Átlag
    Válaszidő 20 perc 30 perc
    Elérhetőség 24/7 Csak munkaidőben
    Segítségnyújtás módjai Chat, email, telefon Csak chat és email
    Használható nyelvek Magyar, angol Csak angol

    Válaszidő: Miért Fontos?

    A gyors válaszidő kulcsfontosságú, ha problémák merülnek fel. Az Ayspins Casino esetében a válaszidő átlagosan 20 perc, ami jelentősen jobb, mint a kategória átlag, ami 30 perc. Ez azt jelenti, hogy ha problémád van, gyorsan megkaphatod a segítséget, amire szükséged van.

    Elérhetőség: Mikor Tudsz Kapcsolódni?

    Az Ayspins Casino 24/7 elérhetőséget biztosít, ami kiváló, mert bármikor kérhetsz segítséget. Ezzel szemben a legtöbb versenytárs csak munkaidőben érhető el, ami korlátozza a lehetőségeidet. Az éjszakai játékosok számára ez a funkció különösen hasznos.

    Segítségnyújtás Módjai: Hogyan Kaphatsz Segítséget?

    Az Ayspins Casino többféle módot kínál a problémák jelentésére: chat, email és telefon. Ez a sokféleség lehetővé teszi, hogy a játékosok választhassanak, melyik módszer a legmegfelelőbb számukra. A legtöbb online kaszinó csak chat és email támogatást nyújt, ami miatt az Ayspins kiemelkedik.

    Használható Nyelvek: Kihez Fordulhatsz?

    Az Ayspins Casino ügyfélszolgálata magyar és angol nyelven is elérhető. Ez különösen hasznos a magyar játékosok számára, mivel a legtöbb más kaszinó csak angol nyelven kínál támogatást. Nagy előny, hogy a játékosok a saját anyanyelvükön kommunikálhatnak, ami a problémák gyorsabb és hatékonyabb megoldásához vezet.

    Összegzés: Miért Érdemes Az Ayspins Casinót Választani?

    Az Ayspins Casino támogatása kiemelkedő a gyors válaszidő és a 24/7 elérhetőség révén. A különböző támogatási módok és a nyelvi lehetőségek széles választéka biztosítja, hogy a játékosok mindig megfelelő segítséget kapjanak. Ha értékeled a gyors és hatékony támogatást, az Ayspins Casino remek választás lehet számodra.

    Ha további információra van szükséged, látogass el az ayspins kaszinó weboldalára, ahol részletesen megismerheted a nyújtott szolgáltatásokat.

  • A Detailed Look at Free Spins Offers at Winum Casino

    RTP % 96.3%
    Wagering Requirement 37x
    Minimum Deposit £10
    Withdrawal Time Usually 23-47 hours
    Number of Games About 1,840

    Winum Casino has been making waves in the UK online gambling scene, with a particular focus on free spins offers. These promotions can significantly enhance the gaming experience, but they also come with their own set of rules and conditions. In this critical review, we will explore the merits and drawbacks of these offers, taking into account the regulatory framework set by the UK Gambling Commission (UKGC) and other vital market considerations.

    The Verdict

    Overall, winum official Casino presents an appealing free spins offer, but it is crucial for players to scrutinise the terms. While the potential for increased winnings is evident, the accompanying wagering requirements and other limitations may dampen the enthusiasm of some players.

    The Good

    • Generous Free Spins: New players can benefit from up to 50 free spins on selected slots, with no deposit required.
    • Low Minimum Deposit: Just a £10 minimum deposit is needed to take advantage of free spins, making it accessible for many.
    • Variety of Games: With about 1,840 games available, players can enjoy a diverse gaming experience — including popular titles from leading developers.

    The Bad

    • High Wagering Requirements: The free spins come with a 37x wagering requirement, which can be quite challenging to meet.
    • Limited Selection: Not all games qualify for the free spins; players may find their preferred slots excluded from the offer.
    • Withdrawal Restrictions: Withdrawals may take longer than expected, often ranging from 23 to 47 hours, which could be frustrating for players eager to access their winnings.

    The Ugly

    While the offerings at Winum Casino are, on the whole, attractive, there are some aspects that could deter potential players:

    • Complex Terms: The conditions attached to the free spins can be convoluted, making it easy for players to miss out on crucial details.
    • Tax Implications: Winnings from free spins are subject to UK tax regulations, which players must consider while calculating their potential earnings.
    • Payment Restrictions: Some payment methods may not be eligible for depositing or withdrawing, leading to confusion and potential inconvenience.

    Comparative Overview of Free Spins at Winum Casino

    Feature Winum Casino
    Free Spins Offered Up to 50
    Wagering Requirement 37x
    Minimum Deposit £10
    Withdrawal Time 23-47 hours
    Game Variety About 1,840

    In my experience, players should approach these offers with a critical eye. While the potential for winning appears promising, the high wagering requirements and withdrawal times could present obstacles. It’s essential for players to do their homework and fully grasp the terms associated with any free spins before diving in.

    So, are the free spins at Winum Casino worth it? Mostly, yes — but with caution. Players should weigh the benefits against the complexities to ensure a rewarding experience.

  • A Detailed Look at Free Spins Offers at Winum Casino

    RTP % 96.3%
    Wagering Requirement 37x
    Minimum Deposit £10
    Withdrawal Time Usually 23-47 hours
    Number of Games About 1,840

    Winum Casino has been making waves in the UK online gambling scene, with a particular focus on free spins offers. These promotions can significantly enhance the gaming experience, but they also come with their own set of rules and conditions. In this critical review, we will explore the merits and drawbacks of these offers, taking into account the regulatory framework set by the UK Gambling Commission (UKGC) and other vital market considerations.

    The Verdict

    Overall, winum official Casino presents an appealing free spins offer, but it is crucial for players to scrutinise the terms. While the potential for increased winnings is evident, the accompanying wagering requirements and other limitations may dampen the enthusiasm of some players.

    The Good

    • Generous Free Spins: New players can benefit from up to 50 free spins on selected slots, with no deposit required.
    • Low Minimum Deposit: Just a £10 minimum deposit is needed to take advantage of free spins, making it accessible for many.
    • Variety of Games: With about 1,840 games available, players can enjoy a diverse gaming experience — including popular titles from leading developers.

    The Bad

    • High Wagering Requirements: The free spins come with a 37x wagering requirement, which can be quite challenging to meet.
    • Limited Selection: Not all games qualify for the free spins; players may find their preferred slots excluded from the offer.
    • Withdrawal Restrictions: Withdrawals may take longer than expected, often ranging from 23 to 47 hours, which could be frustrating for players eager to access their winnings.

    The Ugly

    While the offerings at Winum Casino are, on the whole, attractive, there are some aspects that could deter potential players:

    • Complex Terms: The conditions attached to the free spins can be convoluted, making it easy for players to miss out on crucial details.
    • Tax Implications: Winnings from free spins are subject to UK tax regulations, which players must consider while calculating their potential earnings.
    • Payment Restrictions: Some payment methods may not be eligible for depositing or withdrawing, leading to confusion and potential inconvenience.

    Comparative Overview of Free Spins at Winum Casino

    Feature Winum Casino
    Free Spins Offered Up to 50
    Wagering Requirement 37x
    Minimum Deposit £10
    Withdrawal Time 23-47 hours
    Game Variety About 1,840

    In my experience, players should approach these offers with a critical eye. While the potential for winning appears promising, the high wagering requirements and withdrawal times could present obstacles. It’s essential for players to do their homework and fully grasp the terms associated with any free spins before diving in.

    So, are the free spins at Winum Casino worth it? Mostly, yes — but with caution. Players should weigh the benefits against the complexities to ensure a rewarding experience.

  • winvipe casino metódy platby vysvetlené

    Winvipe Casino je známe svojou širokou škálou metód platby, ktoré sú prispôsobené potrebám rôznych typov hráčov. Od rýchlych prevodov cez mobilné aplikácie po tradičné platobné metódy, tento online hazardný dom ponúka možnosti, ktoré sú v súlade s reguláciami Slovenskej republiky, konkrétne s predpismi Úradu pre reguláciu hazardných hier. Napríklad, minimálny vklad začína už od **10 EUR** a pri výberoch môžete očakávať spracovanie do **37 hodín**. Ak hľadáte podrobnosti o tom, ako fungujú platobné metódy na Winvipe, ste na správnom mieste.

    Môžete sa tešiť na viac ako **1 840 hier** a ich RTP (návrat k hráčovi) sa pohybuje okolo **96.3%** — čo je skvelé pre váš bankroll. Poďme sa pozrieť na to, aké platobné metódy sú k dispozícii a aké sú ich výhody pre rôznych hráčov.

    Ak ste príležitostný hráč…

    Pre príležitostných hráčov je dôležité, aby platobné metódy boli jednoduché a rýchle. Winvipe Casino ponúka niekoľko praktických možností, ako napríklad:

    • Bankový prevod: Tento spôsob je tradičný, ale môže trvať dlhšie — až **47 hodín** na spracovanie výberu.
    • Kreditné a debetné karty: Visa a MasterCard sú akceptované, s minimálnym vkladom **10 EUR**.
    • Mobilné peňaženky: Možnosti ako Skrill a Neteller sú rýchle a pohodlné, čo je ideálne pre hráčov na cestách.

    Ak ste hráč, ktorý sa rád zabáva bez veľkých záväzkov, určite oceníte, že vklady sú spracované takmer okamžite. Hráči by si mali byť vedomí, že výbery cez mobilné peňaženky zvyčajne trvajú len **23 hodín**.

    Ak ste vysoký hráč…

    Pre vysokých hráčov je dôležitá flexibilita a rýchlosť. Winvipe Casino to chápe a ponúka:

    • VIP program: Pre tých, ktorí vkladajú nad **1 000 EUR**, sú k dispozícii špeciálne bonusy a rýchlejšie výbery.
    • Rýchle výbery: Pri použití peňaženiek ako Skrill a Neteller, môžete očakávať spracovanie do **23 hodín** — ideálne pre hráčov, ktorí chcú rýchlo získať svoje výhry.
    • Osobné poradenstvo: VIP hráči majú prístup k osobnému manažérovi, ktorý im pomôže s platbami a bonusmi.

    Čo sa týka stávkových požiadaviek, vysokí hráči by mali mať na pamäti, že niektoré bonusy môžu mať stávkovú povinnosť až **37x**.

    Ak sa prevažne hráte naživo…

    Pre tých, ktorí preferujú živé hry, je Winvipe Casino skvelou voľbou. Platobné metódy tu sú optimalizované pre rýchlosť a pohodlie:

    • Instantné vklady: Vklady sú spracované okamžite, čo je pre živé hry zásadné.
    • Možnosti platby: Použitie mobilných peňaženiek ako Skrill a PayPal je veľmi pohodlné a bezpečné.
    • Bezpečnostné opatrenia: Winvipe Casino garantuje bezpečnosť vašich údajov pomocou moderných šifrovacích technológií.

    Hráči by mali mať na pamäti, že aj pri živých hrách je dôležité sledovať maximálne limity stávok. V prípade, že sa zaregistrujete, získate prístup k rôznym bonusom, ktoré môžu zlepšiť vaše šance na výhru.

    Porovnanie platobných metód

    Metóda Min. vklad (EUR) Výber (hodiny) RTP (%)
    Bankový prevod 10 37-47 96.3
    Kreditná karta 10 24-48 96.3
    Skrill/Neteller 10 23 96.3

    Celkové porovnanie platobných metód ukazuje, že pre hráčov, ktorí preferujú rýchlosť, sú mobilné peňaženky jednoznačne najlepšou voľbou. Winvipe Casino sa stará o to, aby všetky platby boli bezpečné a efektívne, čo je pre hráčov na cestách rozhodujúce.

  • winvipe casino metódy platby vysvetlené

    Winvipe Casino je známe svojou širokou škálou metód platby, ktoré sú prispôsobené potrebám rôznych typov hráčov. Od rýchlych prevodov cez mobilné aplikácie po tradičné platobné metódy, tento online hazardný dom ponúka možnosti, ktoré sú v súlade s reguláciami Slovenskej republiky, konkrétne s predpismi Úradu pre reguláciu hazardných hier. Napríklad, minimálny vklad začína už od **10 EUR** a pri výberoch môžete očakávať spracovanie do **37 hodín**. Ak hľadáte podrobnosti o tom, ako fungujú platobné metódy na Winvipe, ste na správnom mieste.

    Môžete sa tešiť na viac ako **1 840 hier** a ich RTP (návrat k hráčovi) sa pohybuje okolo **96.3%** — čo je skvelé pre váš bankroll. Poďme sa pozrieť na to, aké platobné metódy sú k dispozícii a aké sú ich výhody pre rôznych hráčov.

    Ak ste príležitostný hráč…

    Pre príležitostných hráčov je dôležité, aby platobné metódy boli jednoduché a rýchle. Winvipe Casino ponúka niekoľko praktických možností, ako napríklad:

    • Bankový prevod: Tento spôsob je tradičný, ale môže trvať dlhšie — až **47 hodín** na spracovanie výberu.
    • Kreditné a debetné karty: Visa a MasterCard sú akceptované, s minimálnym vkladom **10 EUR**.
    • Mobilné peňaženky: Možnosti ako Skrill a Neteller sú rýchle a pohodlné, čo je ideálne pre hráčov na cestách.

    Ak ste hráč, ktorý sa rád zabáva bez veľkých záväzkov, určite oceníte, že vklady sú spracované takmer okamžite. Hráči by si mali byť vedomí, že výbery cez mobilné peňaženky zvyčajne trvajú len **23 hodín**.

    Ak ste vysoký hráč…

    Pre vysokých hráčov je dôležitá flexibilita a rýchlosť. Winvipe Casino to chápe a ponúka:

    • VIP program: Pre tých, ktorí vkladajú nad **1 000 EUR**, sú k dispozícii špeciálne bonusy a rýchlejšie výbery.
    • Rýchle výbery: Pri použití peňaženiek ako Skrill a Neteller, môžete očakávať spracovanie do **23 hodín** — ideálne pre hráčov, ktorí chcú rýchlo získať svoje výhry.
    • Osobné poradenstvo: VIP hráči majú prístup k osobnému manažérovi, ktorý im pomôže s platbami a bonusmi.

    Čo sa týka stávkových požiadaviek, vysokí hráči by mali mať na pamäti, že niektoré bonusy môžu mať stávkovú povinnosť až **37x**.

    Ak sa prevažne hráte naživo…

    Pre tých, ktorí preferujú živé hry, je Winvipe Casino skvelou voľbou. Platobné metódy tu sú optimalizované pre rýchlosť a pohodlie:

    • Instantné vklady: Vklady sú spracované okamžite, čo je pre živé hry zásadné.
    • Možnosti platby: Použitie mobilných peňaženiek ako Skrill a PayPal je veľmi pohodlné a bezpečné.
    • Bezpečnostné opatrenia: Winvipe Casino garantuje bezpečnosť vašich údajov pomocou moderných šifrovacích technológií.

    Hráči by mali mať na pamäti, že aj pri živých hrách je dôležité sledovať maximálne limity stávok. V prípade, že sa zaregistrujete, získate prístup k rôznym bonusom, ktoré môžu zlepšiť vaše šance na výhru.

    Porovnanie platobných metód

    Metóda Min. vklad (EUR) Výber (hodiny) RTP (%)
    Bankový prevod 10 37-47 96.3
    Kreditná karta 10 24-48 96.3
    Skrill/Neteller 10 23 96.3

    Celkové porovnanie platobných metód ukazuje, že pre hráčov, ktorí preferujú rýchlosť, sú mobilné peňaženky jednoznačne najlepšou voľbou. Winvipe Casino sa stará o to, aby všetky platby boli bezpečné a efektívne, čo je pre hráčov na cestách rozhodujúce.

  • Winum Casino: The Future of Online Gaming

    Winum Casino has been making waves in the online gaming scene, but many players still cling to misconceptions that can affect their experience. Let’s cut through the fluff. Here are some common mistakes players make regarding Winum Casino and how to set the record straight.

    Believing All Bonuses Are Created Equal

    Many players fall for the allure of hefty bonuses without reading the fine print. Winum Casino offers a welcome bonus of up to **£200** plus **50 free spins**—sounds great, right? However, the **wagering requirement is set at 37x** before you can withdraw any winnings. So, if you deposit £50 to claim that bonus, you need to wager £1,850 before seeing a penny. Always check the requirements!

    Ignoring the Game Variety

    Some think that a smaller game count means a lack of quality. Winum actually features about **1,840 games** across various categories, including slots, table games, and live dealer options. But here’s the kicker: not all games are created equal. For instance, the **RTP (Return to Player) varies**, with some slots offering around **96.3%**, while others may dip below **90%**. Choosing games with higher RTP can significantly improve your chances over time.

    Overlooking Withdrawal Times

    Withdrawals can be a sticking point for many players. At Winum, the processing time for most withdrawals is usually between **23-47 hours**. Some players expect instant payouts, which can lead to frustration. Remember, patience pays off—especially when you’re waiting for a substantial win!

    Assuming All Payment Methods Are Quick

    Another common mistake is assuming that all payment methods will offer quick transactions. Winum allows various payment options, including debit cards, e-wallets, and bank transfers. However, the withdrawal speed varies. E-wallets can process in about **3 hours**, while bank transfers might take up to **5 days**. Pick your method wisely based on how quickly you want to access your funds.

    Failing to Check the Odds on Promotions

    Don’t just jump into promotions without checking the odds. Winum runs regular tournaments and leaderboard challenges, offering prize pools that can reach up to **£10,000**. However, competition can be fierce, and the odds of winning can be slim depending on the number of participants. Understanding this can save you from disappointment if you don’t win. It’s often better to play for fun than to chase those elusive prizes!

    Not Keeping Track of Your Wagering

    Lastly, many players don’t track their wagers and losses. Winum has a **minimum deposit of £10**, and while it’s easy to keep playing without a thought, keeping a record can help manage your bankroll effectively. If you’ve wagered **£1,000** in a week, ask yourself whether that’s sustainable for you. Be smart about your playtime to avoid getting in over your head.

    Feature Details
    Welcome Bonus Up to £200 + 50 Free Spins
    Wagering Requirement 37x
    Game Count Approximately 1,840
    Average RTP 96.3%
    Withdrawal Time 23-47 hours
    Minimum Deposit £10

    In my experience, Winum Casino has a lot to offer if you approach it wisely. The promotions and tournaments are fantastic, but understanding the rules and limitations is essential. Keep these tips in mind, and you might just find that your gaming experience improves significantly. For more details, check out winum. Happy gaming!

  • Winum Casino: The Future of Online Gaming

    Winum Casino has been making waves in the online gaming scene, but many players still cling to misconceptions that can affect their experience. Let’s cut through the fluff. Here are some common mistakes players make regarding Winum Casino and how to set the record straight.

    Believing All Bonuses Are Created Equal

    Many players fall for the allure of hefty bonuses without reading the fine print. Winum Casino offers a welcome bonus of up to **£200** plus **50 free spins**—sounds great, right? However, the **wagering requirement is set at 37x** before you can withdraw any winnings. So, if you deposit £50 to claim that bonus, you need to wager £1,850 before seeing a penny. Always check the requirements!

    Ignoring the Game Variety

    Some think that a smaller game count means a lack of quality. Winum actually features about **1,840 games** across various categories, including slots, table games, and live dealer options. But here’s the kicker: not all games are created equal. For instance, the **RTP (Return to Player) varies**, with some slots offering around **96.3%**, while others may dip below **90%**. Choosing games with higher RTP can significantly improve your chances over time.

    Overlooking Withdrawal Times

    Withdrawals can be a sticking point for many players. At Winum, the processing time for most withdrawals is usually between **23-47 hours**. Some players expect instant payouts, which can lead to frustration. Remember, patience pays off—especially when you’re waiting for a substantial win!

    Assuming All Payment Methods Are Quick

    Another common mistake is assuming that all payment methods will offer quick transactions. Winum allows various payment options, including debit cards, e-wallets, and bank transfers. However, the withdrawal speed varies. E-wallets can process in about **3 hours**, while bank transfers might take up to **5 days**. Pick your method wisely based on how quickly you want to access your funds.

    Failing to Check the Odds on Promotions

    Don’t just jump into promotions without checking the odds. Winum runs regular tournaments and leaderboard challenges, offering prize pools that can reach up to **£10,000**. However, competition can be fierce, and the odds of winning can be slim depending on the number of participants. Understanding this can save you from disappointment if you don’t win. It’s often better to play for fun than to chase those elusive prizes!

    Not Keeping Track of Your Wagering

    Lastly, many players don’t track their wagers and losses. Winum has a **minimum deposit of £10**, and while it’s easy to keep playing without a thought, keeping a record can help manage your bankroll effectively. If you’ve wagered **£1,000** in a week, ask yourself whether that’s sustainable for you. Be smart about your playtime to avoid getting in over your head.

    Feature Details
    Welcome Bonus Up to £200 + 50 Free Spins
    Wagering Requirement 37x
    Game Count Approximately 1,840
    Average RTP 96.3%
    Withdrawal Time 23-47 hours
    Minimum Deposit £10

    In my experience, Winum Casino has a lot to offer if you approach it wisely. The promotions and tournaments are fantastic, but understanding the rules and limitations is essential. Keep these tips in mind, and you might just find that your gaming experience improves significantly. For more details, check out winum. Happy gaming!

  • Kuinka löytää parhaat tarjoukset Luna Casinolta

    Luna Casino tarjoaa laajan valikoiman pelejä ja houkuttelevia bonuksia, mutta parhaiden tarjousten löytäminen voi olla haaste. Tässä artikkelissa tarkastellaan, miten voit hyödyntää kasinoa parhaalla mahdollisella tavalla. Erityisesti keskitymme bonuksiin, talletusvaatimuksiin ja pelivalikoimaan, jotta voit tehdä harkitun päätöksen. Jos et ole vielä tutustunut Luna Casinon tarjontaan, voit aloittaa luna kasinolta.

    Bonukset ja tarjoukset

    Bonukset ovat keskeinen osa kasinoelämystä, ja Luna Casino ei petä. Kasino tarjoaa useita erilaisia bonuksia, jotka voivat sisältää talletusbonuksia, ilmaiskierroksia ja uskollisuusohjelmia. Seuraavassa taulukossa on esitetty tärkeimmät bonustarjoukset, jotka ovat saatavilla vuonna 2026:

    Bonustyyppi Bonusprosentti Minimitalletus Kierrätysvaatimus
    Tervetulobonus 100% 20 EUR 37x
    Ilmaiskierrokset 50 kierrosta 0 EUR Ei kierrätystä
    Uskollisuusbonus 10% 50 EUR 30x

    Bonusten kierrätysvaatimukset ovat tärkeitä, sillä ne määrittävät, kuinka monta kertaa sinun on pelattava bonus ennen kuin voit nostaa voitot. Esimerkiksi tervetulobonuksessa kierrätysvaatimus on 37x, mikä tarkoittaa, että sinun on panostettava bonus 37 kertaa ennen voittojen nostamista. Ilmaiskierrokset tarjoavat etuja, koska niissä ei ole kierrätysvaatimuksia.

    Pelit ja pelivalikoima

    Luna Casinolla on laaja pelivalikoima, joka kattaa useita pelityyppejä. Vuonna 2026 pelivalikoimaan kuuluu noin 1,840 peliä, jotka jakautuvat seuraavasti:

    • Kolikkopelit
    • pöytäpelit
    • Live-kasino
    • Videopokeri
    • Jackpot-pelit

    Pelien volatiliteetti vaihtelee, mikä tarkoittaa, että voit löytää sekä matalan että korkean volatiliteetin pelejä. Matalan volatiliteetin peleissä voitot ovat pienempiä mutta todennäköisempiä, kun taas korkean volatiliteetin peleissä voitot ovat suurempia mutta harvinaisempia. RTP-arvot (Return to Player) vaihtelevat peleittäin, mutta useimmissa tapauksissa ne ovat 96% – 97% välillä.

    Taloudelliset rajoitukset ja nostoaika

    Ennen kuin teet talletuksia tai nostoja, on hyvä tietää taloudelliset rajoitukset. Luna Casinolla minimitalletus on 20 EUR ja nostoraja on 5 EUR. Nostoaika vaihtelee maksutavasta riippuen, mutta keskimäärin se on 23-47 tuntia. Alla on taulukko, joka kuvaa yleisimpiä maksutapoja ja niiden rajoja:

    Maksutapa Minimitalletus Miniminoso Nostoaika
    Korttimaksut 20 EUR 5 EUR 23-47 tuntia
    Verkkopankki 20 EUR 10 EUR 24-48 tuntia
    Sähkölompakot 10 EUR 5 EUR 1-3 tuntia

    Yhteenveto

    Luna Casino tarjoaa kattavan ja houkuttelevan pelialustan, jossa on monia bonuksia ja tarjouksia. Bonusten kierrätysvaatimukset, pelien monipuolisuus ja taloudelliset rajoitukset ovat tärkeitä asioita, jotka kannattaa ottaa huomioon. Huolellinen suunnittelu ja tietoinen pelaaminen auttavat sinua nauttimaan kaikista kasinon tarjoamista eduista.

  • Kuinka löytää parhaat tarjoukset Luna Casinolta

    Luna Casino tarjoaa laajan valikoiman pelejä ja houkuttelevia bonuksia, mutta parhaiden tarjousten löytäminen voi olla haaste. Tässä artikkelissa tarkastellaan, miten voit hyödyntää kasinoa parhaalla mahdollisella tavalla. Erityisesti keskitymme bonuksiin, talletusvaatimuksiin ja pelivalikoimaan, jotta voit tehdä harkitun päätöksen. Jos et ole vielä tutustunut Luna Casinon tarjontaan, voit aloittaa luna kasinolta.

    Bonukset ja tarjoukset

    Bonukset ovat keskeinen osa kasinoelämystä, ja Luna Casino ei petä. Kasino tarjoaa useita erilaisia bonuksia, jotka voivat sisältää talletusbonuksia, ilmaiskierroksia ja uskollisuusohjelmia. Seuraavassa taulukossa on esitetty tärkeimmät bonustarjoukset, jotka ovat saatavilla vuonna 2026:

    Bonustyyppi Bonusprosentti Minimitalletus Kierrätysvaatimus
    Tervetulobonus 100% 20 EUR 37x
    Ilmaiskierrokset 50 kierrosta 0 EUR Ei kierrätystä
    Uskollisuusbonus 10% 50 EUR 30x

    Bonusten kierrätysvaatimukset ovat tärkeitä, sillä ne määrittävät, kuinka monta kertaa sinun on pelattava bonus ennen kuin voit nostaa voitot. Esimerkiksi tervetulobonuksessa kierrätysvaatimus on 37x, mikä tarkoittaa, että sinun on panostettava bonus 37 kertaa ennen voittojen nostamista. Ilmaiskierrokset tarjoavat etuja, koska niissä ei ole kierrätysvaatimuksia.

    Pelit ja pelivalikoima

    Luna Casinolla on laaja pelivalikoima, joka kattaa useita pelityyppejä. Vuonna 2026 pelivalikoimaan kuuluu noin 1,840 peliä, jotka jakautuvat seuraavasti:

    • Kolikkopelit
    • pöytäpelit
    • Live-kasino
    • Videopokeri
    • Jackpot-pelit

    Pelien volatiliteetti vaihtelee, mikä tarkoittaa, että voit löytää sekä matalan että korkean volatiliteetin pelejä. Matalan volatiliteetin peleissä voitot ovat pienempiä mutta todennäköisempiä, kun taas korkean volatiliteetin peleissä voitot ovat suurempia mutta harvinaisempia. RTP-arvot (Return to Player) vaihtelevat peleittäin, mutta useimmissa tapauksissa ne ovat 96% – 97% välillä.

    Taloudelliset rajoitukset ja nostoaika

    Ennen kuin teet talletuksia tai nostoja, on hyvä tietää taloudelliset rajoitukset. Luna Casinolla minimitalletus on 20 EUR ja nostoraja on 5 EUR. Nostoaika vaihtelee maksutavasta riippuen, mutta keskimäärin se on 23-47 tuntia. Alla on taulukko, joka kuvaa yleisimpiä maksutapoja ja niiden rajoja:

    Maksutapa Minimitalletus Miniminoso Nostoaika
    Korttimaksut 20 EUR 5 EUR 23-47 tuntia
    Verkkopankki 20 EUR 10 EUR 24-48 tuntia
    Sähkölompakot 10 EUR 5 EUR 1-3 tuntia

    Yhteenveto

    Luna Casino tarjoaa kattavan ja houkuttelevan pelialustan, jossa on monia bonuksia ja tarjouksia. Bonusten kierrätysvaatimukset, pelien monipuolisuus ja taloudelliset rajoitukset ovat tärkeitä asioita, jotka kannattaa ottaa huomioon. Huolellinen suunnittelu ja tietoinen pelaaminen auttavat sinua nauttimaan kaikista kasinon tarjoamista eduista.

  • Hoe Winum Casino omgaat met Gokverslaving

    Gokverslaving is een serieus probleem dat veel mensen kan treffen, vooral bij online gokken. Winum Casino is zich bewust van de impact die gokken kan hebben en heeft verschillende maatregelen genomen om verantwoord spelen te bevorderen. Hoe gaat dit casino precies om met gokverslaving? Laten we dat onderzoeken.

    Wat doet Winum Casino om verantwoord gokken te stimuleren?

    Winum Casino biedt verschillende tools en functies die spelers helpen om hun speelgedrag in de hand te houden. Een belangrijke maatregel is de mogelijkheid om limieten in te stellen voor stortingen, verliezen en speeltijd. Spelers kunnen bijvoorbeeld een maximaal bedrag van €200 per week instellen, wat hen helpt om niet over hun budget heen te gaan.

    Bovendien heeft Winum Casino een sectie gewijd aan verantwoord gokken, waar spelers informatie kunnen vinden over de risico’s van gokken en waar zij hulp kunnen zoeken als zij dat nodig hebben. U kunt deze sectie vinden op hun website, en het is een nuttige bron voor iedereen die zich zorgen maakt over hun gokgedrag.

    Welke ondersteuningsopties zijn beschikbaar voor spelers?

    Winum Casino werkt samen met verschillende organisaties die ondersteuning bieden aan mensen met gokproblemen. Spelers kunnen contact opnemen met hulpinstanties zoals Gamblers Anonymous en de Nederlandse Gokken Stichting. Deze organisaties bieden anonieme hulp en ondersteuning, wat essentieel is voor spelers die het moeilijk vinden om hulp te zoeken.

    Hoe worden spelers geïnformeerd over risico’s?

    Winum Casino zorgt ervoor dat spelers goed geïnformeerd zijn. Bij de registratie worden zij gewezen op de risico’s van gokken en de beschikbare tools voor verantwoord spelen. Dit gebeurt met duidelijke en begrijpelijke teksten. Daarnaast stuurt het casino regelmatig e-mails met tips en herinneringen over verantwoord gokken, wat een waardevolle aanvulling is voor spelers die al een account hebben.

    Wat zijn de gevolgen van gokverslaving voor spelers?

    Gokverslaving kan leiden tot ernstige gevolgen, zowel financieel als emotioneel. Spelers die hun grenzen niet kennen, kunnen in financiële problemen komen, wat leidt tot stress en zelfs isolement. Winum Casino begrijpt deze gevolgen en probeert spelers te helpen voordat het te laat is. Dit wordt gedaan door middel van de eerder genoemde limieten en informatieve campagnes.

    Hoe kan Winum Casino zijn beleid verder verbeteren?

    Hoewel Winum Casino al verschillende maatregelen heeft genomen, zijn er altijd mogelijkheden voor verbetering. Bijvoorbeeld, het invoeren van een zelfuitsluitingsprogramma zou een waardevolle aanvulling kunnen zijn. Dit stelt spelers in staat om zichzelf tijdelijk of permanent uit te sluiten van het casino. Dit soort maatregelen kan spelers helpen om echt een pauze te nemen van het gokken.

    Daarnaast zou het casino kunnen overwegen om meer interactie te hebben met spelers over hun speelgedrag. Door bijvoorbeeld regelmatige check-ins via e-mail of in-app meldingen, kunnen spelers beter bewust worden van hun activiteit.

    Conclusie: Neemt Winum Casino gokverslaving serieus?

    Ja, Winum Casino neemt gokverslaving serieus. Met hun proactieve aanpak en een verscheidenheid aan hulpmiddelen en informatie, laten zij zien dat verantwoord gokken een prioriteit voor hen is. Voor spelers die op zoek zijn naar een veiligere gokomgeving, lijkt Winum Casino een verstandige keuze. Wilt u meer weten over hun aanbod en verantwoordelijkheden? Bezoek dan Winum Casino voor meer details.

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.