当管理员添加新用户(Wordpress)时,我很感兴趣如何添加字段(作为输入)。不是在用户注册时,而是在管理员添加新用户时。例如,我在网上找到了,但仅适用于要编辑用户的字段,但我想添加新用户。以及来自输入的新数据——并将它们保存在用户元表中。有没有人做这个练习。
问问题
6825 次
3 回答
8
重新审视这个有趣的问题,我会说不,这是不可能的。
分析文件/wp-admin/user-new.php
,没有允许这样做的动作挂钩。甚至在<form>
导致无处可循的功能。
一个可能且肮脏的解决方案是使用 jQuery 注入字段。
将新用户添加到数据库时,我们可以使用挂钩user_profile_update_errors
来更新用户元数据(也可以作为 hack)。
更新:可以添加一个新字段:
add_action( 'user_new_form', function( $type ){
if( 'add-new-user' !== $type )
return;
echo '<input type="text" name="custom_user_field" id="custom_user_field" value=""/>';
});
要获取发布的数据并对其进行处理,请使用:
add_action( 'user_profile_update_errors', function( $data )
{
if ( is_wp_error( $data->errors ) && ! empty( $data->errors ) )
return;
# Do your thing with $_POST['custom_user_field']
wp_die( sprintf( '<pre>%s</pre>', print_r( $_POST, true ) ) );
});
于 2013-04-06T03:35:38.800 回答
4
由于 wordpress 3.7 有一个钩子。
使用钩子“user_new_form”。它在提交按钮被插入之前触发。这样您就可以在新用户表单中显示您自己的自定义字段。
于 2014-06-05T09:54:03.430 回答
1
我发现这里建议的“user_profile_update_errors”钩子没有给我 user_id 来让我保存元字段。因此,我改为使用“user_register”,如下面的代码所示。
希望这会对其他人有所帮助。
// add fields to new user form
add_action( 'user_new_form', 'mktbn_user_new_form' );
function mktbn_user_new_form()
{
?>
<table class="form-table">
<tbody>
<tr class="form-field">
<th scope="row"><label for="business_name">Company </label></th>
<td><input name="business_name" type="text" id="business_name" value=""></td>
</tr>
<tr class="form-field">
<th scope="row"><label for="business_type">Profession </label></th>
<td><input name="business_type" type="text" id="business_type" value=""></td>
</tr>
<tr class="form-field">
<th scope="row"><label for="user_mobile">Mobile </label></th>
<td><input name="user_mobile" type="text" id="user_mobile" value=""></td>
</tr>
</tbody>
</table>
<?php
}
// process the extra fields for new user form
add_action( 'user_register', 'mktbn_user_register', 10, 1 );
function mktbn_user_register( $user_id )
{
mikakoo_log( 'user_register: ' . $user_id );
if ( isset( $_POST['business_name'] ))
{
update_user_meta($user_id, 'business_name', $_POST['business_name']);
}
if ( isset( $_POST['business_type'] ))
{
update_user_meta($user_id, 'business_type', $_POST['business_type']);
}
if ( isset( $_POST['user_mobile'] ))
{
update_user_meta($user_id, 'user_mobile', $_POST['user_mobile']);
}
}
于 2015-07-17T15:31:05.220 回答