Yes, you can write a plugin that adds them to the Create/Update User panel and saves them during the events OnUserFormRender and OnUserFormSave, but it’s not a trivial job.
Here’s a plugin that does something similar. It adds a "tree_root_id" input field on the user form and then saves it as a user setting, you’d have to replace that later code with code that sets the extended field:
<?php
/* MemberPages Plugin */
switch ($modx->event->name) {
case 'OnUserFormRender':
/* set field to the current value (if any) */
/* The user ID is always available as $id */
$v = "";
$treeRoot = $modx->getObject('modUserSetting',
array('user'=>$id,'key'=>'tree_root_id'));
if ($treeRoot) { /* the user already has the setting */
$v = $treeRoot->get('value');
}
/* now do the HTML */
$fields = '<div class="x-form-item x-tab-item">
<label class="x-form-item-label" style="width:152px;">
<b>Tree Root</b></label>
<div class="x-form-element">
<input type="text" name="TreeRoot" value="'. $v .
'" class="x-form-text x-form-field" />
</div>
</div>';
$modx->event->output($fields);
break;
case 'OnUserFormSave':
if (isset($_POST['TreeRoot'])){ /* field is filled in */
$setting = $modx->getObject('modUserSetting',
array('user'=>$id,'key'=>'tree_root_id'));
if ($setting) { /* user setting already exists - update it */
if ($setting->get('value') != $_POST['TreeRoot']){
/* user changed it */
$setting->set('value',$_POST['TreeRoot']);
$setting->save();
}
} else { /* create a new one */
$setting =& $modx->newObject('modUserSetting');
$setting->set('user',$id);
$setting->set('key','tree_root_id');
$setting->set('value',$_POST['TreeRoot']);
$setting->set('namespace','core');
$setting->save();
}
}
break;
}
return;
?>
Here’s an example of code that sets an existing extended user field:
<?php
$user = $modx->getObjectGraph('modUser',
array('Profile' => array()),
array('id'=>'$id));
$extFields = $user->Profile->get('extended');
$extFields['sign'] = 'Virgo';
$user->Profile->set('extended',$extFields);
$user->save();