web-dev-qa-db-fra.com

Ajouter un champ supplémentaire lorsque l'administrateur crée un utilisateur

J'ai créé un champ supplémentaire que l'utilisateur peut modifier sur sa page "Votre profil". Le champ supplémentaire est également disponible sur la page d’inscription de WordPress. Ce que je veux demander, c'est comment ajouter le champ à Utilisateur> Ajouter une nouvelle page? Ainsi, lorsque l'administrateur crée un utilisateur, l'administrateur saisit également le champ supplémentaire de l'utilisateur.

2
Permana

Sans crochets sur cette page (Utilisateur> Ajouter une nouvelle page), à ​​l'exception de user_new_form_tag, il n'est pas possible d'ajouter de nouveaux champs, sauf si vous piratez le fichier principal wp-admin/user-new.php.

Vous pouvez essayer d'ajouter ce champ supplémentaire en ajoutant dans JQuery et en le traitant lorsque le $_post['action'] == 'adduser', mais ce ne sera pas une très bonne pratique.

1
Bainternet

C'est une question plus ancienne mais il y a ceci maintenant .. fin du formulaire si (seulement).

WP Version 4.3.0 - Fichier "./wp-admin/user-new.php" - Ligne 330

/**
 * Fires at the end of the new user form.
 *
 * Passes a contextual string to make both types of new user forms
 * uniquely targetable. Contexts are 'add-existing-user' (Multisite),
 * and 'add-new-user' (single site and network admin).
 *
 * @since 3.7.0
 *
 * @param string $type A contextual string specifying which type of new user form the hook follows.
 */
do_action( 'user_new_form', 'add-existing-user' );

Petit exemple:

add_action('user_new_form', 'addmycustomfield');
function addmycustomfield() {
?>
<table class="form-table">
<tr>
<th scope="row">My test field:</th>
<td><input type="text" size="32" name="testfield" value="<?php echo get_option('madeup_wp_option'); ?>" /></td>
</tr>
</table> 
<?php
}

Cela placera un champ à la fin du formulaire Ajouter un utilisateur. Comment enregistrer les métadonnées utilisateur/etc personnalisées de l’enregistrement/ajouter un utilisateur/profil, éditer/etc, n’entre pas dans le cadre de la question et a déjà fait l’objet de nombreuses réponses. Voir les commentaires aussi.

0
bshea

J'ai pu le faire grâce à un hack assez fragile. Il utilise le tampon de sortie pour insérer le nouveau champ. Heureusement, il y a un joli crochet pour sauver le terrain.

// FRAGILE!  This rewrites code directly in the buffer, upgrading WP may break this
function wpse18772_add_fields( $buffer ) {
  $input_html = '<input type="text" name="your-new-field" id="your-new-field">';

  // will insert a new field after "role"
  $buffer = preg_replace( '~<label\s+for="role">(.*?)</tr>~ims', '<label for="role">$1</tr><tr class="form-field"><th>My New Field</th><td>' . $input_html . '</td></tr>', $buffer );

  return $buffer;
}

function wpse18772_buffer_start() { ob_start("wpse18772_add_fields");  }
function wpse18772_buffer_end() { ob_end_flush(); }
add_action('admin_head', 'wpse18772_buffer_start', 10, 1);
add_action('admin_footer', 'wpse18772_buffer_end', 10, 1);

function wpse18772_save_fields($user_id) {
  if($_POST['action'] != "adduser" && $_POST['action'] != "createuser") return;

  if(!empty($_POST['your-new-field'])) {
    // save field to meta, or do whatever you want to here
  }
}
add_action('user_register', 'wpse18772_save_fields');
0
funwhilelost

Voir cette réponse . Il n'y a pas de crochets, mais vous pouvez le faire avec jQuery. Ajoutez simplement votre balise HTML avec jQuery et ce sera fait.

0
Ralf912