問題描述

如何向使用者名稱欄位新增過濾器以阻止新使用者使用不必要的字詞 (如 administrator) 或一般褻瀆性進行註冊?

理想情況下,如果我可以新增一個大量的被阻止的單詞列表,該列表可以新增星號 (*) 作為萬用字元,例如 genitals*

最佳解決方案

根據安裝情況,可以使用兩個非常不同的鉤子:

  • wpmu_validate_user_signup 用於 multi-site 和

  • registration_errors 用於 single-site 。

以下未經測試的程式碼顯示如何使用它們。您可以根據需要調整 user_name_is_forbidden()中的陣列。使用正規表示式進行匹配。

// multi-site
add_filter( 'wpmu_validate_user_signup', function( $result )
{
    // there is already an error
    if ( $result['errors']->get_error_message('user_name') )
        return $result;

    if ( user_name_is_forbidden( $result['user_name'] ) )
        $result['errors']->add('user_name',  __( 'That username is not allowed.' ) );

    return $result;
});

//single-site
add_filter( 'registration_errors', function( $errors, $name )
{
    if ( user_name_is_forbidden( $name ) )
        $errors->add('user_name',  __( 'That username is not allowed.' ) );
    return $errors;
}, 10, 2);


function user_name_is_forbidden( $name )
{
    // If you need the character '~', write it as '~'.
    $forbidden = array(
        'admin.*',
        'genitals.*',
        'system.*'
    );

    return (bool) preg_match( '~' . join( '|', $forbidden ) . '~i', $name );
}

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。