問題描述
如何向用户名字段添加過濾器以阻止新用户使用不必要的字詞 (如 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。