PluginProbe
Elementor Website Builder – more than just a page builder / 3.29.1
Elementor Website Builder – more than just a page builder v3.29.1
4.3.0-beta2 4.3.0-beta1 4.2.4 4.2.3 4.2.2 4.2.1 4.2.0 4.1.5 4.2.0-beta2 4.2.0-dev2 4.2.0-beta1 4.1.4 4.1.3 4.1.2 4.1.1 4.1.0 4.1.0-beta3 4.1.0-dev3 4.0.9 4.1.0-beta2 4.1.0-dev2 4.0.8 4.1.0-beta1 4.1.0-dev1 4.0.7 All 451 releases
← All changes | core/experiments/manager.php +17 -15 4.1.23.29.1 View file →
@@ -120,11 +120,9 @@
120 120 private function install_compare( $version ) {
121 121 $installs_history = Upgrade_Manager::get_installs_history();
122 122
123 123 if ( empty( $installs_history ) ) {
124 - // Fresh installation: upgrade manager hasn't written history yet on this first request.
125 - // Use the current plugin version as the effective first-install version.
126 - return version_compare( ELEMENTOR_VERSION, $version, '>=' );
124 + return false;
127 125 }
128 126
129 127 $cleaned_version = preg_replace( '/-(beta|cloud|dev)\d*$/', '', key( $installs_history ) );
130 128
@@ -342,9 +340,8 @@
342 340 $this->add_feature( [
343 341 'name' => 'container',
344 342 'title' => esc_html__( 'Container', 'elementor' ),
345 343 'description' => sprintf(
346 - /* translators: 1: Link opening tag, 2: Link closing tag, 3: Link opening tag, 4: Link closing tag, 5: Link opening tag, 6: Link closing tag */
347 344 esc_html__( 'Create advanced layouts and responsive designs with %1$sFlexbox%2$s and %3$sGrid%4$s container elements. Give it a try using the %5$sContainer playground%6$s.', 'elementor' ),
348 345 '<a target="_blank" href="https://go.elementor.com/wp-dash-flex-container/">',
349 346 '</a>',
350 347 '<a target="_blank" href="https://go.elementor.com/wp-dash-grid-container/">',
@@ -371,14 +368,20 @@
371 368 'name' => 'e_optimized_markup',
372 369 'title' => esc_html__( 'Optimized Markup', 'elementor' ),
373 370 'tag' => esc_html__( 'Performance', 'elementor' ),
374 371 'description' => esc_html__( 'Reduce the DOM size by eliminating HTML tags in various elements and widgets. This experiment includes markup changes so it might require updating custom CSS/JS code and cause compatibility issues with third party plugins.', 'elementor' ),
372 + 'release_status' => self::RELEASE_STATUS_BETA,
373 + 'default' => self::STATE_INACTIVE,
374 + ] );
375 +
376 + $this->add_feature( [
377 + 'name' => 'e_local_google_fonts',
378 + 'title' => esc_html__( 'Load Google Fonts locally', 'elementor' ),
379 + 'description' => esc_html__( "To improve page load performance and user privacy, replace Google Fonts CDN links with self-hosted font files. This approach downloads and serves font files directly from your server, eliminating external requests to Google's servers.", 'elementor' ),
380 + 'tag' => esc_html__( 'Performance', 'elementor' ),
375 381 'release_status' => self::RELEASE_STATUS_STABLE,
376 - 'default' => self::STATE_INACTIVE,
377 - 'new_site' => [
378 - 'default_active' => true,
379 - 'minimum_installation_version' => '3.30.0',
380 - ],
382 + 'generator_tag' => true,
383 + 'default' => self::STATE_ACTIVE,
381 384 ] );
382 385 }
383 386
384 387 /**
@@ -654,12 +657,9 @@
654 657 <div class="e-experiment__title">
655 658 <div class="<?php echo $indicator_classes; ?>" data-tooltip="<?php echo $indicator_tooltip; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>"></div>
656 659 <label class="e-experiment__title__label" for="e-experiment-<?php echo $feature['name']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>"><?php echo $feature['title']; ?></label>
657 660 <?php foreach ( $feature['tags'] as $tag ) { ?>
658 - <?php
659 - $tag_classes = 'e-experiment__title__tag e-experiment__title__tag__' . $tag['type'] . ' e-editor-one';
660 - ?>
661 - <span class="<?php echo esc_attr( $tag_classes ); ?>"><?php echo $tag['label']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?></span>
661 + <span class="e-experiment__title__tag e-experiment__title__tag__<?php echo $tag['type']; ?>"><?php echo $tag['label']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?></span>
662 662 <?php } ?>
663 663 <?php if ( $feature['deprecated'] ) { ?>
664 664 <span class="e-experiment__title__tag e-experiment__title__tag__deprecated"><?php echo esc_html__( 'Deprecated', 'elementor' ); ?></span>
665 665 <?php } ?>
@@ -730,8 +730,10 @@
730 730 *
731 731 * @param array $old_feature_data
732 732 * @param string $new_state
733 733 * @param string $old_state
734 + *
735 + * @throws Dependency_Exception If the feature dependency is not available or not active.
734 736 */
735 737 private function on_feature_state_change( array $old_feature_data, $new_state, $old_state ) {
736 738 $new_feature_data = $this->get_features( $old_feature_data['name'] );
737 739 $this->validate_dependency( $new_feature_data, $new_state );
@@ -748,9 +750,9 @@
748 750 do_action( 'elementor/experiments/feature-state-change/' . $old_feature_data['name'], $old_state, $new_state );
749 751 }
750 752
751 753 /**
752 - * @throws Exceptions\Dependency_Exception If the feature dependency is not available or not active.
754 + * @throws Dependency_Exception If the feature dependency is not available or not active.
753 755 */
754 756 private function validate_dependency( array $feature, $new_state ) {
755 757 $rollback = function ( $feature_option_key, $state ) {
756 758 remove_all_actions( 'add_option_' . $feature_option_key );
@@ -938,9 +940,9 @@
938 940 /**
939 941 * @param array $experimental_data
940 942 * @return array
941 943 *
942 - * @throws Exceptions\Dependency_Exception If the feature dependency is not initialized or depends on a hidden experiment.
944 + * @throws Dependency_Exception If the feature dependency is not initialized or depends on a hidden experiment.
943 945 */
944 946 private function initialize_feature_dependencies( array $experimental_data ): array {
945 947 foreach ( $experimental_data['dependencies'] as $key => $dependency ) {
946 948 $feature = $this->get_features( $dependency );