これが可能であるかどうか私にさえわかりません。それにもかかわらず、私は尋ねることを考えました。私はラップ/グループ化する習慣があります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コールバック関数を登録する方法についてのアイデアはありますか?
のインスタンスが必要なクラスを使用している場合は、そのインスタンスを作成する必要があります どこかに 。現在WPにはそのようなことについての指定された規約はありません。
一般的な方法は静的メソッドを使用することですので、あなたのフックはadd_action('wp_ajax_my_action', array(__CLASS__, 'my_action_callback'));
になります。
これは、クラス内のメソッドから自動的に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 ) );
}
}
}
}