我试图在我的插件类中调用ajax函数。但是控制台在for cl in tqdm(classes.compute()):
我尝试在构造函数中和函数中添加ajax钩子(如此处所示),但是它们都不起作用。但是在类之外,PHP ajax函数可以按预期工作。
(我是插件开发和OOP的新手,所以请分享一些最佳实践)
for cl in classes.compute():
答案 0 :(得分:0)
尝试一下。未经测试
<?php
/*
Plugin Name: Test
Version: 1.0
Plugin URI:
Description: test desc
Author: Vel
Author URI: Test
*/
class Wps_Wc_Sync {
function __construct(){
add_action( 'wp_enqueue_scripts', array($this, 'wpsp_enqueue_scripts_styles') );
add_action('wp_ajax_wpsp_admin_ajax_method', array($this, 'wpsb_fnc_ajax_handler'));
add_action('wp_ajax_nopriv_wpsp_admin_ajax_method', array($this, 'wpsb_fnc_ajax_handler'));
add_action("wp_footer", array($this, "ajax_call_footer"));
}
public function wpsp_enqueue_scripts_styles(){
echo '<script>var wpsp_admin_ajax_url = "'.admin_url("admin-ajax.php").'";</script>';
}
public function wpsb_fnc_ajax_handler(){
$gotomethod = trim($_POST['gotomethod']);
if(!empty($gotomethod) && method_exists($this, $gotomethod)){
$rtnval = call_user_method($gotomethod,$this, $_POST);
die($rtnval);
}else
die('no-method found');
}
public function test(){
print_r($_POST);
exit;
}
public function ajax_call_footer(){
?>
<script>
jQuery( document ).ready(function($) {
console.log('ajax');
parseCsvAjax(0);
function parseCsvAjax(lastfile = 0) {
jQuery.ajax({
type: "POST",
url: wpsp_admin_ajax_url,
data: {
action: 'wpsb_fnc_ajax_handler',
gotomethod:'test',
lastfile: lastfile,
},
success: function (data) {
console.log(data);
},
error: function (jqXHT, textStatus, errorThrown) {console.log('Error');}
});
}
});
</script>
<?php
}
}
$wps_wc_sync = new Wps_Wc_Sync();
答案 1 :(得分:0)
以上答案无效。 但是有效的方法是在我的插件init(插件的主文件)中调用该类。
function run_wps_wc() {
$plugin = new Wps_Wc();
$plugin->run();
$sync = new Wps_Wc_Sync();
}
run_wps_wc();