web-dev-qa-db-ja.com

登録中 AJAX function.phpでクラスをインストール化しないでクラスの一部であるコールバック関数

これが可能であるかどうか私にさえわかりません。それにもかかわらず、私は尋ねることを考えました。私はラップ/グループ化する習慣があります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;

これはglobal名前空間に$my_classを追加します。避けたいことfunctions.phpでクラスをインスタンス化せずにAJAXコールバック関数を登録する方法についてのアイデアはありますか?

4
John

のインスタンスが必要なクラスを使用している場合は、そのインスタンスを作成する必要があります どこかに 。現在WPにはそのようなことについての指定された規約はありません。

一般的な方法は静的メソッドを使用することですので、あなたのフックはadd_action('wp_ajax_my_action', array(__CLASS__, 'my_action_callback'));になります。

5
Rarst

これは、クラス内のメソッドから自動的に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 ) );
            }
        }
    }

}
1
Shane Burgess