私はプラグインを使用していくつかのカスタムロールを作成しました。また、各ユーザーのプロファイルページに表示されるカスタムユーザーメタフィールド(/wp-admin/profile.php)も作成しました。
カスタムフィールドの保存に問題があります。ユーザーの役割を変更しなくても問題なくフィールドを保存できます。だから、例を挙げましょう:
WPがデータベースから削除しているようです。 usermetaデータベーステーブルに格納されているデータを失うことなく、ロールとフィールドを変更できるようにしたいです。
私の問題はupdate_usermeta関数にあると思います。
//saving the user fields
add_action( 'personal_options_update', 'save_user_fields' );
add_action( 'edit_user_profile_update', 'save_user_fields' );
function save_user_fields( $user_id ) {
if ( !current_user_can( 'edit_user', $user_id ) )
return false;
update_usermeta( $user_id, 'unit_type', $_POST['unit_type'] );
update_usermeta( $user_id, 'registered_as', $_POST['registered_as'] );
update_usermeta( $user_id, 'date_registered', $_POST['date_registered'] );
update_usermeta( $user_id, 'unit_number', $_POST['unit_number'] );
update_usermeta( $user_id, 'first_name', $_POST['first_name'] );
update_usermeta( $user_id, 'last_name', $_POST['last_name'] );
update_usermeta( $user_id, 'owner1_address', $_POST['owner1_address'] );
update_usermeta( $user_id, 'owner1_tel_day', $_POST['owner1_tel_day'] );
update_usermeta( $user_id, 'owner1_tel_night', $_POST['owner1_tel_night'] );
update_usermeta( $user_id, 'emergency_contact_name', $_POST['emergency_contact_name'] );
update_usermeta( $user_id, 'emergency_contact_tel_day', $_POST['emergency_contact_tel_day'] );
update_usermeta( $user_id, 'emergency_contact_tel_night', $_POST['emergency_contact_tel_night'] );
}
所見:この記事で提案されているガイドライン に従って 、QとAの両方の品質を向上させようとしています。これは学習プロセスです。 。
あなたの オリジナルのコード では、ユーザーの役割や他の条件に従って異なる入力フィールドを表示していました。
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
}
参考までに、次のコードを使用してPHPオブジェクトの内容を確認できます。
echo '<pre>'.print_r($user, true).'</pre>';
また、一度に1行ずつエコーする代わりに、 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;