J'aimais personnaliser ma page de profil en ajoutant de nouveaux champs pour obtenir plus d'informations de la part de l'utilisateur, telles que "Sexe" ou "Langues parlées". J'ai réussi à faire fonctionner le formulaire de saisie de texte, le problème que j'ai maintenant est à la radio et le type de saisie de case à cocher. Voici mon code:
function my_user_field( $user ) {
?>
<h3><?php _e('More About You'); ?></h3>
<table class="form-table">
<tr>
<th>
<label for="Dealing Type"><?php _e('Gender'); ?>
</label></th>
<td><span class="description"><?php _e('Gender?'); ?></span><br>
<label><input type="radio" name="dealing" value="Male">Male<br /></label>
<label><input type="radio" name="dealing" value="Female">Female<br /></label>
</td>
</tr>
<tr>
<th>
<label for="company"><?php _e('Company'); ?>
</label></th>
<td>
<span class="description"><?php _e('Insert Your Company name'); ?></span><br>
<input type="text" name="company" id="company" value="<?php echo esc_attr( get_the_author_meta( 'company', $user->ID ) ); ?>" class="regular-text" /><br />
</td>
</tr>
<tr>
<th>
<label for="language"><?php _e('Language'); ?>
</label></th>
<td><input type="checkbox" name="Engilsh" value="Malay" /> English<br />
<input type="checkbox" name="language" value="Mandarin" /> Mandarin<br />
</td>
</tr>
</table>
<?php }
function my_save_custom_user_profile_fields( $user_id ) {
if ( !current_user_can( 'edit_user', $user_id ) )
return FALSE;
update_usermeta( $user_id, 'gender', $_POST['gender'] );
update_usermeta( $user_id, 'company', $_POST['company'] );
update_usermeta( $user_id, 'language', $_POST['language'] );
}
add_action( 'show_user_profile', 'my_user_field' );
add_action( 'edit_user_profile', 'my_user_field' );
add_action( 'personal_options_update', 'my_save_custom_user_profile_fields' );
add_action( 'edit_user_profile_update', 'my_save_custom_user_profile_fields' );
Le "Genre" et les "Langues" ne passent pas par le $ _post []. Je suis novice en codage, j'espère que vous pourrez aider.
Il vous manque la valeur "cochée" pour les entrées
<input type="checkbox" name="language" <?php if (get_the_author_meta( 'language', $user->ID) == 'Mandarin' ) { ?>checked="checked"<?php }?> value="Mandarin" /> Mandarin<br />
De plus, l’usermeta est deal _ mais vous recherchez $_POST['gender']
Enfin, vous devriez avoir un utilisateur pour l’anglais et un autre pour le mandarin, car ils ne sont pas mutuellement exclusifs.
[edit: code de travail] [edit2: plusieurs langues]
<?php
$lingo = array('en' => 'English', 'md' => '普通話', 'es' => 'Español', 'fr' => 'Français', 'pt' => 'Português');
function my_user_field( $user ) {
$gender = get_the_author_meta( 'dealing', $user->ID);
$company = esc_attr( get_the_author_meta( 'company', $user->ID ) );
?>
<h3><?php _e('More About You'); ?></h3>
<table class="form-table">
<tr>
<th>
<label for="Dealing Type"><?php _e('Gender'); ?>
</label></th>
<td><span class="description"><?php _e('Gender?'); ?></span><br>
<label><input type="radio" name="dealing" <?php if ($gender == 'Male' ) { ?>checked="checked"<?php }?> value="Male">Male<br /></label>
<label><input type="radio" name="dealing" <?php if ($gender == 'Female' ) { ?>checked="checked"<?php }?> value="Female">Female<br /></label>
</td>
</tr>
<tr>
<th>
<label for="company"><?php _e('Company'); ?>
</label></th>
<td>
<span class="description"><?php _e('Insert Your Company name'); ?></span><br>
<input type="text" name="company" id="company" value="<?php echo $company; ?>" class="regular-text" /><br />
</td>
</tr>
<tr>
<th>
<?php _e('Language'); ?>
</th>
<td><?php
global $lingo;
foreach($lingo as $key => $value) {
$code = 'language_'.$key;
$lang = get_the_author_meta( $code, $user->ID);
?>
<label><input type="checkbox" name="<?php echo $code; ?>" <?php if ($lang == 'yes' ) { ?>checked="checked"<?php }?> value="yes" /> <?php echo $value; ?></label><br />
<?php }
?>
</td>
</tr>
</table>
<?php
}
function my_save_custom_user_profile_fields( $user_id ) {
if ( !current_user_can( 'edit_user', $user_id ) )
return FALSE;
update_usermeta( $user_id, 'dealing', $_POST['dealing'] );
update_usermeta( $user_id, 'company', $_POST['company'] );
global $lingo;
foreach($lingo as $key => $value) {
$code = "language_".$key;
update_usermeta( $user_id, $code, $_POST[$code] );
}
}
add_action( 'show_user_profile', 'my_user_field' );
add_action( 'edit_user_profile', 'my_user_field' );
add_action( 'personal_options_update', 'my_save_custom_user_profile_fields' );
add_action( 'edit_user_profile_update', 'my_save_custom_user_profile_fields' );