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']);
 }
Beispiel #2
0
 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;
 }