观察:遵循指南suggested in this article, 我正在努力提高Q和A的质量。这是一个学习的过程。。。
在您的original code, 您根据用户角色和其他条件显示了不同的输入字段。
add_action( \'show_user_profile\', \'user_fields_for_admin\', 10);
add_action( \'edit_user_profile\', \'user_fields_for_admin\', 10);
function user_fields_for_admin( $user ){
switch ($user->roles[0]) {
case \'pending\':
if ($selected_register == "Owner"){
// Display some fields;
} elseif ($selected_register == "Board") {
// Display other fields
}
break;
case \'owner\':
// Display yet another fields
break;
}
}
但在使用保存字段时
update_usermeta
(根据您编辑的问题中的代码),所有字段都已保存,无论是否显示。
您必须检查是否传递了字段值,以便在每次更新时不会用不存在的值覆盖usermeta。
function save_user_fields($user_id) {
if (!current_user_can(\'edit_user\', $user_id))
return false;
if( isset($_POST[\'unit_type\']) ) update_usermeta($user_id, \'unit_type\', $_POST[\'unit_type\']);
if( isset($_POST[\'registered_as\']) ) update_usermeta($user_id, \'registered_as\', $_POST[\'registered_as\']);
// ETC
}
调试和打印Html的建议供您参考,您可以使用以下代码检查PHP对象的内容:
echo \'<pre>\'.print_r($user, true).\'</pre>\';
您可以使用
Heredoc sintax 便于阅读/打印Html。PHP变量放在花括号内。示例:
echo <<<HTML
<h3>Owner Details</h3>
<table class="form-table"><tbody><tr>
<tr><th>First Name</th>
<td><input type="text" name="first_name" id="first_name1" value="{$first_name}" class="regular-text" /></td>
</tr>
<tr><th>Last Name</th>
<td><input type="text" name="last_name" id="last_name1" value="{$last_name}" class="regular-text" /></td>
</tr>
HTML;