注册作为类的一部分的AJAX回调函数,而不实例化unction.php中的类

时间:2013-05-17 作者:John

我甚至不确定这是否可行。但尽管如此,我还是想问一下。我习惯于根据类中的特定需要包装/分组AJAX调用。见下文。

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
    }
}
现在,为了让AJAX回调正常工作,我必须将以下内容添加到functions.php (无需将其包装在任何函数中)来实例化该类并使回调工作。

$my_class = new my_class;
这增加了$my_classglobal 命名空间。我想避免的事情。您知道如何注册AJAX回调函数而不必在中实例化类吗functions.php?

2 个回复
最合适的回答,由SO网友:Rarst 整理而成

如果您使用的类需要的实例,则必须在某处创建该实例。目前,WP还没有这样的指定约定。

通常的做法是使用静态方法,因此钩子add_action(\'wp_ajax_my_action\', array(__CLASS__, \'my_action_callback\'));.

SO网友:Shane Burgess

下面是一个我用来从类中的方法自动创建ajax回调的类的示例。它几乎像路由器一样工作。

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

}

结束

相关推荐

使用jQuery FancyBox从前端发出AJAX请求

我希望能够使用jQuery Fancybox的Ajax特性从前端请求数据。下面是我在插件部分使用的代码的一部分:wp_localize_script( \'wpPluginjs\', \'ajax_vars\', array( \'url\' => admin_url( \'admin-ajax.php\' ), \'nonce\' => wp_create_nonce( \'ajax-nonce\' ) )&