动态操作LOGIN_FORM_{ACTION}如何工作

时间:2017-04-18 作者:Himanshu

我在wp登录中找到了这个操作挂钩。php文件。它表示可以使用它为wp登录创建自定义操作。然而,由于我不熟悉WP编码和PHP,我不明白{action}如何工作,即使它是在双引号下?这是动作挂钩:

do_action( "login_form_{$action}" );
在我下面的插件中,这个动作挂钩是由以下内容添加的:

add_action( \'login_form_login\', array( $this, \'redirect_to_custom_login\' ));
login\\u form\\u login如何匹配和替换login\\u form{action}?

2 个回复
SO网友:birgire

这是一个动态挂钩:

do_action( "login_form_{$action}" );
这意味着它取决于$action 变量

WordPress核心中还使用了其他此类挂钩。

您可以在《核心贡献者手册》中查看动态挂钩的命名约定here. 上面写着,例如:

出于可读性和可发现性的目的,应该使用插值而不是串联来命名动态挂钩。

PHP中的双引号字符串可以解析变量,这就是为什么它不使用单引号编写的原因:

do_action( \'login_form_{$action}\' );
查看PHP文档中的卷曲语法variable parsing 部分

Example:

如果我们有:

$action = \'login\';
然后将生成以下操作:

do_action( "login_form_login" );
插件可以通过以下方式连接:

add_action( \'login_form_login\', ... );

SO网友:Nathan Johnson

$action 是在wp登录的第384行上设置的变量。php(自WordPress 4.7.3起)。

$action = isset($_REQUEST[\'action\']) ? $_REQUEST[\'action\'] : \'login\';
当WordPress到达第428行时,它首先对双引号内的字符串求值为login_form_login 如果$_REQUEST[\'action\'] 未设置变量。如果设置了该变量,例如register, 然后,双引号内的字符串将计算为login_form_register.

当WordPress函数do_action() 已解释,请参见line 421 of wp-includes/plugin.php, 做一些事情,在第453行应用do_action() 的方法$wp_filter 全球的

要了解此方法的作用,我们需要转到line 321 of wp-includes/class-wp-hook.php, 因为挂钩只是简化的过滤器,所以调用apply_filters() 方法,该方法位于同一文件的第276行。

此方法的相关部分是第296、298和300行,它们如下所示:

$value = call_user_func_array( $the_[\'function\'], array() );
call_user_func_array() 是一个PHP函数,它使用参数数组调用回调。

WordPress存储$wp_filter 全球的我们使用add_action()add_filter() 功能。

add_action( \'login_form_login\', array( $this, \'redirect_to_custom_login\' ));
这是告诉WordPress向login_form_login 钩子和可调用回调是redirect_to_custom_login 方法来自$this 对象

相关推荐

使用快速编辑更新POST时,POST_ROW_ACTIONS过滤器不工作

我使用post\\u row\\u操作创建了两个链接,页面加载时显示良好。但使用快速编辑更新帖子后,链接将消失。是WordPress的bug还是我错过了什么。我的代码如下所示。add_filter(\'post_row_actions\', \'add_new_link\', 10, 2); public function add_new_link($actions, $page_object) { $actions[\'new_action\'] = \'<