| 271 | case 'duplicate': |
| 272 | //check_admin_referer( 'duplicate-nav_menu', 'duplicate-nav-menu-nonce' ); |
| 273 | |
| 274 | // Update menu theme locations |
| 275 | if ( isset( $_POST['menu-locations'] ) ) |
| 276 | set_theme_mod( 'nav_menu_locations', array_map( 'absint', $_POST['menu-locations'] ) ); |
| 277 | |
| 278 | // capture current menu |
| 279 | if ( is_nav_menu( $nav_menu_selected_id ) ) { |
| 280 | $duplicated_nav_menu_selected_id = $nav_menu_selected_id; |
| 281 | $duplicated_nav_menu = wp_get_nav_menu_object( $nav_menu_selected_id ); |
| 282 | $_menu_title = $duplicated_nav_menu->name.' (Copy)'; |
| 283 | } |
| 284 | |
| 285 | // create new menu |
| 286 | if ( $_menu_title ) { |
| 287 | $_nav_menu_selected_id = wp_update_nav_menu_object( 0, array('menu-name' => $_menu_title) ); |
| 289 | if ( is_wp_error( $_nav_menu_selected_id ) ) { |
| 290 | $messages[] = '<div id="message" class="error"><p>' . $_nav_menu_selected_id->get_error_message() . '</p></div>'; |
| 291 | } else { |
| 292 | $_menu_object = wp_get_nav_menu_object( $_nav_menu_selected_id ); |
| 293 | $nav_menu_selected_id = $_nav_menu_selected_id; |
| 294 | $nav_menu_selected_title = $_menu_object->name; |
| 295 | $messages[] = '<div id="message" class="updated"><p>' . sprintf( __('The <strong>%s</strong> menu has been successfully created.'), $nav_menu_selected_title ) . '</p></div>'; |
| 296 | } |
| 297 | } else { |
| 298 | $messages[] = '<div id="message" class="error"><p>' . __('Please enter a valid menu name.') . '</p></div>'; |
| 299 | } |
| 300 | |
| 301 | // copy current menu into new menu |
| 302 | if ( ! is_wp_error( $_menu_object ) ) { |
| 303 | $unsorted_menu_items = wp_get_nav_menu_items( $duplicated_nav_menu_selected_id, array('orderby' => 'ID', 'output' => ARRAY_A, 'output_key' => 'ID', 'post_status' => 'draft,publish') ); |
| 304 | $menu_items = array(); |
| 305 | |
| 306 | // Index menu items by db ID |
| 307 | foreach( $unsorted_menu_items as $_item ) |
| 308 | $menu_items[$_item->db_id] = $_item; |
| 309 | |
| 310 | $post_fields = array( 'db-id', 'object-id', 'object', 'parent-id', 'position', 'type', 'title', 'url', 'description', 'attr-title', 'target', 'classes', 'xfn' ); |
| 311 | wp_defer_term_counting(true); |
| 312 | |
| 313 | // Loop through all the menu items' POST variables |
| 314 | global $_nav_menu_placeholder; |
| 315 | foreach( $menu_items as $_key => $k ) { |
| 316 | $args = array(); |
| 317 | foreach ( $post_fields as $field ) { |
| 318 | |
| 319 | $_nav_menu_placeholder = ( 0 > $_nav_menu_placeholder ) ? intval($_nav_menu_placeholder) - 1 : -1; |
| 320 | $possible_object_id = $_nav_menu_placeholder; |
| 321 | $possible_db_id = ( ! empty( $k->ID ) ) && ( 0 < $possible_object_id ) ? (int) $k->ID : 0; |
| 322 | |
| 323 | switch ( $field ) { |
| 324 | case 'db-id': |
| 325 | //$args['menu-item-'.$field] = $k->db_id; |
| 326 | $args['menu-item-'.$field] = $possible_db_id; |
| 327 | break; |
| 328 | case 'object-id' : |
| 329 | //$args['menu-item-'.$field] = $k->object_id; |
| 330 | $args['menu-item-'.$field] = $possible_object_id; |
| 331 | break; |
| 332 | case 'parent-id': |
| 333 | $args['menu-item-'.$field] = $k->parent_id; |
| 334 | break; |
| 335 | case 'attr-title' : |
| 336 | $args['menu-item-'.$field] = $k->attr_title; |
| 337 | break; |
| 338 | case 'classes' : |
| 339 | $args['menu-item-'.$field] = implode( ' ' , $k->classes ); |
| 340 | break; |
| 341 | default: |
| 342 | $args['menu-item-'.$field] = $k->$field; |
| 343 | break; |
| 344 | } |
| 345 | } |
| 346 | |
| 347 | $menu_item_db_id = wp_update_nav_menu_item( $nav_menu_selected_id, 0 , $args ); |
| 348 | |
| 349 | if ( is_wp_error( $menu_item_db_id ) ) |
| 350 | $messages[] = '<div id="message" class="error"><p>' . $menu_item_db_id->get_error_message() . '</p></div>'; |
| 351 | elseif ( isset( $menu_items[$menu_item_db_id] ) ) |
| 352 | unset( $menu_items[$menu_item_db_id] ); |
| 353 | } |
| 354 | |
| 355 | } |
| 356 | |
| 357 | break; |