Create an admin menu in a MENU_LOCAL_TASK I have added a MENU_LOCAL_TASK to a node. Within that local task I want to display an admin menu block using system_admin_menu_block_page() however I always get You do not have any administrative items. I have no trouble getting admin menu pages to work as MENU_NORMAL_ITEMS. Any ideas what I am doing wrong? Code below.

function my_module_menu() {
  $items = array();
  $items['node/%node/settings'] = array(
    'title' =&gt; 'Account settings',
    'description' =&gt; 'Manage your account settings.',
    'page callback' =&gt; 'system_admin_menu_block_page',
    'page arguments' =&gt; array(1),
    'access arguments' =&gt; array(1),
    'access callback' =&gt; 'my_module_access_account_settings',
    'type' =&gt; MENU_LOCAL_TASK,
    'file path' =&gt; drupal_get_path('module', 'system'),
    'file' =&gt; 'system.admin.inc',
    'weight' =&gt; 1000,
  );
  $items['node/%node/settings/upgrade'] = array(
    'title' =&gt; 'Upgrade your account',
    'description' =&gt; 'Use this form to upgrade your account.',
    'page callback' =&gt; 'my_module_upgrade_account',
    'page arguments' =&gt; array(1),
    'access arguments' =&gt; array(1),
    'access callback' =&gt; 'my_module_access_account_settings',
    'type' =&gt; MENU_NORMAL_ITEM,
  );
  $items['node/%node/settings/cancel'] = array(
    'title' =&gt; 'Cancel your account',
    'description' =&gt; 'Click here to cancel your account and remove all your data.',
    'page callback' =&gt; 'my_module_cancel_account',
    'page arguments' =&gt; array(1),
    'access arguments' =&gt; array(1),
    'access callback' =&gt; 'my_module_access_account_settings',
    'type' =&gt; MENU_NORMAL_ITEM,
  );
  return $items;
}

function my_module_access_account_settings($node) {
  if ($node-&gt;type == 'my_node_type') {
    return TRUE;
  }
  return FALSE;
}
After further investigation reading the code here, it appears that this can be done.

For example, admin/tasks has admin menu children in a MENU_LOCAL_TASK however, it appears that it looks at the current local task's parent item and then looks for MENU_NORMAL_ITEM children. 

Unfortunately, this doesn't work in my case since I use wildcard urls (%node) and my local task is not the default one. (like the admin/tasks one is).

So I came up with a workaround function that achieves what I need.

The function my_module_account_settings($node) basically queries the DB for the current MENU_LOCAL_TASK's mlid, then queries the database for ALL menu links that have the current MENU_LOCAL_TASK's mlid as their parent.

I then call the theme function for admin_block_content and boom.

Let me know if anyone comes up with either a better, or more correct way of doing this.

function my_module_menu() {
  $items = array();
  $items['node/%node/settings'] = array(
    'title' =&gt; 'Account settings',
    'description' =&gt; 'Manage your account settings.',
    'page callback' =&gt; 'my_module_account_settings',
    'page arguments' =&gt; array(1),
    'access arguments' =&gt; array(1),
    'access callback' =&gt; 'my_module_access_account_settings',
    'type' =&gt; MENU_LOCAL_TASK,
    'weight' =&gt; 1000,
  );
  $items['node/%node/settings/upgrade'] = array(
    'title' =&gt; 'Upgrade your account',
    'description' =&gt; 'Use this form to upgrade your account.',
    'page callback' =&gt; 'my_module_upgrade_account',
    'page arguments' =&gt; array(1),
    'access arguments' =&gt; array(1),
    'access callback' =&gt; 'my_module_access_account_settings',
    'type' =&gt; MENU_NORMAL_ITEM,
  );
  $items['node/%node/settings/cancel'] = array(
    'title' =&gt; 'Cancel your account',
    'description' =&gt; 'Click here to cancel your account and remove all your data.',
    'page callback' =&gt; 'my_module_cancel_account',
    'page arguments' =&gt; array(1),
    'access arguments' =&gt; array(1),
    'access callback' =&gt; 'my_module_access_account_settings',
    'type' =&gt; MENU_NORMAL_ITEM,
  );
  return $items;
}

function my_module_account_settings($node) {
  $current =  menu_get_item();

  // get current MENU_LOCAL_TASK mlid
  $current_mlid = db_select('menu_links' , 'ml')
    -&gt;condition('ml.link_path' , $current['path'])
    -&gt;fields('ml' , array('mlid'))
    -&gt;execute()-&gt;fetchField();

  // get all menu_links where the parent link id is the current 
  // MENU_LOCAL_TASK
  $rows = db_select('menu_links' , 'ml')
    -&gt;condition('ml.plid' , $current_mlid)
    -&gt;fields('ml' , array('mlid', 'link_path'))
    -&gt;execute()-&gt;fetchAllKeyed();

  foreach ($rows as $mlid =&gt; $path) {
    // load each of the admin menu items within this local task
    // in my case i replace the placeholder/wildcard with the node nid
    $item = menu_get_item(str_replace('%', $node-&gt;nid, $path));
    if ($item['access']) {
      $items[] = $item;
    }
  }

  // return the themed block
  return theme('admin_block_content', array('content' =&gt; $items));
}

function my_module_access_account_settings($node) {
  if ($node-&gt;type == 'organisation') {
    if (user_access('edit org account settings')) {
      return TRUE;
    }
  }
  return FALSE;
}