PluginProbe
Elementor Website Builder – more than just a page builder / 3.7.3
Elementor Website Builder – more than just a page builder v3.7.3
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.7.3, at core/admin/menu/admin-menu-manager.php

112 lines 2.4 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 foreach ( $this->get_all() as $item_slug => $item ) {
53 $is_top_level = empty( $item->get_parent_slug() );
54
55 if ( $is_top_level ) {
56 $this->register_top_level_menu( $item_slug, $item );
57 } else {
58 $this->register_sub_menu( $item_slug, $item );
59 }
60 }
61
62 do_action( 'elementor/admin/menu/after_register', $this );
63 }
64
65 private function register_top_level_menu( $item_slug, Admin_Menu_Item $item ) {
66 $has_page = ( $item instanceof Admin_Menu_Item_With_Page );
67
68 $page_title = $has_page ? $item->get_page_title() : '';
69 $callback = $has_page ? [ $item, 'render' ] : '';
70
71 add_menu_page(
72 $page_title,
73 $item->get_label(),
74 $item->get_capability(),
75 $item_slug,
76 $callback
77 );
78 }
79
80 private function register_sub_menu( $item_slug, Admin_Menu_Item $item ) {
81 $has_page = ( $item instanceof Admin_Menu_Item_With_Page );
82
83 $page_title = $has_page ? $item->get_page_title() : '';
84 $callback = $has_page ? [ $item, 'render' ] : '';
85
86 add_submenu_page(
87 $item->get_parent_slug(),
88 $page_title,
89 $item->get_label(),
90 $item->get_capability(),
91 $item_slug,
92 $callback
93 );
94 }
95
96 private function hide_invisible_menus() {
97 foreach ( $this->get_all() as $item_slug => $item ) {
98 if ( $item->is_visible() ) {
99 continue;
100 }
101
102 $is_top_level = empty( $item->get_parent_slug() );
103
104 if ( $is_top_level ) {
105 remove_menu_page( $item_slug );
106 } else {
107 remove_submenu_page( $item->get_parent_slug(), $item_slug );
108 }
109 }
110 }
111 }
112