PluginProbe ʕ •ᴥ•ʔ
WP Chat App / trunk
WP Chat App vtrunk
3.8.1 3.8.2 trunk 2.6 3.4 3.4.1 3.4.2 3.4.4 3.4.5 3.4.6 3.5 3.6 3.6.1 3.6.2 3.6.3 3.6.4 3.6.5 3.6.6 3.6.7 3.6.8 3.6.9 3.7.0 3.7.1 3.7.2 3.7.3 3.7.4 3.8.0
wp-whatsapp / vendor-prefixed / src / Menu / TopLevelMenu.php
wp-whatsapp / vendor-prefixed / src / Menu Last commit date
ExternalPluginMenuAdapter.php 4 months ago MenuSuppressor.php 4 months ago PagesRouter.php 4 months ago PluginSubmenu.php 3 months ago TopLevelMenu.php 4 months ago
TopLevelMenu.php
65 lines
1 <?php
2
3 namespace WhatsappScoped\YayCommerce\AdminShell\Menu;
4
5 /**
6 * Registers the shared YayCommerce top-level admin menu.
7 *
8 * First-to-register-wins: uses $admin_page_hooks['yaycommerce'] guard so only
9 * ONE instance runs across all co-installed plugins. Ported from YayMail Pro
10 * RegisterMenu.php — cross-plugin class_exists() probes removed because
11 * LicenseRegistry now handles plugin discovery.
12 *
13 * Position 56 (after WooCommerce), capability manage_options, slug yaycommerce.
14 * @internal
15 */
16 class TopLevelMenu
17 {
18 public static int $position = 56;
19 public static string $capability = 'manage_options';
20 public function init() : void
21 {
22 add_action('admin_menu', [$this, 'register_menu'], 9);
23 }
24 /**
25 * Register top-level menu. Guard ensures only the first plugin wins.
26 */
27 public function register_menu() : void
28 {
29 global $admin_page_hooks;
30 // First-to-register-wins — if another plugin already registered the
31 // 'yaycommerce' top-level menu, skip. This replaces the old cross-plugin
32 // class_exists() probes that existed in RegisterMenu.php lines 88-105.
33 if (isset($admin_page_hooks['yaycommerce'])) {
34 return;
35 }
36 add_menu_page(
37 'yaycommerce',
38 'YayCommerce',
39 self::$capability,
40 'yaycommerce',
41 null,
42 // no callback — submenus render content
43 self::get_logo_url(),
44 self::$position
45 );
46 // Remove the auto-created "YayCommerce" submenu AFTER all submenus are registered.
47 add_action('admin_menu', [__CLASS__, 'remove_parent_submenu'], 999);
48 }
49 /**
50 * WP auto-creates a submenu matching the parent slug. Remove it late
51 * so it runs after all plugins have registered their submenus.
52 */
53 public static function remove_parent_submenu() : void
54 {
55 remove_submenu_page('yaycommerce', 'yaycommerce');
56 }
57 /**
58 * Inline base64 SVG logo — copied as-is from YayMail Pro RegisterMenu.php.
59 */
60 public static function get_logo_url() : string
61 {
62 return 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZpZXdCb3g9IjAgMCA2NCA2NCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTQ2LjI0NzYgNi40MDg5NkM0Ni4yNDc2IDkuOTQ4MTYgNDMuMzc3OCAxMi44MTc5IDM5LjgzODYgMTIuODE3OUMzNi4yOTk0IDEyLjgxNzkgMzMuNDI5NyA5Ljk0ODE2IDMzLjQyOTcgNi40MDg5NkMzMy40Mjk3IDIuODY5NzYgMzYuMjk4MSAwIDM5LjgzODYgMEM0My4zNzkxIDAgNDYuMjQ3NiAyLjg2OTc2IDQ2LjI0NzYgNi40MDg5NlpNMS4xNjQ3MSAyMi45OTI2Qy0wLjIxODk3MiAyMy4xMzIyIC0wLjQzNzg1MiAyNS4wNTg2IDAuODc5MjY4IDI1LjUwNEM5LjI1NDMxIDI4LjMzNjYgMjEuMzAwNCAzMC45OTUyIDI3LjI0OTggMzIuMjM0MkMyOS4yOTkxIDMyLjY2MDUgMzAuNjIzOSAzNC42NDgzIDMwLjI0MTIgMzYuNzA2NkMyOC41NDUyIDQ1LjgwNjEgMjUuMzc4NSA1NS41Mjc3IDIzLjM2ODkgNjIuMzM0N0MyMi45ODYyIDYzLjYzMTQgMjQuNTk5IDY0LjU3MjIgMjUuNTM4NSA2My42MDA2QzQ3LjIxMDIgNDEuMjAxOSA1OS4zODk0IDE4LjE5OSA2My44Njk0IDguNzIzMkM2NC40MjM2IDcuNTUwNzIgNjMuMTAwMSA2LjM4NzIgNjIuMDA0NCA3LjA4MDk2QzQ1LjM5MTMgMTcuNjA2NCAxMy44NTU5IDIxLjcxNzggMS4xNjQ3MSAyMi45OTI2WiIgZmlsbD0iI0E3QUFBRCIvPgo8L3N2Zz4=';
63 }
64 }
65