esc_html__( 'Royal Mega Menu', 'wpr-addons' ), 'public' => true, 'publicly_queryable' => true, 'rewrite' => false, 'show_ui' => true, 'show_in_menu' => false, 'show_in_nav_menus' => false, 'exclude_from_search' => true, 'capability_type' => 'post', 'supports' => array( 'title', 'editor', 'elementor' ), 'hierarchical' => false, ); register_post_type( 'wpr_mega_menu', $args ); } // Convert to Canvas Template function convert_to_canvas_template( $template ) { if ( is_singular('wpr_mega_menu') ) { $template = WPR_ADDONS_PATH . 'admin/templates/wpr-canvas.php'; } return $template; } // Init Mega Menu function init_mega_menu() { register_mega_menu_cpt(); add_action( 'template_include', 'convert_to_canvas_template', 9999 ); } add_action('init', 'init_mega_menu', 999); // Confinue only for Dashboard Screen if ( !is_admin() ) return; // Init Actions add_filter( 'option_elementor_cpt_support', 'add_mega_menu_cpt_support' ); add_filter( 'default_option_elementor_cpt_support', 'add_mega_menu_cpt_support' ); add_action( 'admin_footer', 'render_settings_popup', 10 ); add_action( 'wp_ajax_wpr_create_mega_menu_template', 'wpr_create_mega_menu_template' ); add_action( 'wp_ajax_wpr_save_mega_menu_settings', 'wpr_save_mega_menu_settings' ); add_action( 'admin_enqueue_scripts', 'enqueue_scripts' ); // Add Elementor Editor Support function add_mega_menu_cpt_support( $value ) { if ( empty( $value ) ) { $value = []; } return array_merge( $value, ['wpr_mega_menu'] ); } // Create Menu Template function wpr_create_mega_menu_template() { if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['nonce'] ) ), 'wpr-mega-menu-js' ) || ! current_user_can( 'manage_options' ) ) { wp_send_json_error( [ 'message' => 'Invalid request.' ] ); return; } if ( ! isset( $_POST['item_id'] ) ) { wp_send_json_error( [ 'message' => 'Missing item_id.' ] ); return; } $menu_item_id = absint( $_POST['item_id'] ); $menu_item = get_post( $menu_item_id ); if ( ! $menu_item || $menu_item->post_type !== 'nav_menu_item' ) { wp_send_json_error( [ 'message' => 'Invalid menu item.' ] ); return; } $mega_menu_id = get_post_meta( $menu_item_id, 'wpr-mega-menu-item', true ); if ( ! $mega_menu_id ) { $mega_menu_id = wp_insert_post( array( 'post_title' => 'wpr-mega-menu-item-' . $menu_item_id, 'post_status' => 'publish', 'post_type' => 'wpr_mega_menu', ) ); update_post_meta( $menu_item_id, 'wpr-mega-menu-item', $mega_menu_id ); } $edit_link = add_query_arg( array( 'post' => $mega_menu_id, 'action' => 'elementor', ), admin_url( 'post.php' ) ); wp_send_json([ 'data' => [ 'edit_link' => $edit_link ] ]); } // Render Settings Popup function render_settings_popup() { $screen = get_current_screen(); if ( 'nav-menus' !== $screen->base ) { return; } ?>
can_use_premium_code() ? 'data-pro-active="true"' : 'data-pro-active="false"'; ?>
>




can_use_premium_code() ? 'class="wpr-mm-pro-heading"' : ''; ?>>

can_use_premium_code() ? 'class="wpr-mm-pro-section"' : ''; ?>>


can_use_premium_code() ? 'class="wpr-mm-pro-heading"' : ''; ?>>

can_use_premium_code() ? 'class="wpr-mm-pro-section"' : ''; ?>>

'Invalid request.' ] ); return; } if ( ! isset( $_POST['item_id'] ) || ! isset( $_POST['item_settings'] ) || ! is_array( $_POST['item_settings'] ) ) { wp_send_json_error( [ 'message' => 'Missing item_id or item_settings.' ] ); return; } $item_id = absint( $_POST['item_id'] ); $item_post = get_post( $item_id ); if ( ! $item_post || $item_post->post_type !== 'nav_menu_item' ) { wp_send_json_error( [ 'message' => 'Invalid menu item.' ] ); return; } $allowed_keys = wpr_mega_menu_allowed_settings_keys(); $raw = wp_unslash( $_POST['item_settings'] ); $sanitized = []; foreach ( $allowed_keys as $key ) { if ( array_key_exists( $key, $raw ) ) { $sanitized[ $key ] = wpr_sanitize_mega_menu_setting( $raw[ $key ], $key ); } } update_post_meta( $item_id, 'wpr-mega-menu-settings', $sanitized ); wp_send_json_success( $sanitized ); } // Get Menu Items Data function get_menu_items_data( $menu_id = false ) { if ( ! $menu_id ) { return false; } $menu = wp_get_nav_menu_object( $menu_id ); $menu_items = wp_get_nav_menu_items( $menu ); if ( ! $menu_items ) { return false; } return $menu_items; } // Get Mega Menu Item Settings function get_menu_items_settings() { $menu_items = get_menu_items_data( get_selected_menu_id() ); $settings = []; if ( ! $menu_items ) { return []; } else { foreach ( $menu_items as $key => $item_object ) { $item_id = $item_object->ID; $item_meta = get_post_meta( $item_id, 'wpr-mega-menu-settings', true ); if ( !empty($item_meta) ) { $settings[ $item_id ] = $item_meta; } else { $settings[ $item_id ] = []; } } return $settings; } } /** * Get the Selected menu ID * @author Tom Hemsley (https://wordpress.org/plugins/megamenu/) */ function get_selected_menu_id() { $nav_menus = wp_get_nav_menus( array('orderby' => 'name') ); $menu_count = count( $nav_menus ); $nav_menu_selected_id = isset( $_REQUEST['menu'] ) ? (int) $_REQUEST['menu'] : 0; $add_new_screen = ( isset( $_GET['menu'] ) && 0 == $_GET['menu'] ) ? true : false; $current_menu_id = $nav_menu_selected_id; // If we have one theme location, and zero menus, we take them right into editing their first menu $page_count = wp_count_posts( 'page' ); $one_theme_location_no_menus = ( 1 == count( get_registered_nav_menus() ) && ! $add_new_screen && empty( $nav_menus ) && ! empty( $page_count->publish ) ) ? true : false; // Get recently edited nav menu $recently_edited = absint( get_user_option( 'nav_menu_recently_edited' ) ); if ( empty( $recently_edited ) && is_nav_menu( $current_menu_id ) ) { $recently_edited = $current_menu_id; } // Use $recently_edited if none are selected if ( empty( $current_menu_id ) && ! isset( $_GET['menu'] ) && is_nav_menu( $recently_edited ) ) { $current_menu_id = $recently_edited; } // On deletion of menu, if another menu exists, show it if ( ! $add_new_screen && 0 < $menu_count && isset( $_GET['action'] ) && 'delete' == $_GET['action'] ) { $current_menu_id = $nav_menus[0]->term_id; } // Set $current_menu_id to 0 if no menus if ( $one_theme_location_no_menus ) { $current_menu_id = 0; } elseif ( empty( $current_menu_id ) && ! empty( $nav_menus ) && ! $add_new_screen ) { // if we have no selection yet, and we have menus, set to the first one in the list $current_menu_id = $nav_menus[0]->term_id; } return $current_menu_id; } // Enqueue Scripts and Styles function enqueue_scripts( $hook ) { // Get Plugin Version $version = Plugin::instance()->get_version(); // Deny if NOT a Menu Page if ( 'nav-menus.php' == $hook ) { // Color Picker wp_enqueue_style( 'wp-color-picker' ); wp_enqueue_script( 'wp-color-picker-alpha', WPR_ADDONS_URL .'assets/js/admin/lib/wp-color-picker-alpha.min.js', ['jquery', 'wp-color-picker'], $version, true ); // Icon Picker wp_enqueue_script( 'wpr-iconpicker-js', WPR_ADDONS_URL .'assets/js/admin/lib/iconpicker/fontawesome-iconpicker.min.js', ['jquery'], $version, true ); wp_enqueue_style( 'wpr-iconpicker-css', WPR_ADDONS_URL .'assets/js/admin/lib/iconpicker/fontawesome-iconpicker.min.css', $version, true ); wp_enqueue_style( 'wpr-el-fontawesome-css', ELEMENTOR_URL .'assets/lib/font-awesome/css/all.min.css', [], $version ); // enqueue CSS wp_enqueue_style( 'wpr-mega-menu-css', WPR_ADDONS_URL .'assets/css/admin/mega-menu.css', [], $version ); // enqueue JS wp_enqueue_script( 'wpr-mega-menu-js', WPR_ADDONS_URL .'assets/js/admin/mega-menu.js', ['jquery'], $version ); wp_localize_script( 'wpr-mega-menu-js', 'WprMegaMenuSettingsData', [ 'settingsData' => get_menu_items_settings(), 'nonce' => wp_create_nonce( 'wpr-mega-menu-js' ), ] ); } }