You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ultimate Member自定义用户名验证功能失效求助

解决Ultimate Member自定义用户名验证失效问题

针对你在WordPress 6.3.1 + Ultimate Member 2.6.11环境下,自定义用户名验证代码不生效的问题,以下是具体排查和修复方案:

问题分析

原代码存在两个核心问题:

  1. PHP版本兼容性:str_contains是PHP 8.0+专属函数,若服务器PHP版本低于8.0,代码会静默执行失败。
  2. 钩子优先级:原代码优先级设为8,可能晚于Ultimate Member内部的验证逻辑,导致自定义错误被覆盖。

修复后的代码

方案一:兼容低版本PHP(推荐)

将str_contains替换为兼容PHP 7.4+的strpos,并提高钩子优先级确保优先执行:

add_action( 'um_submit_form_errors_hook', function( $args ) {
    if ( isset( $args['mode'] ) && 'register' === $args['mode'] ) {
        // 先确认用户名字段存在
        if ( isset( $args['user_login'] ) ) {
            // 用strpos替代str_contains,兼容PHP<8.0
            if ( strpos( $args['user_login'], '1234' ) === false ) {
                UM()->form()->add_error( 'user_login', __( 'Username must contain the string "1234".', 'ultimate-member' ) );
            }
        }
    }
}, 1, 1 ); // 提高优先级到1,确保在UM默认验证前执行

方案二:使用UM专属验证钩子

改用Ultimate Member提供的um_custom_field_validation钩子,专门处理字段自定义验证:

add_action( 'um_custom_field_validation', function( $key, $array, $args ) {
    if ( 'user_login' === $key && 'register' === $args['mode'] ) {
        $username = $array['user_login'];
        if ( strpos( $username, '1234' ) === false ) {
            UM()->form()->add_error( 'user_login', __( 'Username must contain the string "1234".', 'ultimate-member' ) );
        }
    }
}, 10, 3 );

额外排查步骤

  • 确认代码添加到主题的functions.php文件或自定义插件中,不要直接修改Ultimate Member的核心文件。
  • 检查服务器PHP版本,WordPress 6.3.1要求最低PHP 7.4,若低于8.0必须使用strpos。
  • 清除网站缓存(包括插件缓存、CDN缓存),避免旧代码残留。

内容的提问来源于stack exchange,提问作者liz14

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 02:35:15