Como eu uso o add_action de um método de classe?

4

Para algum contexto, estamos criando um sistema de ativação para novos usuários de um aplicativo usando o WordPress como estrutura. Temos um plug-in que impulsiona a maioria de nossas interações, onde todo esse código reside.

Quando um novo usuário se inscreve, ele recebe um link de ativação por e-mail, que, quando clicado, envia-o para uma página de ativação. Quando eles salvam seus detalhes, queremos criar o usuário com os metadados apropriados e redirecioná-los para um modelo de roteamento personalizado que os envia para o subsite pessoal deles.

Temos o nome de usuário e senha do usuário recém-criado disponíveis para nós, para que possamos usar wp_signon () . Nós temos uma classe Registration_Model que é instanciada em outro lugar. Nosso método de classe para iniciar o processo de login é onde eu acredito que queremos chamar o add_action.

public function sign_user_in() {
    add_action( 'init', array( $this, 'auto_sign_in') );
}

Nosso método para processar o login está abaixo, mas fique atento, eu testei a função para ver se a ação está sendo questionada pelo WordPress fazendo eco de uma string, que não faz nada.

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;
         }
     }
}

Parece mesmo que estou preso à ação que não está sendo executada, ou algo assim. O add_action pode ser executado em algum lugar diferente do construtor da classe? Todo e qualquer conselho ou ajuda é apreciado.

EDITAR

Eu ajustei a função para usar $this em vez de __CLASS__ , embora ainda não recebêssemos nada ao conectarmos ao 'init'. Apenas como um teste, eu usei o último gancho absoluto que dispara, 'shutdown', e eu posso repetir uma string de teste para o navegador usando-o. Então eu sei que há um monte de operações carregando, então eu provavelmente preciso mover o add_action para outro lugar para que ele seja acionado antes.

    
por ToddSmithSalter 30.01.2013 / 18:49

2 respostas

5

Você já tentou

add_action( 'init', array( $this, 'auto_sign_in') );

__CLASS__ retorna o nome da classe, não a instância da classe, por isso só funciona para funções estáticas.

    
por vancoder 30.01.2013 / 19:36
2

__CLASS__ deve ser $this na sua chamada add_action . Eu acho que __CLASS__ é usado apenas se a função for static

    
por Manny Fleurmond 30.01.2013 / 19:35