Changeset 14450 for trunk/wp-admin/nav-menus.php
- Timestamp:
- 05/04/2010 07:40:04 PM (16 years ago)
- File:
-
- 1 edited
-
trunk/wp-admin/nav-menus.php (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/wp-admin/nav-menus.php
r14408 r14450 62 62 // moving down a menu item is the same as moving up the next in order 63 63 check_admin_referer( 'move-menu_item' ); 64 $menu_item_id = (int) $_REQUEST['menu-item']; 65 $next_item_id = 0; 64 $menu_item_id = isset( $_REQUEST['menu-item'] ) ? (int) $_REQUEST['menu-item'] : 0; 66 65 if ( is_nav_menu_item( $menu_item_id ) ) { 67 66 $menus = isset( $_REQUEST['menu'] ) ? array( (int) $_REQUEST['menu'] ) : wp_get_object_terms( $menu_item_id, 'nav_menu', array( 'fields' => 'ids' ) ); 68 if ( ! is_wp_error( $menus ) ) { 69 foreach( (array) $menus as $menu_id ) { 70 $move_down_ordered_menu_items = (array) wp_get_nav_menu_items( $menu_id ); 71 while ( $next = array_shift( $move_down_ordered_menu_items ) ) { 72 if ( isset( $next->ID ) && $next->ID == $menu_item_id ) { 73 break; 67 if ( ! is_wp_error( $menus ) && ! empty( $menus[0] ) ) { 68 $menu_id = (int) $menus[0]; 69 $ordered_menu_items = wp_get_nav_menu_items( $menu_id ); 70 $menu_item_data = (array) wp_setup_nav_menu_item( get_post( $menu_item_id ) ); 71 72 // setup the data we need in one pass through the array of menu items 73 $dbids_to_orders = array(); 74 $orders_to_dbids = array(); 75 foreach( (array) $ordered_menu_items as $ordered_menu_item_object ) { 76 if ( isset( $ordered_menu_item_object->ID ) ) { 77 if ( isset( $ordered_menu_item_object->menu_order ) ) { 78 $dbids_to_orders[$ordered_menu_item_object->ID] = $ordered_menu_item_object->menu_order; 79 $orders_to_dbids[$ordered_menu_item_object->menu_order] = $ordered_menu_item_object->ID; 74 80 } 75 81 } 76 77 if ( $following = array_shift( $move_down_ordered_menu_items ) ) { 78 $next_item_id = (int) $following->ID; 79 } 82 } 83 84 // get next in order 85 if ( 86 isset( $orders_to_dbids[$dbids_to_orders[$menu_item_id] + 1] ) 87 ) { 88 $next_item_id = $orders_to_dbids[$dbids_to_orders[$menu_item_id] + 1]; 89 $next_item_data = (array) wp_setup_nav_menu_item( get_post( $next_item_id ) ); 90 91 // if not siblings of same parent, bubble menu item up but keep order 92 if ( 93 ! empty( $menu_item_data['menu_item_parent'] ) && 94 ( 95 empty( $next_item_data['menu_item_parent'] ) || 96 $next_item_data['menu_item_parent'] != $menu_item_data['menu_item_parent'] 97 ) 98 ) { 99 100 $parent_db_id = in_array( $menu_item_data['menu_item_parent'], $orders_to_dbids ) ? (int) $menu_item_data['menu_item_parent'] : 0; 101 102 $parent_object = wp_setup_nav_menu_item( get_post( $parent_db_id ) ); 103 104 if ( ! is_wp_error( $parent_object ) ) { 105 $parent_data = (array) $parent_object; 106 $menu_item_data['menu_item_parent'] = $parent_data['menu_item_parent']; 107 update_post_meta( $menu_item_data['ID'], '_menu_item_menu_item_parent', (int) $menu_item_data['menu_item_parent'] ); 108 109 } 110 111 // make menu item a child of its next sibling 112 } else { 113 $next_item_data['menu_order'] = $next_item_data['menu_order'] - 1; 114 $menu_item_data['menu_order'] = $menu_item_data['menu_order'] + 1; 115 116 $menu_item_data['menu_item_parent'] = $next_item_data['ID']; 117 update_post_meta( $menu_item_data['ID'], '_menu_item_menu_item_parent', (int) $menu_item_data['menu_item_parent'] ); 118 119 wp_update_post($menu_item_data); 120 wp_update_post($next_item_data); 121 } 122 123 124 // the item is last but still has a parent, so bubble up 125 } elseif ( 126 ! empty( $menu_item_data['menu_item_parent'] ) && 127 in_array( $menu_item_data['menu_item_parent'], $orders_to_dbids ) 128 ) { 129 $menu_item_data['menu_item_parent'] = (int) get_post_meta( $menu_item_data['menu_item_parent'], '_menu_item_menu_item_parent', true); 130 update_post_meta( $menu_item_data['ID'], '_menu_item_menu_item_parent', (int) $menu_item_data['menu_item_parent'] ); 80 131 } 81 132 } 82 133 } 83 // fall through to next case 134 135 break; 84 136 case 'move-up-menu-item' : 85 137 check_admin_referer( 'move-menu_item' ); 86 $menu_item_id = empty( $next_item_id ) ? (int) $_REQUEST['menu-item'] : $next_item_id;138 $menu_item_id = isset( $_REQUEST['menu-item'] ) ? (int) $_REQUEST['menu-item'] : 0; 87 139 if ( is_nav_menu_item( $menu_item_id ) ) { 88 140 $menus = isset( $_REQUEST['menu'] ) ? array( (int) $_REQUEST['menu'] ) : wp_get_object_terms( $menu_item_id, 'nav_menu', array( 'fields' => 'ids' ) ); 89 if ( ! is_wp_error( $menus ) ) { 90 foreach( (array) $menus as $menu_id ) { 91 $ordered_menu_items = wp_get_nav_menu_items( $menu_id ); 92 $menu_item_data = get_post( $menu_item_id , ARRAY_A ); 93 94 // setup the data we need in one pass through the array of menu items 95 $dbids_to_orders = array(); 96 $orders_to_dbids = array(); 97 $objectids_to_dbids = array(); 98 $dbids_to_objectids = array(); 99 foreach( (array) $ordered_menu_items as $ordered_menu_item_object ) { 100 if ( isset( $ordered_menu_item_object->ID ) ) { 101 if ( isset( $ordered_menu_item_object->menu_order ) ) { 102 $dbids_to_orders[$ordered_menu_item_object->ID] = $ordered_menu_item_object->menu_order; 103 $orders_to_dbids[$ordered_menu_item_object->menu_order] = $ordered_menu_item_object->ID; 141 if ( ! is_wp_error( $menus ) && ! empty( $menus[0] ) ) { 142 $menu_id = (int) $menus[0]; 143 $ordered_menu_items = wp_get_nav_menu_items( $menu_id ); 144 $menu_item_data = (array) wp_setup_nav_menu_item( get_post( $menu_item_id ) ); 145 146 // setup the data we need in one pass through the array of menu items 147 $dbids_to_orders = array(); 148 $orders_to_dbids = array(); 149 foreach( (array) $ordered_menu_items as $ordered_menu_item_object ) { 150 if ( isset( $ordered_menu_item_object->ID ) ) { 151 if ( isset( $ordered_menu_item_object->menu_order ) ) { 152 $dbids_to_orders[$ordered_menu_item_object->ID] = $ordered_menu_item_object->menu_order; 153 $orders_to_dbids[$ordered_menu_item_object->menu_order] = $ordered_menu_item_object->ID; 154 } 155 } 156 } 157 158 159 // if this menu item is not first 160 if ( ! empty( $dbids_to_orders[$menu_item_id] ) && ! empty( $orders_to_dbids[$dbids_to_orders[$menu_item_id] - 1] ) ) { 161 162 // if this menu item is a child of the previous 163 if ( 164 ! empty( $menu_item_data['menu_item_parent'] ) && 165 in_array( $menu_item_data['menu_item_parent'], array_keys( $dbids_to_orders ) ) && 166 isset( $orders_to_dbids[$dbids_to_orders[$menu_item_id] - 1] ) && 167 ( $menu_item_data['menu_item_parent'] == $orders_to_dbids[$dbids_to_orders[$menu_item_id] - 1] ) 168 ) { 169 $parent_db_id = in_array( $menu_item_data['menu_item_parent'], $orders_to_dbids ) ? (int) $menu_item_data['menu_item_parent'] : 0; 170 $parent_object = wp_setup_nav_menu_item( get_post( $parent_db_id ) ); 171 172 if ( ! is_wp_error( $parent_object ) ) { 173 $parent_data = (array) $parent_object; 174 175 // if there is something before the parent and parent a child of it, make menu item a child also of it 176 if ( 177 ! empty( $dbids_to_orders[$parent_db_id] ) && 178 ! empty( $orders_to_dbids[$dbids_to_orders[$parent_db_id] - 1] ) && 179 ! empty( $parent_data['menu_item_parent'] ) 180 ) { 181 $menu_item_data['menu_item_parent'] = $parent_data['menu_item_parent']; 182 183 // else if there is something before parent and parent not a child of it, make menu item a child of that something's parent 184 } elseif ( 185 ! empty( $dbids_to_orders[$parent_db_id] ) && 186 ! empty( $orders_to_dbids[$dbids_to_orders[$parent_db_id] - 1] ) 187 ) { 188 $_possible_parent_id = (int) get_post_meta( $orders_to_dbids[$dbids_to_orders[$parent_db_id] - 1], '_menu_item_menu_item_parent', true); 189 if ( in_array( $_possible_parent_id, array_keys( $dbids_to_orders ) ) ) 190 $menu_item_data['menu_item_parent'] = $_possible_parent_id; 191 else 192 $menu_item_data['menu_item_parent'] = 0; 193 194 // else there isn't something before the parent 195 } else { 196 $menu_item_data['menu_item_parent'] = 0; 104 197 } 105 198 106 $possible_object_id = (int) get_post_meta( $ordered_menu_item_object->ID, '_menu_item_object_id', true ); 107 if ( ! empty( $possible_object_id ) ) { 108 $dbids_to_objectids[$ordered_menu_item_object->ID] = $possible_object_id; 109 $objectids_to_dbids[$possible_object_id] = $ordered_menu_item_object->ID; 110 } 199 // set former parent's [menu_order] to that of menu-item's 200 $parent_data['menu_order'] = $parent_data['menu_order'] + 1; 201 202 // set menu-item's [menu_order] to that of former parent 203 $menu_item_data['menu_order'] = $menu_item_data['menu_order'] - 1; 204 205 // save changes 206 update_post_meta( $menu_item_data['ID'], '_menu_item_menu_item_parent', (int) $menu_item_data['menu_item_parent'] ); 207 wp_update_post($menu_item_data); 208 wp_update_post($parent_data); 111 209 } 112 } 113 114 115 // if this menu item is not first 116 if ( ! empty( $dbids_to_orders[$menu_item_id] ) && ! empty( $orders_to_dbids[$dbids_to_orders[$menu_item_id] - 1] ) ) { 117 118 // if this menu item is a child of the previous 119 if ( 120 ! empty( $menu_item_data['post_parent'] ) && 121 isset( $objectids_to_dbids[$menu_item_data['post_parent']] ) && 122 isset( $orders_to_dbids[$dbids_to_orders[$menu_item_id] - 1] ) && 123 ( $objectids_to_dbids[$menu_item_data['post_parent']] == $orders_to_dbids[$dbids_to_orders[$menu_item_id] - 1] ) 124 ) { 125 126 $parent_db_id = $objectids_to_dbids[$menu_item_data['post_parent']]; 127 $parent_data = get_post( $parent_db_id, ARRAY_A ); 128 129 if ( ! is_wp_error( $parent_data ) ) { 130 131 // if there is something before the parent, make menu item a child of the parent's parent 132 if ( ! empty( $dbids_to_orders[$parent_db_id] ) && ! empty( $orders_to_dbids[$dbids_to_orders[$parent_db_id] - 1] ) ) { 133 $menu_item_data['post_parent'] = $parent_data['post_parent']; 134 135 // else there isn't something before the parent 136 } else { 137 $menu_item_data['post_parent'] = 0; 138 } 139 140 // set former parent's [menu_order] to that of menu-item's 141 $parent_data['menu_order'] = $parent_data['menu_order'] + 1; 142 143 // set menu-item's [menu_order] to that of former parent 144 $menu_item_data['menu_order'] = $menu_item_data['menu_order'] - 1; 145 146 // save changes 147 wp_update_post($menu_item_data); 148 wp_update_post($parent_data); 149 } 150 151 // else this menu item is not a child of the previous 152 } elseif ( isset($dbids_to_objectids[$orders_to_dbids[$dbids_to_orders[$menu_item_id] - 1]] ) ) { 153 // just make it a child of the previous; keep the order 154 $menu_item_data['post_parent'] = (int) $dbids_to_objectids[$orders_to_dbids[$dbids_to_orders[$menu_item_id] - 1]]; 155 wp_update_post($menu_item_data); 156 } 210 211 // else this menu item is not a child of the previous 212 } elseif ( 213 empty( $menu_item_data['menu_order'] ) || 214 empty( $menu_item_data['menu_item_parent'] ) || 215 ! in_array( $menu_item_data['menu_item_parent'], array_keys( $dbids_to_orders ) ) || 216 empty( $orders_to_dbids[$dbids_to_orders[$menu_item_id] - 1] ) || 217 $orders_to_dbids[$dbids_to_orders[$menu_item_id] - 1] != $menu_item_data['menu_item_parent'] 218 ) { 219 // just make it a child of the previous; keep the order 220 $menu_item_data['menu_item_parent'] = (int) $orders_to_dbids[$dbids_to_orders[$menu_item_id] - 1]; 221 update_post_meta( $menu_item_data['ID'], '_menu_item_menu_item_parent', (int) $menu_item_data['menu_item_parent'] ); 222 wp_update_post($menu_item_data); 157 223 } 158 224 }
Note: See TracChangeset
for help on using the changeset viewer.