如何从类方法中使用Add_action?

时间:2013-01-30 作者:ToddSmithSalter

在某些情况下,我们正在使用WordPress作为框架为应用程序的新用户构建一个激活系统。我们有一个插件驱动我们的大多数交互,所有这些代码都驻留在这个插件中。

当新用户注册时,会通过电子邮件向他们发送一个激活链接,单击该链接后,会将他们发送到激活页面。当他们保存他们的详细信息时,我们希望用适当的元数据创建用户,并将他们重定向到自定义路由模板,该模板将他们发送到他们的个人子网站。

我们有新创建用户的用户名和密码,因此我们可以使用wp_signon(). 我们有一个Registration\\u Model类,它在其他地方实例化。我们启动登录过程的类方法就是我想调用add\\u action的地方。

public function sign_user_in() {
    add_action( \'init\', array( $this, \'auto_sign_in\') );
}
我们处理登录的方法如下所示,但请注意,我已经测试了该函数,以查看WordPress是否通过回显字符串来提示该操作,而字符串没有任何作用。

public function auto_sign_in()
{
    // if ( ! is_user_logged_in() ) {

         //determine WordPress user account to impersonate
         $creds = array();
         $creds[\'user_login\'] = $this->user->email;
         $creds[\'user_password\']  = $this->user->password->one;
         $creds[\'remember\'] = true;
         $user = wp_signon( $creds, false );
         if ( is_wp_error( $user ) ) {
             echo $user->get_error_message();
         } else {
             wp_redirect(\'/_router/\'); exit;
         }
     }
}
看起来我真的被困在了没有运行的动作上,或者其他什么。add\\u操作是否可以从类构造函数以外的其他位置运行?非常感谢您的任何建议或帮助。

EDIT

我已将函数调整为使用$this 而不是__CLASS__, 虽然我们在挂接“init”时仍然一无所获。作为一个测试,我使用了触发“shutdown”的最后一个钩子,我可以使用它向浏览器回显测试字符串。所以我知道有一大堆操作正在加载,所以我可能需要将add\\u操作移动到其他地方,以便更早地启动。

2 个回复
SO网友:vancoder

你试过了吗

add_action( \'init\', array( $this, \'auto_sign_in\') );
__CLASS__ 返回类名,而不是类实例,因此它只适用于静态函数。

SO网友:Manny Fleurmond

__CLASS__ 应该是$this 在您的add_action 呼叫我想__CLASS__ 仅当函数为static

结束

相关推荐

通过挂钩替换wp-login.php登录表单,并使用带有wp-登录表单验证的自定义表单

我正在自定义所有wp登录。php表单,即登录、丢失密码、注册等。我有一个工作模型,但当我解码在自定义表单上抛出默认错误消息时,我想一定有更好的方法来创建自定义表单,并且仍然使用wp登录。php来完成所有繁重的工作,以及为什么在wp登录时编写自定义表单验证。php做得足够好吗?我正在构建一个插件。这是我的工作解决方案:1) 每个表单(登录、丢失通行证等)都是单独的。php文件。I表单的文件由get\\u header()和get\\u footer()包装2) 每个表单的操作都是wp登录。php。因此,当我