1

当管理员添加新用户(Wordpress)时,我很感兴趣如何添加字段(作为输入)。不是在用户注册时,而是在管理员添加新用户时。例如,我在网上找到了,但仅适用于要编辑用户的字段,但我想添加新用户。以及来自输入的新数据——并将它们保存在用户元表中。有没有人做这个练习。

4

3 回答 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 回答