Module Development: Understanding Wildcard Loader Arguments

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

Add new comment

The content of this field is kept private and will not be shown publicly.