Я публикую свой ответ с /programming/8124089/get-value-of-custom-user-field-in-drupal-7- здесь, так как считаю, что это альтернативное решение. В этом примере показано, как использовать что-то вроде field_real_name вместо имени пользователя по умолчанию.
Если вы используете функцию предварительной обработки, вам не нужно извлекать глобальный $user
объект. Вы можете изменить поле в массиве $ variable, которое соответствует $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;
}
}