Registrando a função de retorno de chamada AJAX que faz parte de uma classe sem instanciar a classe em function.php

4

Eu nem tenho certeza se isso é possível. Mas, no entanto, pensei em perguntar. Eu tenho o hábito de agrupar / agrupar chamadas AJAX para uma necessidade específica dentro de uma classe. Veja abaixo.

class my_class {
    function __construct() {
        $this->hooks();
    }

    function hooks() {
        add_action('wp_ajax_my_action', array($this, 'my_action_callback'));
    }

    function my_action_callback() {
        // do something
    }
}

Agora, para que o retorno de chamada AJAX funcione, devo adicionar o seguinte a functions.php (sem envolvê-lo em nenhuma função) para instanciar a classe e fazer o retorno de chamada funcionar.

$my_class = new my_class;

Isso adiciona $my_class ao namespace global . Algo que eu gostaria de evitar. Alguma idéia de como eu posso registrar a função de callback do AJAX sem instanciar a classe em functions.php ?

    
por John 17.05.2013 / 22:19

2 respostas

5

Se você está usando uma classe que precisa de uma instância, você precisa criar essa instância em algum lugar . Atualmente, o WP não tem uma convenção designada para algo assim.

A prática comum é usar métodos estáticos, portanto, seu gancho se torna add_action('wp_ajax_my_action', array(__CLASS__, 'my_action_callback')); .

    
por Rarst 17.05.2013 / 23:17
1

Aqui está um exemplo de uma classe que eu uso para criar automaticamente retornos de chamada ajax de métodos na classe. Ele age quase como um roteador.

class AjaxEndpoint {
    //Loop through all functions and add them as ajax actions
    public function registerActions() {
        foreach ( get_class_methods( $this ) as $method_name ) {
            if ( $method_name !== 'registerActions' ) {
                add_action( "wp_ajax_".$method_name, array( $this, $method_name ) );
                //add_action( "wp_ajax_nopriv_".$method_name, array( $this, $method_name ) );
            }
        }
    }

}
    
por Shane Burgess 15.02.2015 / 17:14

Tags