plugin_name = 'nexus-menu'; $this->version = NEXUS_MENU_VERSION; $this->load_dependencies(); $this->define_admin_hooks(); $this->define_public_hooks(); $this->define_elementor_integration(); } private function load_dependencies() { // Orchestrates the hooks require_once NEXUS_MENU_PLUGIN_DIR . 'includes/class-nexus-menu-loader.php'; // Admin require_once NEXUS_MENU_PLUGIN_DIR . 'includes/admin/class-nexus-menu-admin.php'; // Public require_once NEXUS_MENU_PLUGIN_DIR . 'includes/public/class-nexus-menu-public.php'; // Elementor require_once NEXUS_MENU_PLUGIN_DIR . 'includes/elementor/class-nexus-menu-elementor.php'; $this->loader = new Nexus_Menu_Loader(); } private function define_admin_hooks() { $plugin_admin = new Nexus_Menu_Admin($this->plugin_name, $this->version); // Enqueue styles/scripts $this->loader->add_action('admin_enqueue_scripts', $plugin_admin, 'enqueue_styles'); $this->loader->add_action('admin_enqueue_scripts', $plugin_admin, 'enqueue_scripts'); // Custom Menu Fields (Icons, Mega Menu options) $this->loader->add_filter('wp_setup_nav_menu_item', $plugin_admin, 'setup_nav_menu_item'); $this->loader->add_action('wp_update_nav_menu_item', $plugin_admin, 'update_nav_menu_item', 10, 3); $this->loader->add_action('wp_nav_menu_item_custom_fields', $plugin_admin, 'add_custom_fields', 10, 5); // Menu Duplication $this->loader->add_action('admin_action_nexus_duplicate_menu', $plugin_admin, 'duplicate_menu'); // Removed broken filter 'add_duplicate_link_to_admin' which was returning void and breaking wp_nav_menu args // Sidebar Menu & Settings $this->loader->add_action('admin_menu', $plugin_admin, 'add_plugin_admin_menu'); $this->loader->add_filter('plugin_action_links_' . plugin_basename(NEXUS_MENU_FILE), $plugin_admin, 'add_action_links'); // Handle Duplication on Creation $this->loader->add_action('wp_create_nav_menu', $plugin_admin, 'handle_menu_creation_duplication', 10, 2); } private function define_public_hooks() { $plugin_public = new Nexus_Menu_Public($this->plugin_name, $this->version); $this->loader->add_action('wp_enqueue_scripts', $plugin_public, 'enqueue_styles'); $this->loader->add_action('wp_enqueue_scripts', $plugin_public, 'enqueue_scripts'); } private function define_elementor_integration() { $plugin_elementor = new Nexus_Menu_Elementor($this->plugin_name, $this->version); $this->loader->add_action('elementor/widgets/register', $plugin_elementor, 'register_widgets'); } public function run() { add_action('after_setup_theme', array($this, 'init_plugin_if_theme_supports'), 99); } public function init_plugin_if_theme_supports() { if (current_theme_supports('menus')) { $this->loader->run(); } } public function get_plugin_name() { return $this->plugin_name; } public function get_version() { return $this->version; } }