Skip to main content

Drupal 7 Menu Link update through update.php

This is for hook_update_N function

If we have a default menu, use below code in install file.
/**
 * Implements hook_update_N to create menu reports.
 */
function mymodule_update_7120() {
  $menus = array(
    'menu_name' => 'my_parent_menu',
    'title' => 'My parent menu title',
    'description' => 'My parent menu description',
  );
  $links = array(
    'link_title' => 'My menu link title',
    'link_path' => 'custom_path_for_menu_link',
    'menu_name' => 'my_parent_menu',
    'weight' => 0,
    'expanded' => 0,
  );
  // Save menu group into menu_custom table
  // Look the table first if the data does exist
  $exists = db_query("SELECT title FROM {menu_custom} WHERE menu_name=:menu_name", array(':menu_name' => $menus['menu_name']))->fetchField();
  // Save the record if the data does not exist
  if (!$exists) {
    menu_save($menu);
  }
  // Look the table first if the data does exist
  $exists_link = db_query("SELECT mlid from {menu_links} WHERE link_title=:link_title AND link_path=:link_path", array(':link_title' =>  $links['link_title'], ':link_path' => $links['link_path']))->fetchField();
  // Save the record if the data does not exist
  if (!$exists_link) {
     menu_link_save($links);
    menu_item_visibility_menu_link_insert($links_menu);
  }
}


If you are using a menu_visibilty module to assign menu items to particular role then.

Use below code of the above code under menu_link_save ($links):
   $mlid = menu_link_save($links); 
   $links_menu = array (
      'mlid' => $mlid,
      'roles' => array ('8','11'),
      );

Here 8,11 are role_id's.

Comments