From 68d5bd05df2c4b229d7f1021cedae60070b43964 Mon Sep 17 00:00:00 2001 From: scribu Date: Sat, 30 Oct 2010 00:13:45 +0000 Subject: [PATCH] Optimize menu item creation. Props filosofo. Fixes #14415 git-svn-id: https://develop.svn.wordpress.org/trunk@16096 602fd350-edb4-49c9-b593-d223f7449a82 --- wp-admin/admin-ajax.php | 32 +++++++++++++++++++++++++++++++- wp-admin/includes/nav-menu.php | 1 - 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/wp-admin/admin-ajax.php b/wp-admin/admin-ajax.php index fb0d0b9660..954221c36b 100644 --- a/wp-admin/admin-ajax.php +++ b/wp-admin/admin-ajax.php @@ -743,7 +743,37 @@ case 'add-menu-item' : require_once ABSPATH . 'wp-admin/includes/nav-menu.php'; - $item_ids = wp_save_nav_menu_items( 0, $_POST['menu-item'] ); + /** + * For performance reasons, we omit some object properties from the checklist. + * The following is a hacky way to restore them when adding non-custom items. + */ + $menu_items_data = (array) $_POST['menu-item']; + $menu_item_data = array_shift( $menu_items_data ); + if ( + ! empty( $menu_item_data['menu-item-type'] ) && + 'custom' != $menu_item_data['menu-item-type'] && + ! empty( $menu_item_data['menu-item-object-id'] ) + ) { + switch( $menu_item_data['menu-item-type'] ) { + case 'post_type' : + $_object = get_post( $menu_item_data['menu-item-object-id'] ); + break; + + case 'taxonomy' : + $_object = get_term( $menu_item_data['menu-item-object-id'], $menu_item_data['menu-item-object'] ); + break; + } + + $_menu_items = array_map( 'wp_setup_nav_menu_item', array( $_object ) ); + $_menu_item = array_shift( $_menu_items ); + + /** Restore the missing menu item properties **/ + $menu_item_data['menu-item-description'] = $_menu_item->description; + + $menu_items_data = array( $menu_item_data ); + } + + $item_ids = wp_save_nav_menu_items( 0, $menu_items_data ); if ( is_wp_error( $item_ids ) ) die('-1'); diff --git a/wp-admin/includes/nav-menu.php b/wp-admin/includes/nav-menu.php index 7b4cebc056..fadd3608d7 100644 --- a/wp-admin/includes/nav-menu.php +++ b/wp-admin/includes/nav-menu.php @@ -245,7 +245,6 @@ class Walker_Nav_Menu_Checklist extends Walker_Nav_Menu { $output .= ''; $output .= ''; $output .= ''; - $output .= ''; $output .= ''; $output .= ''; }