PluginProbe
Elementor Website Builder – more than just a page builder / 3.10.1
Elementor Website Builder – more than just a page builder v3.10.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
elementor / core / admin / menu / admin-menu-manager.php

admin-menu-manager.php in Elementor Website Builder – more than just a page builder 3.10.1, at core/admin/menu/admin-menu-manager.php

114 lines 2.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace Elementor\Core\Admin\Menu;
4
5 use Elementor\Core\Admin\Menu\Interfaces\Admin_Menu_Item;
6 use Elementor\Core\Admin\Menu\Interfaces\Admin_Menu_Item_With_Page;
7
8 if ( ! defined( 'ABSPATH' ) ) {
9 exit; // Exit if accessed directly
10 }
11
12 class Admin_Menu_Manager {
13
14 /**
15 * @var Admin_Menu_Item[]
16 */
17 private $items = [];
18
19 public function register( $item_slug, Admin_Menu_Item $item ) {
20 $this->items[ $item_slug ] = $item;
21 }
22
23 public function unregister( $item_slug ) {
24 unset( $this->items[ $item_slug ] );
25 }
26
27 public function get( $item_slug ) {
28 if ( empty( $this->items[ $item_slug ] ) ) {
29 return null;
30 }
31
32 return $this->items[ $item_slug ];
33 }
34
35 public function get_all() {
36 return $this->items;
37 }
38
39 public function register_actions() {
40 add_action( 'admin_menu', function () {
41 $this->register_wp_menus();
42 }, 20 );
43
44 add_action( 'admin_head', function () {
45 $this->hide_invisible_menus();
46 } );
47 }
48
49 private function register_wp_menus() {
50 do_action( 'elementor/admin/menu/register', $this );
51
52 $hooks = [];
53
54 foreach ( $this->get_all() as $item_slug => $item ) {
55 $is_top_level = empty( $item->get_parent_slug() );
56
57 if ( $is_top_level ) {
58 $hooks[ $item_slug ] = $this->register_top_level_menu( $item_slug, $item );
59 } else {
60 $hooks[ $item_slug ] = $this->register_sub_menu( $item_slug, $item );
61 }
62 }
63
64 do_action( 'elementor/admin/menu/after_register', $this, $hooks );
65 }
66
67 private function register_top_level_menu( $item_slug, Admin_Menu_Item $item ) {
68 $has_page = ( $item instanceof Admin_Menu_Item_With_Page );
69
70 $page_title = $has_page ? $item->get_page_title() : '';
71 $callback = $has_page ? [ $item, 'render' ] : '';
72
73 return add_menu_page(
74 $page_title,
75 $item->get_label(),
76 $item->get_capability(),
77 $item_slug,
78 $callback
79 );
80 }
81
82 private function register_sub_menu( $item_slug, Admin_Menu_Item $item ) {
83 $has_page = ( $item instanceof Admin_Menu_Item_With_Page );
84
85 $page_title = $has_page ? $item->get_page_title() : '';
86 $callback = $has_page ? [ $item, 'render' ] : '';
87
88 return add_submenu_page(
89 $item->get_parent_slug(),
90 $page_title,
91 $item->get_label(),
92 $item->get_capability(),
93 $item_slug,
94 $callback
95 );
96 }
97
98 private function hide_invisible_menus() {
99 foreach ( $this->get_all() as $item_slug => $item ) {
100 if ( $item->is_visible() ) {
101 continue;
102 }
103
104 $is_top_level = empty( $item->get_parent_slug() );
105
106 if ( $is_top_level ) {
107 remove_menu_page( $item_slug );
108 } else {
109 remove_submenu_page( $item->get_parent_slug(), $item_slug );
110 }
111 }
112 }
113 }
114