Module Development: Understanding Wildcard Loader Arguments

Published May 19, 2009

When writing a module from scratch (or trying to deconstruct one to figure out how it works), it might save you some time to be aware of "wildcard loader arguments" when using hook_menu(). These wildcard arguments are automatically linked with "_load()" functions that allow the module developer to load data into the argument anytime the menu item is called.

Here's a quick example of what I'm talking about. Look at this snippet from the Quicktabs module's quicktabs_menu() function:

$items['admin/build/quicktabs/%quicktabs/edit'] = array(
'title' => 'Edit QT block',
'page callback' => 'drupal_get_form',
'page arguments' => array('quicktabs_form', 'edit', 3),
'access arguments' => array('administer quicktabs'),
'type' => MENU_CALLBACK,
'file' => 'includes/',

The "%quicktabs" wildcard automatically calls the "quicktabs_load()" function whenever this menu item is called (if the wildcard was named "%pickles" then it would call "pickles_load()"). What this means is that while just the ID of the quicktabs block is passed in via the URL, the quicktabs_load() function takes this ID and populates the full quicktabs array that is then passed to the "quicktabs_form" function. Since this all happens automatically, there's no paper trail (and therefore can be a bit confusing) to see how exactly the $quicktabs variable gets populated.

More info on these "Wildcard Loader Arguments" is available on

Sign up to receive email notifications of whenever we publish a new blog post or quicktip!