¿Cómo uso add_action desde un método de clase?

4

Para algunos contextos, estamos creando un sistema de activación para nuevos usuarios de una aplicación utilizando WordPress como marco. Tenemos un complemento que controla la mayoría de nuestras interacciones, donde reside todo este código.

Cuando un nuevo usuario se registra, se le envía un enlace de activación por correo electrónico, que al hacer clic, lo envía a una página de activación. Cuando guardan sus datos, deseamos crear al usuario con los metadatos adecuados y redirigirlos a una plantilla de enrutamiento personalizada que los envíe a su subsitio personal.

Tenemos a nuestra disposición el nombre de usuario y la contraseña del usuario creado recientemente, por lo que podemos utilizar wp_signon () . Tenemos una clase Registration_Model que se crea una instancia en otro lugar. Nuestro método de clase para iniciar el proceso de inicio de sesión es donde creo que queremos llamar a add_action.

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

Nuestro método para procesar el inicio de sesión se encuentra a continuación, pero tenga en cuenta que he probado la función para ver si WordPress está impulsando la acción haciendo eco en una cadena, que no hace 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;
         }
     }
}

Realmente parece que estoy atascado en la acción que no se está ejecutando, o algo así. ¿Se puede ejecutar add_action desde otro lugar que no sea el constructor de la clase? Cualquier y todo consejo o ayuda es apreciado.

EDIT

He ajustado la función para usar $this en lugar de __CLASS__ , aunque todavía no obtenemos nada al enlazar con 'init'. Solo como prueba, he usado el último enganche absoluto que se activa, 'shutdown', y puedo hacer una cadena de prueba al navegador que lo usa. Así que sé que hay un montón de operaciones cargando, así que probablemente necesito mover el add_action a otro lugar para que se dispare antes.

    
pregunta ToddSmithSalter 30.01.2013 - 18:49

2 respuestas

5

Has intentado

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

__CLASS__ devuelve el nombre de la clase, no la instancia de la clase, por lo que solo funciona para funciones estáticas.

    
respondido por el vancoder 30.01.2013 - 19:36
2

__CLASS__ debería ser $this en su llamada add_action . Creo que __CLASS__ solo se usa si la función es static

    
respondido por el Manny Fleurmond 30.01.2013 - 19:35

Lea otras preguntas en las etiquetas