web-dev-qa-db-ja.com

管理者がユーザーを作成するときに追加のフィールドを追加する

ユーザーが自分の[あなたのプロフィール]ページで編集できる追加のフィールドを作成しました。 WordPressの登録ページにも追加のフィールドがあります。私が求めたいのは、User> Add new pageにフィールドを追加する方法です。そのため、adminがユーザーを作成するときに、adminはユーザーの追加フィールドも入力します。

2
Permana

そのページにuser_new_form_tag以外のフック(User> Add new page)がなければ、コアファイルwp-admin/user-new.phpをハックしない限り、新しいフィールドを追加することはできません。

JQueryに追加して$_post['action'] == 'adduser'のときにそれを処理することによって、その追加フィールドを追加することを試みることができますが、それは非常に良い習慣ではありません。

1
Bainternet

これはもっと古い質問ですが、今はこれがあります。

WPバージョン4.3.0 - ファイル "./wp-admin/user-new.php" - 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' );

短い例:

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
}

これにより、ユーザー追加フォームの最後にフィールドが配置されます。登録/追加ユーザー/プロファイル編集/ etcからカスタムユーザーメタデータ/ etcを保存する方法は質問の範囲を超えており、以前に何度も回答されています。コメントも見てください。

0
bshea

私はこれをやや壊れやすいハックでやることができました。出力バッファを使用して新しいフィールドを挿入します。ありがたいことに、フィールドを保存するためのNiceフックがあります。

// 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

この答えを見てください 。フックはありませんが、jQueryを使ってそれを行うことができます。 HTMLマークアップをjQueryで追加するだけで完了です。

0
Ralf912