无法在注册页面上保存自定义域

时间:2017-10-31 作者:Keith Petrillo

我有一个WordPress多站点构建,我正在尝试向管理员用户注册表添加一个自定义字段,但元数据没有保存在初始表单中:创建用户后,我可以转到新的配置文件页面,自定义字段将被保存。

下面是我添加自定义字段的函数,它确实显示在注册页面(/wp admin/user new.php)上。

/**
 * Add custom fields to WordPress account registration
 *
 * @param $user
 */
function add_rm_tenant_info( $user ) { ?>
    <h3>Rent Manager Tenant Information</h3>
    <table class="form-table">
        <tr>
            <th><label for="accountNumber">Account Number</label></th>
            <td>
                <input type="number" name="accountNumber" id="accountNumber" value="<?php echo esc_attr( get_the_author_meta( \'accountNumber\', $user->ID ) ); ?>" class="regular-text" /><br />
                <span class="description">This number is used to connect the tenant\'s information from Rent Manager to their WordPress profile.</span>
            </td>
        </tr>
    </table>
    <?php
}
add_action( \'show_user_profile\', \'add_rm_tenant_info\' );
add_action( \'edit_user_profile\', \'add_rm_tenant_info\' );
add_action( "user_new_form", "add_rm_tenant_info" );
这是我保存字段的函数。它似乎在注册页面上不起作用,但在创建用户并编辑配置文件后将保存。

/**
 * Saves custom fields
 *
 * @param $user_id
 * @return bool
 */
function save_rm_tenant_info( $user_id ) {
    if ( !current_user_can( \'edit_user\', $user_id ) )
        return false;
    update_user_meta( $user_id, \'accountNumber\', $_POST[\'accountNumber\'] );
}
add_action( \'personal_options_update\', \'save_rm_tenant_info\' );
add_action( \'edit_user_profile_update\', \'save_rm_tenant_info\' );
add_action( \'user_register\', \'save_rm_tenant_info\' );
add_action( \'profile_update\', \'save_rm_tenant_info\' );

1 个回复
最合适的回答,由SO网友:Sunil Dora 整理而成

您需要使用show_user_profile, edit_user_profile, personal_options_update, 和edit_user_profile_update 挂钩。

可以使用以下代码格式在用户部分中添加其他字段。

 add_action( \'show_user_profile\', \'extra_user_profile_fields\' );
 add_action( \'edit_user_profile\', \'extra_user_profile_fields\' );
 function extra_user_profile_fields( $user ) { ?>
<h3><?php _e("Extra profile information", "blank"); ?></h3>

<table class="form-table">
<tr>
    <th><label for="address"><?php _e("Address"); ?></label></th>
    <td>
        <input type="text" name="address" id="address" value="<?php echo esc_attr( get_the_author_meta( \'address\', $user->ID ) ); ?>" class="regular-text" /><br />
    </td>
</tr>
</table>
<?php } ?>
为了在数据库中保存usemeta,

add_action( \'personal_options_update\', \'save_extra_user_profile_fields\' );
add_action( \'edit_user_profile_update\', \'save_extra_user_profile_fields\' );

function save_extra_user_profile_fields( $user_id ) {
    if ( !current_user_can( \'edit_user\', $user_id ) ) { 
       return false; 
    }
    update_user_meta( $user_id, \'address\', $_POST[\'address\'] );
}
还有一些关于这个主题的博客帖子可能会有所帮助:

link 1

link 2

希望这对你有帮助。

结束

相关推荐

Implement Hooks Using Array

我试图在一个主题中实现一些钩子,但不是用重复的代码写出每个钩子,而是想知道是否可以使用和数组来声明钩子。E、 g.通常,我会使用类似以下内容:function hook_name_1() { do_action( \'hook_name_1\' ); } function hook_name_2() { do_action( \'hook_name_2\' ); } 有没有办法将钩子名称放入一个数组中,然后用一个foreach循环