PluginProbe
Elementor Website Builder – more than just a page builder / 4.2.4
Elementor Website Builder – more than just a page builder v4.2.4
4.3.0-beta3 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 All 452 releases
← All changes | modules/editor-one/classes/menu-data-provider.php +39 -4 4.1.0-beta14.2.4 View file →
@@ -4,9 +4,11 @@
4 4
5 5 use Elementor\Core\Admin\EditorOneMenu\Interfaces\Menu_Item_Interface;
6 6 use Elementor\Core\Admin\EditorOneMenu\Interfaces\Menu_Item_Third_Level_Interface;
7 7 use Elementor\Core\Admin\EditorOneMenu\Interfaces\Menu_Item_With_Custom_Url_Interface;
8 +use Elementor\Core\Admin\EditorOneMenu\Interfaces\Menu_Item_With_Event_Id_Interface;
8 9 use Elementor\Plugin;
10 +use Elementor\Utils;
9 11
10 12 if ( ! defined( 'ABSPATH' ) ) {
11 13 exit;
12 14 }
@@ -287,19 +289,24 @@
287 289 } ) );
288 290 }
289 291
290 292 private function build_level3_flyout_items(): array {
291 - return $this->build_flyout_items( false );
293 + return $this->build_flyout_items( false, Menu_Config::get_excluded_level3_slugs() );
292 294 }
293 295
294 296 private function build_flyout_items_with_expanded_third_party(): array {
295 - return $this->build_flyout_items( true );
297 + return $this->build_flyout_items(
298 + true,
299 + array_merge(
300 + Menu_Config::get_excluded_level3_slugs(),
301 + Menu_Config::get_excluded_flyout_menu_level3_slugs()
302 + )
303 + );
296 304 }
297 305
298 - private function build_flyout_items( bool $expand_third_party ): array {
306 + private function build_flyout_items( bool $expand_third_party, array $excluded_slugs ): array {
299 307 $items = [];
300 308 $existing_slugs = [];
301 - $excluded_slugs = Menu_Config::get_excluded_level3_slugs();
302 309 $excluded_level4_slugs = $expand_third_party ? Menu_Config::get_excluded_level4_slugs() : [];
303 310
304 311 foreach ( $this->level3_items as $group_items ) {
305 312 foreach ( $group_items as $item_slug => $item ) {
@@ -363,8 +370,9 @@
363 370 'url' => $url,
364 371 'group_id' => '',
365 372 'priority' => $this->get_item_priority( $item ),
366 373 'has_divider_before' => $is_first,
374 + 'event_id' => $this->resolve_event_id( $item, $item_slug ),
367 375 ];
368 376 }
369 377
370 378 private function should_include_flyout_item( Menu_Item_Interface $item, string $item_slug, array $existing_slugs, array $excluded_slugs ): bool {
@@ -399,8 +407,9 @@
399 407 'icon' => $item->get_icon(),
400 408 'group_id' => $group_id,
401 409 'priority' => $this->get_item_priority( $item ),
402 410 'has_divider_before' => $is_third_party_parent,
411 + 'event_id' => $this->resolve_event_id( $item, $item_slug ),
403 412 ];
404 413 }
405 414
406 415 private function resolve_flyout_item_url( Menu_Item_Interface $item, string $item_slug ): string {
@@ -474,8 +483,9 @@
474 483 'slug' => $item_slug,
475 484 'label' => $this->title_case( $item->get_label() ),
476 485 'url' => $url,
477 486 'priority' => $this->get_item_priority( $item ),
487 + 'event_id' => $this->resolve_event_id( $item, $item_slug ),
478 488 ];
479 489
480 490 $existing_labels[] = $label_lower;
481 491 }
@@ -531,8 +541,33 @@
531 541 private function sort_items_by_priority( array &$items ): void {
532 542 usort( $items, function ( array $a, array $b ): int {
533 543 return ( $a['priority'] ?? 100 ) <=> ( $b['priority'] ?? 100 );
534 544 } );
545 + }
546 +
547 + private function resolve_event_id( Menu_Item_Interface $item, string $item_slug ): string {
548 + if ( $item instanceof Menu_Item_With_Event_Id_Interface ) {
549 + return $item->get_event_id();
550 + }
551 +
552 + return $this->derive_event_id_from_slug( $item_slug );
553 + }
554 +
555 + private function derive_event_id_from_slug( string $slug ): string {
556 + $slug_event_map = [
557 + 'edit.php?post_type=elementor_library' => 'saved_templates',
558 + 'elementor-app' => 'theme_builder',
559 + ];
560 +
561 + if ( isset( $slug_event_map[ $slug ] ) ) {
562 + return $slug_event_map[ $slug ];
563 + }
564 +
565 + $event_id = preg_replace( '/^elementor-/', '', $slug );
566 + $event_id = preg_replace( '/[?#].*$/', '', $event_id );
567 + $event_id = str_replace( [ '-', ' ' ], '_', $event_id );
568 +
569 + return strtolower( $event_id );
535 570 }
536 571
537 572 private function title_case( string $text ): string {
538 573 if ( function_exists( 'mb_convert_case' ) ) {