我正在查看此生成密码功能:
function wp_generate_password( $length = 12, $special_chars = true, $extra_special_chars = false ) {
$chars = \'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\';
if ( $special_chars )
$chars .= \'!@#$%^&*()\';
if ( $extra_special_chars )
$chars .= \'-_ []{}<>~`+=,.;:/?|\';
$password = \'\';
for ( $i = 0; $i < $length; $i++ ) {
$password .= substr($chars, wp_rand(0, strlen($chars) - 1), 1);
}
// random_password filter was previously in random_password function which was deprecated
return apply_filters(\'random_password\', $password);
}
我想了解的是apply\\u filters部分。它返回random\\u password($password)是否正确?其中random\\u password是过滤器函数?但我在任何源文件中都找不到定义的random\\u密码?
如果源代码找不到random\\u password(),它将返回$password,如果它能找到在某处定义的random\\u password(),它将返回random\\u password($password),我的想法对吗?如果是,我在源代码中的何处定义random\\u password()?
谢谢
最合适的回答,由SO网友:sakibmoon 整理而成
要完全理解WP是如何工作的,您需要理解WP是一个事件驱动的平台(虽然它是一个松散的术语,但我认为它确实有助于更好地理解)。你需要像现在正在发生的事件那样思考。
在这种情况下,将生成密码。
下一个问题是,如何改变这种生成所需的方式。WP提供了一个名为random_password
具有apply_filters
并且还提供了生成的密码供您更改(还有操作挂钩。请参阅Difference Between Filter and Action Hooks?).
您可以定义用于更改密码的函数add_filter
.
我请您首先阅读
- apply_filters
- add_filter让我们回到你的例子。我还邀请您阅读
- wp_generate_password法典说
它从定义的字符集生成随机密码。
现在,假设您想创建一个插件,该插件将更改生成密码的方式。
您不能(无论如何都不想)更改WP核心文件的代码。但你需要做到这一点。Wordpress为您提供了通过filter hook
.
apply_filter
函数在本例中创建一个名为random_password
. 因此,现在您可以选择更改生成的密码,因为密码也作为参数发送。
所以random_password
不是一个函数,它是一个过滤器,您可以通过它过滤WP生成的密码。
现在回到更改自动生成的密码的愿望,您可以使用如下过滤器:
add_filter(\'random_password\', \'my_generated_password\');
在这种情况下,密码生成/调用的每个事件wp_generate_password
也将呼叫my_generated_password
您定义的函数,它将通过$password
作为参数。出于演示目的,假设您想添加一个额外的字符L
到生成的密码。在这种情况下,您将如下定义函数:
function my_generated_password($password){
return ($password . \'L\');
}