I defined a menu through hook_menu, and set a title callback on a menu item, like so:

function mymodule_foobar_menu() {
     $items[SOMEPATH] = array(
    'title'         => t('Drink'),
    'title callback' => 'mymodule_foobar_menu_title',
    'access callback' => (blah),
        'page callback' => 'blah',
        'type' => MENU_NORMAL_ITEM,
        'menu_name' => 'main-menu',
        '#description' => '',

and created

function mymodule_foobar_menu_title() 
    return ($whatever)?t('Beer'):t('Wine');

mymodule_foobar_menu_title seems to be called for almost everywhere where 'Drink' would appear, showing 'Beer' or 'Wine' instead. Except, in the main menu itself.

I can edit the main menu (at admin/structure/menu/manage/main-menu) and I see the link mentioned as Wine (or Beer). If I edit the link, there is a textbox 'Menu link title *' that says 'Drink'.

Can someone explain how to change the text of the link, instead of all the other appearances of the title, preferably without using an extra module ?

  • I think the title callback is for the page, not the menu link (routes and links are two separate things even though hook_menu() convolutes them a bit). The simplest solution I can think of would be to install Menu Token and define a custom token in your module
    – Clive
    Commented Dec 28, 2013 at 18:53
  • Aw, that makes sense. I would like a solution without Yet Another Module, though. Updating the question.
    – commonpike
    Commented Dec 28, 2013 at 20:04


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Browse other questions tagged or ask your own question.