我正在尝试编写一个OOP插件,将我的shortcode参数传递给类,将它们存储为类变量,然后在AJAX调用中使用它们。
以下是一个示例:
class WPAJAXClassTest {
private $message;
public function __construct() {
add_action(\'wp_enqueue_scripts\', array($this,\'enqueue_scripts\'));
add_action( \'wp_ajax_testAJAX\', array($this,\'testAJAX\'));
add_action( \'wp_ajax_nopriv_testAJAX\', array($this,\'testAJAX\'));
}
function wpAJAXClassTest($args) {
$msg=shortcode_atts(array(
\'message\' => \'Hello World!\'
), $args
);
$this->setMessage($msg[\'message\']);
$html="<button id=\'testbutton\'>test</button><p id=\'testreturn\'>".$msg[\'message\']." - ".$this->message."</p>";
return $html;
}
public function setMessage($m) {
$this->message=$m;
}
function enqueue_scripts() {
$plugin_url = plugins_url()."/wpajaxclasstest";
wp_enqueue_script(\'wpajaxclasstest_script\', $plugin_url.\'/js/plugin.js\', array("jquery"));
wp_localize_script( \'wpajaxclasstest_script\', \'myASPlugin\', array(\'plugin_dir\' => $plugin_url));
wp_localize_script( \'wpajaxclasstest_script\', \'myAJAX\', array(\'ajaxurl\' => admin_url( \'admin-ajax.php\' )));
}
function testAJAX() {
header("Content-Type: application/json");
$returnArray=array();
$returnArray[\'message\']=$this->message;
echo json_encode($returnArray);
exit();
}
}
我有一个调用AJAX函数的简单javascript
$.ajax({
url: myAJAX.ajaxurl,
data: json,
method: "POST",
error: function(data) {
alert("Error! "+JSON.stringify(data));
},
success: function(data) {
alert(JSON.stringify(data));
}
});
我的问题是,当我使用我的短代码[wpAJAXClassTest]或[wpAJAXClassTest message=\'再见残酷世界!\']时,我总是得到一个json返回{“message”:“null”},而不是我所期望的类变量$message。
我不想使用静态getinstance,因为我希望能够在同一页面上拥有同一插件的多个实例。
如何让AJAX函数访问类变量?
要澄清:
我想在一个页面上有两个按钮,由短代码标记驱动
[testAJAX message="hello"]
以及
[testAJAX message="world"]
当我单击一个按钮时,AJAX函数应返回{“message”:“hello”},另一个应返回{“message”:“world”}