ユーザーが自分の[あなたのプロフィール]ページで編集できる追加のフィールドを作成しました。 WordPressの登録ページにも追加のフィールドがあります。私が求めたいのは、User> Add new pageにフィールドを追加する方法です。そのため、adminがユーザーを作成するときに、adminはユーザーの追加フィールドも入力します。
そのページにuser_new_form_tag
以外のフック(User> Add new page)がなければ、コアファイルwp-admin/user-new.php
をハックしない限り、新しいフィールドを追加することはできません。
JQueryに追加して$_post['action'] == 'adduser'
のときにそれを処理することによって、その追加フィールドを追加することを試みることができますが、それは非常に良い習慣ではありません。
これはもっと古い質問ですが、今はこれがあります。
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を保存する方法は質問の範囲を超えており、以前に何度も回答されています。コメントも見てください。
私はこれをやや壊れやすいハックでやることができました。出力バッファを使用して新しいフィールドを挿入します。ありがたいことに、フィールドを保存するための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');
この答えを見てください 。フックはありませんが、jQueryを使ってそれを行うことができます。 HTMLマークアップをjQueryで追加するだけで完了です。