Thay đổi giới hạn ký tự tên người dùng từ bốn thành ít ký tự


7

Tôi muốn tạo tài khoản người dùng trên bản cài đặt Wordpress nhiều trang web của mình với tên người dùng dưới 4 ký tự. Nhưng vì Wordpress có giới hạn tên người dùng ít nhất là 4 ký tự, thông báo lỗi này được hiển thị:

Tên người dùng phải có ít nhất 4 ký tự.

Tôi đã tìm thấy một giải pháp liên quan đến thư mục mu-plugins trong thư mục wp-content, nhưng nó không hoạt động. Có cách nào có thể cho phép tôi tạo tài khoản người dùng với tên người dùng dưới 4 ký tự không?


Nếu có vấn đề với câu trả lời của tôi, sẽ rất hữu ích khi biết những gì không hoạt động. Tôi đã thử nghiệm nó như một plugin trên nhiều trang và đăng ký thành công người dùng a, bc.
fuxia

Trên thực tế, đó không phải là câu trả lời của bạn không thể giải quyết vấn đề của tôi. Cá nhân tôi không hữu dụng lắm vì tôi chưa quen với Wordpress.
Ratul

Chỉ cần lưu mã như shortnames.phptrong thư mục plugin của bạn và kích hoạt nó.
fuxia

Câu trả lời:


9

Bạn có thể lọc 'wpmu_validate_user_signup'và kiểm tra xem mã lỗi có khớp với cảnh báo 4 ký tự không. Sau đó chỉ cần bỏ mã lỗi.

Plugin mẫu:

<?php # -*- coding: utf-8 -*-
/* Plugin Name: Allow short user names for multi site. */

add_filter( 'wpmu_validate_user_signup', 'wpse_59760_short_user_names' );

/**
 * Allow very short user names.
 *
 * @wp-hook wpmu_validate_user_signup
 * @param   array $result
 * @return  array
 */
function wpse_59760_short_user_names( $result )
{
    $error_name = $result[ 'errors' ]->get_error_message( 'user_name' );
    if ( empty ( $error_name )
        or $error_name !== __( 'Username must be at least 4 characters.' )
    )
    {
        return $result;
    }

    unset ( $result[ 'errors' ]->errors[ 'user_name' ] );
    return $result;
}

3

Vì có thể có nhiều hơn một lỗi cho tên người dùng, câu trả lời được chấp nhận có thể xóa các lỗi chúng tôi muốn giữ lại. Ví dụ: nhập tên người dùng 123 bây giờ sẽ vượt qua trong khi đó có lẽ vẫn đưa ra thông báo lỗi'Sorry, usernames must have letters too!'

Mã mẫu đã sửa đổi để sửa lỗi này:

/* Plugin Name: Allow short user names for multi site. */

add_filter( 'wpmu_validate_user_signup', 'wpse_59760_short_user_names' );

/**
 * Allow very short user names.
 *
 * @wp-hook wpmu_validate_user_signup
 * @param   array $result
 * @return  array
 */
function wpse_59760_short_user_names( $result )
{
    $error_name = $result[ 'errors' ]->get_error_messages( 'user_name' );
    if ( empty ( $error_name ) 
        or false===$key=array_search( __( 'Username must be at least 4 characters.' ), $error_name)
    )
    {
        return $result;
    }

//  only remove the error we are disabling, leaving all others
    unset ( $result[ 'errors' ]->errors[ 'user_name' ][$key] );
/**
 *  re-sequence errors in case a non sequential array matters
 *  e.g. if a core change put this message in element 0 then get_error_message() would not behave as expected)
 */
    $result[ 'errors' ]->errors[ 'user_name' ] = array_values( $result[ 'errors' ]->errors[ 'user_name' ] );
    return $result;
}

EDIT : Điều này hoạt động trong WordPress lên đến phiên bản 3.9.6 và một lần nữa trong 4.2

Lưu ý rằng điều này không hoạt động trong WordPress 4.0 hoặc 4.1 vì https://core.trac.wordpress.org/ticket/22234 đã biến các lỗi thành một biến riêng tư. Mặc dù phương thức __get ma thuật đã được cung cấp "cho khả năng tương thích ngược", nhưng đối với mảng, nó trả về một bản sao của một mảng (không phải là tham chiếu đến bản gốc) mà sau đó không thể chỉnh sửa được. Nếu bạn đã bật WP_DEBUG, bạn sẽ nhận được Thông báo PHP có nội dung "Thông báo: Sửa đổi gián tiếp thuộc tính bị quá tải WP_Error :: $ lỗi không có tác dụng trong / path / to / plugin trên dòng xxx", nếu không thì mã bị lỗi và không có hiệu lực .

Nó hoạt động trở lại trong phiên bản 4.2 vì https://core.trac.wordpress.org/ticket/30891 đã hoàn nguyên thay đổi cho WP_Error và một số vị trí khác trong lõi, mặc dù vậy, mã như thế này sẽ hoạt động.

Đối với WordPress> = 4.1, phương pháp loại bỏ này cũng hoạt động:

function wpse_59760_short_user_names( $result )
{
    $error_name = $result[ 'errors' ]->get_error_messages( 'user_name' );
    if ( empty ( $error_name ) 
        or false===$key=array_search( __( 'Username must be at least 4 characters.' ), $error_name)
    )
    {
        return $result;
    }

    // remember any error data
    $data = $result[ 'errors' ]->get_error_data( 'user_name' );

    // remove all user name errors
    $result[ 'errors' ]->remove( 'user_name' );

    // add back in any other user name errors we want to keep
    foreach ( $error_name as $index=>$message ) {
        if ( $index !== $key ) 
            $result[ 'errors' ]->add( 'user_name', $message );
    }

    // restore any user_name error data that was present
    if ( !empty( $data ) ) 
        $result[ 'errors' ]->add_data( $data, 'user_name' );

    return $result;
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.