class in Vorlage aufgerufen, AJAX nicht registriert

Ich habe ein benutzerdefiniertes Plugin, das aus verschiedenen classn besteht, wobei eine class in einer Seitenvorlage aufgerufen wird:

$chart = new MyCharts\Chart(); $csv = get_field( 'csv' ); // URI to .csv file $chart->init( $csv ); 

MyChart-class:

 use League\Csv\Reader; class Chart { private $id; protected $reader; protected $columns; protected $rows; protected $results; public function __construct() { add_action( 'wp_ajax_get_chart_data', [ $this, 'get_chart_data' ] ); add_action( 'wp_ajax_nopriv_get_chart_data', [ $this, 'get_chart_data' ] ); add_action( 'wp_footer', [ $this, 'load_chart_scripts' ] ); } public function load_chart_scripts() { wp_enqueue_script( 'google_chart', 'https://www.gstatic.com/charts/loader.js' ); wp_enqueue_script( 'bar_chart', plugins_url( '/js/bar-chart.js', __FILE__ ), 'jquery' ); } public function init( $csv ) { $this->print_chart_container(); $this->parse_csv( $csv ); } private function print_chart_container() { echo '
'; } private function parse_csv( $csv ) { $parse_csv_url = parse_url( $csv ); try { $this->reader = Reader::createFromPath( ltrim( $parse_csv_url['path'], '/' ) ); $this->rows = $this->reader->fetchAssoc(); $this->columns = $this->reader->fetchOne( 0 ); // fetch first row as column names } catch ( \Exception $e ) { echo $e->getMessage(); } } public function get_chart_data() { $result = new \stdClass(); // dummy data for testing $result->columns = 'test'; $result->rows = 'test'; $this->results[] = $result; return wp_send_json( $this->results ); } }

Nun, es scheint, dass die wp_ajax-Aktionen getroffen werden, aber die Callback-function ist nicht, und ich bekomme einfach 0 als AJAX-Antwort.

Denken Sie daran, dass diese class nur in jeder Instanz instanziiert ist.

Ich habe versucht, diese AJAX-Aktionen in meine Haupt-Plug-in-class und den Callback in einer enthaltenen class einzufügen, aber idealerweise möchte ich, dass es in dieser eigenständigen class funktioniert.

Liegt das möglicherweise daran, die AJAX-Aktionen in der Mitte meiner Vorlage hinzuzufügen?

Gibt es einen Weg dahin?

Solutions Collecting From Web of "class in Vorlage aufgerufen, AJAX nicht registriert"

Sie können sich nicht in einer Vorlage in AJAX einklinken, da die Vorlage bei Anforderung nicht von admin-ajax.php geladen wird. Sie müssen sich in AJAX einklinken, wenn das Plugin geladen wird.

Da Ihre Hooks im classnkonstruktor definiert sind (unabhängig davon, ob dies eine gute Idee ist oder nicht, müssen Sie Ihre class instanziieren, wenn der WordPress-Administrator geladen wird.) Sie könnten dies nicht $chart = new MyCharts\Chart() indem Sie $chart = new MyCharts\Chart() direkt in Ihre Haupt-Plugin-Datei oder eine Datei $chart = new MyCharts\Chart() , die von ihr enthalten ist.