function _menu_delete_item

7.x menu.inc _menu_delete_item($item, $force = FALSE)
6.x menu.inc _menu_delete_item($item, $force = FALSE)

Deletes a single menu link.

Parameters

$item: Item to be deleted.

$force: Forces deletion. Internal use only, setting to TRUE is discouraged.

See also

menu_link_delete()

Related topics

3 calls to _menu_delete_item()
menu_delete_links in drupal-7.x/includes/menu.inc
Deletes all links for a menu.
menu_link_delete in drupal-7.x/includes/menu.inc
Delete one or several menu links.
_menu_navigation_links_rebuild in drupal-7.x/includes/menu.inc
Builds menu links for the items in the menu router.

File

drupal-7.x/includes/menu.inc, line 3018
API for the Drupal menu system.

Code

function _menu_delete_item($item, $force = FALSE) {
  $item = is_object($item) ? get_object_vars($item) : $item;
  if ($item && ($item['module'] != 'system' || $item['updated'] || $force)) {
    // Children get re-attached to the item's parent.
    if ($item['has_children']) {
      $result = db_query("SELECT mlid FROM {menu_links} WHERE plid = :plid", array(':plid' => $item['mlid']));
      foreach ($result as $m) {
        $child = menu_link_load($m->mlid);
        $child['plid'] = $item['plid'];
        menu_link_save($child);
      }
    }

    // Notify modules we are deleting the item.
    module_invoke_all('menu_link_delete', $item);

    db_delete('menu_links')->condition('mlid', $item['mlid'])->execute();

    // Update the has_children status of the parent.
    _menu_update_parental_status($item);
    menu_cache_clear($item['menu_name']);
    _menu_clear_page_cache();
  }
}