我有一个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\' );
最合适的回答,由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
希望这对你有帮助。