Example #1
0
     $menu_items[$_item->db_id] = $_item;
 }
 $post_fields = array('menu-item-db-id', 'menu-item-object-id', 'menu-item-object', 'menu-item-parent-id', 'menu-item-position', 'menu-item-type', 'menu-item-title', 'menu-item-url', 'menu-item-description', 'menu-item-attr-title', 'menu-item-target', 'menu-item-classes', 'menu-item-xfn');
 nxt_defer_term_counting(true);
 // Loop through all the menu items' POST variables
 if (!empty($_POST['menu-item-db-id'])) {
     foreach ((array) $_POST['menu-item-db-id'] as $_key => $k) {
         // Menu item title can't be blank
         if (empty($_POST['menu-item-title'][$_key])) {
             continue;
         }
         $args = array();
         foreach ($post_fields as $field) {
             $args[$field] = isset($_POST[$field][$_key]) ? $_POST[$field][$_key] : '';
         }
         $menu_item_db_id = nxt_update_nav_menu_item($nav_menu_selected_id, $_POST['menu-item-db-id'][$_key] != $_key ? 0 : $_key, $args);
         if (is_nxt_error($menu_item_db_id)) {
             $messages[] = '<div id="message" class="error"><p>' . $menu_item_db_id->get_error_message() . '</p></div>';
         } elseif (isset($menu_items[$menu_item_db_id])) {
             unset($menu_items[$menu_item_db_id]);
         }
     }
 }
 // Remove menu items from the menu that weren't in $_POST
 if (!empty($menu_items)) {
     foreach (array_keys($menu_items) as $menu_item_id) {
         if (is_nav_menu_item($menu_item_id)) {
             nxt_delete_post($menu_item_id);
         }
     }
 }
Example #2
0
/**
 * Save posted nav menu item data.
 *
 * @since 3.0.0
 *
 * @param int $menu_id The menu ID for which to save this item. $menu_id of 0 makes a draft, orphaned menu item.
 * @param array $menu_data The unsanitized posted menu item data.
 * @return array The database IDs of the items saved
 */
function nxt_save_nav_menu_items($menu_id = 0, $menu_data = array())
{
    $menu_id = (int) $menu_id;
    $items_saved = array();
    if (0 == $menu_id || is_nav_menu($menu_id)) {
        // Loop through all the menu items' POST values
        foreach ((array) $menu_data as $_possible_db_id => $_item_object_data) {
            if (empty($_item_object_data['menu-item-object-id']) && (!isset($_item_object_data['menu-item-type']) || in_array($_item_object_data['menu-item-url'], array('http://', '')) || !('custom' == $_item_object_data['menu-item-type'] && !isset($_item_object_data['menu-item-db-id'])) || !empty($_item_object_data['menu-item-db-id']))) {
                continue;
                // then this potential menu item is not getting added to this menu
            }
            // if this possible menu item doesn't actually have a menu database ID yet
            if (empty($_item_object_data['menu-item-db-id']) || 0 > $_possible_db_id || $_possible_db_id != $_item_object_data['menu-item-db-id']) {
                $_actual_db_id = 0;
            } else {
                $_actual_db_id = (int) $_item_object_data['menu-item-db-id'];
            }
            $args = array('menu-item-db-id' => isset($_item_object_data['menu-item-db-id']) ? $_item_object_data['menu-item-db-id'] : '', 'menu-item-object-id' => isset($_item_object_data['menu-item-object-id']) ? $_item_object_data['menu-item-object-id'] : '', 'menu-item-object' => isset($_item_object_data['menu-item-object']) ? $_item_object_data['menu-item-object'] : '', 'menu-item-parent-id' => isset($_item_object_data['menu-item-parent-id']) ? $_item_object_data['menu-item-parent-id'] : '', 'menu-item-position' => isset($_item_object_data['menu-item-position']) ? $_item_object_data['menu-item-position'] : '', 'menu-item-type' => isset($_item_object_data['menu-item-type']) ? $_item_object_data['menu-item-type'] : '', 'menu-item-title' => isset($_item_object_data['menu-item-title']) ? $_item_object_data['menu-item-title'] : '', 'menu-item-url' => isset($_item_object_data['menu-item-url']) ? $_item_object_data['menu-item-url'] : '', 'menu-item-description' => isset($_item_object_data['menu-item-description']) ? $_item_object_data['menu-item-description'] : '', 'menu-item-attr-title' => isset($_item_object_data['menu-item-attr-title']) ? $_item_object_data['menu-item-attr-title'] : '', 'menu-item-target' => isset($_item_object_data['menu-item-target']) ? $_item_object_data['menu-item-target'] : '', 'menu-item-classes' => isset($_item_object_data['menu-item-classes']) ? $_item_object_data['menu-item-classes'] : '', 'menu-item-xfn' => isset($_item_object_data['menu-item-xfn']) ? $_item_object_data['menu-item-xfn'] : '');
            $items_saved[] = nxt_update_nav_menu_item($menu_id, $_actual_db_id, $args);
        }
    }
    return $items_saved;
}
Example #3
0
/**
 * Automatically add newly published page objects to menus with that as an option.
 *
 * @since 3.0.0
 * @access private
 *
 * @param string $new_status The new status of the post object.
 * @param string $old_status The old status of the post object.
 * @param object $post The post object being transitioned from one status to another.
 * @return void
 */
function _nxt_auto_add_pages_to_menu($new_status, $old_status, $post)
{
    if ('publish' != $new_status || 'publish' == $old_status || 'page' != $post->post_type) {
        return;
    }
    if (!empty($post->post_parent)) {
        return;
    }
    $auto_add = get_option('nav_menu_options');
    if (empty($auto_add) || !is_array($auto_add) || !isset($auto_add['auto_add'])) {
        return;
    }
    $auto_add = $auto_add['auto_add'];
    if (empty($auto_add) || !is_array($auto_add)) {
        return;
    }
    $args = array('menu-item-object-id' => $post->ID, 'menu-item-object' => $post->post_type, 'menu-item-type' => 'post_type', 'menu-item-status' => 'publish');
    foreach ($auto_add as $menu_id) {
        $items = nxt_get_nav_menu_items($menu_id, array('post_status' => 'publish,draft'));
        if (!is_array($items)) {
            continue;
        }
        foreach ($items as $item) {
            if ($post->ID == $item->object_id) {
                continue 2;
            }
        }
        nxt_update_nav_menu_item($menu_id, 0, $args);
    }
}
Example #4
0
 /**
  * Attempt to create a new menu item from import data
  *
  * Fails for draft, orphaned menu items and those without an associated nav_menu
  * or an invalid nav_menu term. If the post type or term object which the menu item
  * represents doesn't exist then the menu item will not be imported (waits until the
  * end of the import to retry again before discarding).
  *
  * @param array $item Menu item details from WXR file
  */
 function process_menu_item($item)
 {
     // skip draft, orphaned menu items
     if ('draft' == $item['status']) {
         return;
     }
     $menu_slug = false;
     if (isset($item['terms'])) {
         // loop through terms, assume first nav_menu term is correct menu
         foreach ($item['terms'] as $term) {
             if ('nav_menu' == $term['domain']) {
                 $menu_slug = $term['slug'];
                 break;
             }
         }
     }
     // no nav_menu term associated with this menu item
     if (!$menu_slug) {
         _e('Menu item skipped due to missing menu slug', 'nxtclass-importer');
         echo '<br />';
         return;
     }
     $menu_id = term_exists($menu_slug, 'nav_menu');
     if (!$menu_id) {
         printf(__('Menu item skipped due to invalid menu slug: %s', 'nxtclass-importer'), esc_html($menu_slug));
         echo '<br />';
         return;
     } else {
         $menu_id = is_array($menu_id) ? $menu_id['term_id'] : $menu_id;
     }
     foreach ($item['postmeta'] as $meta) {
         ${$meta}['key'] = $meta['value'];
     }
     if ('taxonomy' == $_menu_item_type && isset($this->processed_terms[intval($_menu_item_object_id)])) {
         $_menu_item_object_id = $this->processed_terms[intval($_menu_item_object_id)];
     } else {
         if ('post_type' == $_menu_item_type && isset($this->processed_posts[intval($_menu_item_object_id)])) {
             $_menu_item_object_id = $this->processed_posts[intval($_menu_item_object_id)];
         } else {
             if ('custom' != $_menu_item_type) {
                 // associated object is missing or not imported yet, we'll retry later
                 $this->missing_menu_items[] = $item;
                 return;
             }
         }
     }
     if (isset($this->processed_menu_items[intval($_menu_item_menu_item_parent)])) {
         $_menu_item_menu_item_parent = $this->processed_menu_items[intval($_menu_item_menu_item_parent)];
     } else {
         if ($_menu_item_menu_item_parent) {
             $this->menu_item_orphans[intval($item['post_id'])] = (int) $_menu_item_menu_item_parent;
             $_menu_item_menu_item_parent = 0;
         }
     }
     // nxt_update_nav_menu_item expects CSS classes as a space separated string
     $_menu_item_classes = maybe_unserialize($_menu_item_classes);
     if (is_array($_menu_item_classes)) {
         $_menu_item_classes = implode(' ', $_menu_item_classes);
     }
     $args = array('menu-item-object-id' => $_menu_item_object_id, 'menu-item-object' => $_menu_item_object, 'menu-item-parent-id' => $_menu_item_menu_item_parent, 'menu-item-position' => intval($item['menu_order']), 'menu-item-type' => $_menu_item_type, 'menu-item-title' => $item['post_title'], 'menu-item-url' => $_menu_item_url, 'menu-item-description' => $item['post_content'], 'menu-item-attr-title' => $item['post_excerpt'], 'menu-item-target' => $_menu_item_target, 'menu-item-classes' => $_menu_item_classes, 'menu-item-xfn' => $_menu_item_xfn, 'menu-item-status' => $item['status']);
     $id = nxt_update_nav_menu_item($menu_id, 0, $args);
     if ($id && !is_nxt_error($id)) {
         $this->processed_menu_items[intval($item['post_id'])] = (int) $id;
     }
 }