我有一个自定义插件,它由各种类组成,其中一个类在页面模板中被调用:
$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\\u ajax操作似乎受到了影响,但回调函数没有受到影响,我只得到
0 作为AJAX响应。
现在请记住,这个类只在模板中实例化过。
我尝试将这些AJAX操作添加到我的主插件类和包含的类中的回调中,但理想情况下,我希望它在这个独立类中工作。
这可能是因为在我的模板中间添加了AJAX操作吗?
有办法解决这个问题吗?