Я надсилаю свою відповідь з /programming/8124089/get-value-of-custom-user-field-in-drupal-7-template тут, оскільки вважаю, що це альтернативне рішення. Цей приклад показує, як використовувати щось на зразок field_real_name замість імені користувача за замовчуванням.
Якщо ви використовуєте функцію попередньої обробки, не потрібно втягувати глобальний $userоб'єкт. Ви можете змінити поле в масиві $ змінних, тобто $variables['name']на те, що у вашому користувальницькому полі, яке я викликав field_real_name. У вас є доступ до $variablesмасиву, тому ви можете отримати інформацію про користувача за допомогою цього - він завантажить інформацію, пов'язану з uid ( див. Template_preprocess_username ):
function mythemename_preprocess_username(&$variables) {
$account = user_load($variables['account']->uid);
...more code will go here in a moment
}
Якщо ви dpm($account)(або kpr($account)якщо ви не використовуєте devel), ви побачите, що у вас є доступ до всієї інформації користувача, без використання глобального $userоб'єкта.
Тоді ви можете змінити результат, $variables['name']щоб бути вашим field_real_nameтаким:
function mythemename_preprocess_username(&$variables) {
// Load user information with user fields
$account = user_load($variables['account']->uid);
// See if user has real_name set, if so use that as the name instead
$real_name = $account->field_real_name[LANGUAGE_NONE][0]['safe_value'];
if (isset($real_name)) {
$variables['name'] = $real_name;
}
}