protected function import_menu($menu) { $_menu = $menu['menu']; if (is_nav_menu($menu['menu']['slug'])) { $local_menu = wp_get_nav_menu_object($menu['menu']['slug']); $menu_id = $local_menu->term_id; $update = true; if (!empty($local_menu)) { $local_menu = new cfd_menu($menu['menu']['slug']); } } else { $menu_id = 0; $update = false; } $insert_menu_id = wp_update_nav_menu_object($menu_id, array('menu-name' => $menu['menu']['name'], 'description' => $menu['menu']['description'], 'slug' => $menu['menu']['slug'])); if (is_wp_error($insert_menu_id)) { $this->add_import_message('menus', '__error__', sprintf(__('Menu import failed for menu "%s". Error: ', 'cf-deploy'), $menu['menu']['name']) . $insert_menu_id->get_error_message()); return false; } // nuke existing menu items, trust me, its easier this way if ($update) { // Taken directly from wp_delete_nav_menu, wp-includes/nav-menu.php $menu_objects = get_objects_in_term($insert_menu_id, 'nav_menu'); if (!empty($menu_objects)) { foreach ($menu_objects as $item) { wp_delete_post($item); } } } // handle menu items if (!empty($menu['items'])) { $this->menu_item_parent_map = array(); $processed_items = 0; foreach ($menu['items'] as $item) { if ($this->import_menu_item($item, $insert_menu_id)) { $processed_items++; } } } // log rollback state $item_change['menus'][$menu['menu']['slug']] = 'new'; if (!empty($local_menu)) { $item_change['menus'][$menu['menu']['slug']] = $local_menu->get_data_for_transit(); } $this->log_item_change($item_change); return $processed_items == count($menu['items']); }
public function get_menus() { $menu_args = array('hide_empty' => true, 'orderby' => 'name'); $_menus = wp_get_nav_menus($menu_args); $menus = array(); foreach ($_menus as $_menu) { try { $menu = new cfd_menu($_menu->slug); if ($menu->last_modified() != null && strtotime($menu->last_modified()) > strtotime($this->start_date) || !empty($this->data['menus']) && in_array($_menu->term_id, $this->data['menus'])) { $menus[$_menu->slug] = new cfd_menu($_menu->slug); } } catch (Exception $e) { // no error handling yet error_log('cfd_menu object error: ' . $e->getMessage() . ' - ' . __FILE__ . '::' . __LINE__); } } return $menus; }
/** * Add a menu id to test batch_items array * * @param array $args * @param array $batch_array * @return array */ protected function ajax_test_send_menu($args, $batch_items) { $menu_id = esc_attr($args['test_action_send_menu_id']); try { $menu = new cfd_menu($menu_id); } catch (Exception $e) { return new cfd_message(array('success' => false, 'type' => 'invalid-menu-id', 'message' => '<div class="error"><p>Invalid Menu ID. Menu ID ' . $menu_id . ' does not exist.</p></div>')); } $batch_items['menus'][] = $menu->id(); return $batch_items; }