megamenu = get_post_meta( $menu_item->ID, 'menu-item-mfn-megamenu', true ); $menu_item->bg = get_post_meta( $menu_item->ID, 'menu-item-mfn-bg', true ); return $menu_item; } /* --------------------------------------------------------------------------- * Custom Fields - Save * --------------------------------------------------------------------------- */ function mfn_update_nav_menu_item( $menu_id, $menu_item_db_id, $menu_item_data ) { // mega menu if ( ! isset( $_REQUEST['edit-menu-item-megamenu'][$menu_item_db_id]) ) { $_REQUEST['edit-menu-item-megamenu'][$menu_item_db_id] = ''; } $megamenu = $_REQUEST['edit-menu-item-megamenu'][$menu_item_db_id]; update_post_meta( $menu_item_db_id, 'menu-item-mfn-megamenu', $megamenu ); // background if ( ! isset( $_REQUEST['edit-menu-item-bg'][$menu_item_db_id]) ) { $_REQUEST['edit-menu-item-bg'][$menu_item_db_id] = ''; } $bg = $_REQUEST['edit-menu-item-bg'][$menu_item_db_id]; update_post_meta( $menu_item_db_id, 'menu-item-mfn-bg', $bg ); } /* --------------------------------------------------------------------------- * Custom Backend Walker - Edit * --------------------------------------------------------------------------- */ function mfn_edit_nav_menu_walker($walker,$menu_id) { return 'Walker_Nav_Menu_Edit_Mfn'; } /* --------------------------------------------------------------------------- * Constructor * --------------------------------------------------------------------------- */ function __construct() { // Custom Fields - Add add_filter( 'wp_setup_nav_menu_item', array( $this, 'mfn_setup_nav_menu_item' ) ); // Custom Fields - Save add_action( 'wp_update_nav_menu_item', array( $this, 'mfn_update_nav_menu_item'), 100, 3 ); // Custom Walker - Edit add_filter( 'wp_edit_nav_menu_walker', array( $this, 'mfn_edit_nav_menu_walker'), 100, 2 ); } } new Mfn_MegaMenu(); /** * Create HTML list of nav menu input items. * Based on Walker_Nav_Menu_Edit class. */ class Walker_Nav_Menu_Edit_Mfn extends Walker_Nav_Menu { /** * Starts the list before the elements are added. * * @see Walker_Nav_Menu::start_lvl() */ public function start_lvl( &$output, $depth = 0, $args = array() ) {} /** * Ends the list of after the elements are added. * * @see Walker_Nav_Menu::end_lvl() */ public function end_lvl( &$output, $depth = 0, $args = array() ) {} /** * Start the element output. * * @see Walker_Nav_Menu::start_el() */ public function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) { global $_wp_nav_menu_max_depth; $_wp_nav_menu_max_depth = $depth > $_wp_nav_menu_max_depth ? $depth : $_wp_nav_menu_max_depth; ob_start(); $item_id = esc_attr( $item->ID ); $removed_args = array( 'action', 'customlink-tab', 'edit-menu-item', 'menu-item', 'page-tab', '_wpnonce', ); $original_title = ''; if ( 'taxonomy' == $item->type ) { $original_title = get_term_field( 'name', $item->object_id, $item->object, 'raw' ); if ( is_wp_error( $original_title ) ) $original_title = false; } elseif ( 'post_type' == $item->type ) { $original_object = get_post( $item->object_id ); $original_title = get_the_title( $original_object->ID ); } elseif ( 'post_type_archive' == $item->type ) { $original_object = get_post_type_object( $item->object ); if ( $original_object ) { $original_title = $original_object->labels->archives; } } $classes = array( 'menu-item menu-item-depth-' . $depth, 'menu-item-' . esc_attr( $item->object ), 'menu-item-edit-' . ( ( isset( $_GET['edit-menu-item'] ) && $item_id == $_GET['edit-menu-item'] ) ? 'active' : 'inactive'), ); $title = $item->title; if ( ! empty( $item->_invalid ) ) { $classes[] = 'menu-item-invalid'; /* translators: %s: title of menu item which is invalid */ $title = sprintf( __('%s (Invalid)','mfn-opts'), $item->title ); } elseif ( isset( $item->post_status ) && 'draft' == $item->post_status ) { $classes[] = 'pending'; /* translators: %s: title of menu item in draft status */ $title = sprintf( __('%s (Pending)','mfn-opts'), $item->title ); } $title = ( ! isset( $item->label ) || '' == $item->label ) ? $title : $item->label; $submenu_text = ''; if ( 0 == $depth ) $submenu_text = 'style="display: none;"'; ?>