请用一个过滤器来帮助我了解它们是如何工作的

时间:2014-01-12 作者:user1796995

我正在查看此生成密码功能:

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()?

谢谢

2 个回复
最合适的回答,由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\');
      }
      

SO网友:fuxia

random_password 只是一个name 对于事件,而不是函数。

可以为该名称注册回调(函数或类方法):

add_filter( \'random_password\', \'foo\' );
在这里,foo 必须是已定义的函数:

function foo( $password )
{
    return \'bar\';
}
另请参见:

结束

相关推荐

Too many actions/filters!

这里是wordpress的新成员。动作/过滤器的概念本身并不难理解。令我不知所措的是大量可用的操作和过滤器。当我阅读教程/指南时,他们会说“只需将此功能添加到wp\\U head操作或after\\U setup\\u主题”。如果没有这些教程,我究竟如何知道将该函数与该操作挂钩?作为一个初学者,我怎么会知道什么是合适的操作?有没有关于如何导航的建议?谢谢