Intereting Posts
Динамический DropDown в форме контакта 7 Как меню WP Сортировка по количеству сообщений в админ-области Изменение сообщения об ошибке подключения к базе данных wp_nav_menu и его резерв Сериализация URL через wp add_shortcode для автоматического выбора из списка опций onload Отображать значение настраиваемого поля в столбце страницы администратора Использование оператора switch для изменения изображения в соответствии с последней цифрой идентификатора темы Как запросить все пользовательские сообщения определенного типа и проверить, какая у них категория Как я могу прикреплять горячие ссылки в сообщениях / страницах на одном сервере? get_permalink () дает только ссылку на страницу. как это решить.? Создать пользовательскую конечную точку API доступа, которая переносит существующую конечную точку? Wp die, вызывающий 500 внутренних ошибок сервера? Есть ли способ добавить еще один ряд к переключению кухонной раковины tinyMCE? WP_User_Query не выполняет поиск Как получить панель инструментов wp-editor () в textarea модального

Класс, вызываемый в шаблоне, AJAX не регистрируется

У меня есть настраиваемый плагин, состоящий из разных классов, причем один класс вызывается в шаблоне страницы:

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

Класс MyChart:

 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 '<div id="chart_div" style="width: 100%; height: 100%;"></div>'; } 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 ); } } 

Теперь кажется, что действия wp_ajax ударяются, но функция обратного вызова нет, и я просто получаю 0 как ответ AJAX.

Теперь помните, что этот класс только каждый экземпляр в шаблоне.

Я попытался добавить эти действия AJAX в свой основной класс плагина и обратный вызов в включенном классе, но в идеале я хочу, чтобы он работал в этом автономном классе.

Возможно, это связано с добавлением действий AJAX в середине моего шаблона?

Есть ли способ обойти это?

Вы не можете подключиться к AJAX в шаблоне, потому что шаблон не будет загружен admin-ajax.php, когда будет выполнен запрос. Вам нужно подключиться к AJAX при загрузке плагина.

Поскольку ваши крючки определены в конструкторе класса (независимо от того, является ли это хорошей идеей, другая проблема ), вам нужно создать экземпляр своего класса всякий раз, когда загружается администратор WordPress. Вы не могли этого, поместив $chart = new MyCharts\Chart() прямо в ваш основной файл плагина или файл, который был включен в него.