在不进行清理的情况下更改用户昵称

时间:2020-04-26 作者:Alexander Goroshev

如何从中删除消毒edit_user_profile 行动

我可以使用以下代码更改user\\u nicename:

function ex_insert_nicename_input( $user ) {
    $content = ob_get_clean();

    // Find the proper class, try to be future proof
    $regex = \'/<tr(.*)class="(.*)\\buser-user-login-wrap\\b(.*)"(.*)>([\\s\\S]*?)<\\/tr>/\';

    // HTML code of the table row
    $nicename_row = sprintf(
        \'<tr class="user-user-nicename-wrap"><th><label for="user_nicename">%1$s</label></th><td><input type="text" name="user_nicename" id="user_nicename" value="%2$s" class="regular-text" />\' . "\\n" . \'<span class="description">%3$s</span></td></tr>\',
        esc_html__( \'Name\' ),
        esc_attr( $user->user_nicename ),
        esc_html__( \'Unique\' )
    );

    // Insert the row in the content
    echo preg_replace( $regex, \'\\0\' . $nicename_row, $content );
}

add_action( \'show_user_profile\', \'ex_insert_nicename_input\' );
add_action( \'edit_user_profile\', \'ex_insert_nicename_input\' );
如果我输入“Ab”并更新用户信息,它将保存为“Ab”。是否可以过滤此过程并清理文本,但不将字母从大写转换为小写?

enter image description hereenter image description here

我唯一需要做的就是删除或更改此行$user_nicename = sanitize_title( $user_nicename ); 在里面user.php. 但我不知道如何做正确,没有改变核心文件。。。

enter image description here

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

筛选器正在将标题转换为小写sanitize_title

// in wp-includes/default-filters.php
add_filter( \'sanitize_title\', \'sanitize_title_with_dashes\', 10, 3 );

// it means => calling sanitize_title_with_dashes() in wp-includes/formatting.php
下面是关于可以做什么、推荐的和不推荐的方法的解释

不建议您删除此过滤器,但not recommmended由于此筛选器用于转换带破折号的标题,因此您可以查看源代码以供参考。

// in theme\'s php
remove_filter( \'sanitize_title\', \'sanitize_title_with_dashes\', 10 );

建议在不影响原始功能的情况下,添加带有自定义检查的过滤器“sanitize_title”

// load later than the original filters
add_filter( \'sanitize_title\', \'ws365107_custom_sanitize_title\', 15, 3 );
function ws365107_custom_sanitize_title( $title, $raw_title, $context ) {

    // may make use of the $_POST object data to check if it adding 

    // for original design $context = \'save\' could distinguish, however, theme developers usually don\'t place this $context argument, so it render the argument useless
    if( $context === \'save\' ) {     
    }

    // check by action if action = createuser from user-new.php, avoid affecting other situation
    // please adjust if use in other situations
    if( isset( $_REQUEST ) && isset($_REQUEST[\'action\']) ) {
        // custom logic in checking user name using $raw_title
        $title = $raw_title;

        return $title;
    }

    // return original title for other situations
    return $title;
}
扩展阅读:

相关推荐

Admin username and password

我使用ceber安全插件再次保护我的网站,防止恶意攻击等。我今天检查了一下,发现有20多处上锁。我检查了ip地址,没有选区,他们来自世界各地。他们的一个共同点是他们输入的用户名,即我的一个管理员用户名。我在想a)他们是怎么得到的。。。我假设从页面更新等,他们有一些方法从检查来源发现?B) 如何防止管理员用户名被公开?还有没有办法将前端和后端分开,这样如果他们登录,就无法访问后端并进行更改?任何帮助都将是惊人的:-)