当前位置:首页>WordPress建站>WordPress开发>添加自定义字段到 Ultimate Member 的账号设置页面

添加自定义字段到 Ultimate Member 的账号设置页面

WordPress 主题 CoreNext

最近一个项目中,用到了 Ultimate Member 插件,而这个插件前端账号修改页面,不支持直接设置字段,只能通过钩子来实现。

在本示例中,我们需要添加一个昵称nickname)字段,同时,我们也要修改用户的“公开显示为”(display_name)字段为昵称。因为WordPress默认会调用这个 display_name 作为用户在网站上显示的名称,如果不更新这个字段,用户显示的名称会默认为用户名,而不是昵称。

最终实现的效果如下图所示:

由于是直接在前端更新了字段的值,所以在后台的用户资料中,“昵称”和“公开显示为”两个字段都会同步更新:

所用到的完整代码如下:

/**
 * Add custom fields to UM Account general
 *
 * @param int $user_id
 * @param array $changes
 */
function wpkj_um_after_account_general() {
	$custom_fields = [
		'nickname' => __('昵称'),
	];

	foreach ($custom_fields as $key => $value) {

		$fields[ $key ] = array(
				'title' => $value,
				'metakey' => $key,
				'type' => 'text',
				'label' => $value,
		);

		apply_filters('um_account_secure_fields', $fields, 'general' );

		$field_value = get_user_meta(um_user('ID'), $key, true) ? : '';

		$html = '<div class="um-field um-field-'.$key.'" data-key="'.$key.'">
		<div class="um-field-label">
		<label for="'.$key.'">'.$value.'</label>
		<div class="um-clear"></div>
		</div>
		<div class="um-field-area">
		<input class="um-form-field valid "
		type="text" name="'.$key.'"
		id="'.$key.'" value="'.$field_value.'"
		placeholder=""
		data-validate="" data-key="'.$key.'">
		</div>
		</div>';

		echo $html;

	}
}
add_action('um_after_account_general', 'wpkj_um_after_account_general', 100);


/**
 * Save custom fields
 *
 * @param int $user_id
 * @param array $changes
 */
function wpkj_um_after_user_account_updated( $user_id, $changes ) {

	if( isset( $_POST[ 'nickname' ] ) && !UM()->form()->has_error( 'nickname' ) ) {

		$nickName = sanitize_text_field($_POST[ 'nickname' ]);

		// 更新“昵称”字段
		update_user_meta( $user_id, 'nickname', $nickName );

		// 更新“公开显示为”字段
		wp_update_user( array( 'ID' => $user_id, 'display_name' => $nickName ) );

	}
}
add_action( 'um_after_user_account_updated', 'wpkj_um_after_user_account_updated', 20, 2 );

特别要注意的一点:display_name 字段保存在 wp_users 这个表,不在 wp_usermeta 数据表,所以我们不能使用 update_user_meta() 来更新,而是使用 wp_update_user() 来更新。

参考资料:

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA打赏
共{{data.count}}人
人已打赏
欢迎关注WordPress大学公众号 WPDAXUE
WordPress开发

WordPress添加自定义CSS类名到body标签

2020-5-24 10:09:31

WordPress开发商城相关

WooCommerce 检查用户是否有未完成支付的订单

2020-5-31 10:49:50

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索