WordPress代码片段实现隐藏account_display_name字段禁止用户修改显示名称
实现方案
禁止用户修改账户显示名需要同时做前端隐藏和后端校验,仅隐藏前端字段可被绕过,完整实现逻辑如下:
1. 前端隐藏「账户显示名」表单字段
在我的账户页面加载后执行以下JS代码,可直接隐藏对应字段及关联的表单模块:
document.addEventListener('DOMContentLoaded', () => { // 匹配name属性为account_display_name的输入框 const displayNameInput = document.querySelector('input[name="account_display_name"]'); if (!displayNameInput) return; // 隐藏输入框本身 displayNameInput.hidden = true; // 隐藏输入框所属的整个表单组(包含标签、提示文案等) const formGroup = displayNameInput.closest('.form-field, .form-item, .form-group'); formGroup && (formGroup.hidden = true); });
如果是服务端渲染的页面,也可以直接在模板渲染环节去掉该字段的输出,比前端隐藏效果更彻底。
2. 后端拦截修改请求(必做,避免绕过前端限制)
仅靠前端隐藏无法阻止用户通过构造请求修改显示名,必须在后端更新用户信息的逻辑中增加拦截规则:
通用逻辑:处理用户信息更新请求时,判断当前操作的用户权限,非管理员账号直接忽略
account_display_name字段的传参,不执行该字段的数据库更新操作即可。
以WordPress场景为例,可直接使用以下代码片段实现拦截:
add_action('user_profile_update_errors', function ($errors, $isUpdate, $user) { // 放行管理员操作,仅拦截普通用户的资料更新请求 if ($isUpdate && !current_user_can('manage_options')) { // 直接移除提交的显示名参数,不会更新原有值 unset($_POST['account_display_name']); // 若需要给用户提示,可打开下行注释 // $errors->add('forbidden_edit_display_name', '抱歉,账户显示名称不支持自行修改'); } }, 10, 3);
其他后端语言/框架可以参考上述逻辑自行适配。
内容的提问来源于stack exchange,提问作者mnrlab
相关产品推荐
相关产品推荐

