我创建了一个相当简单的类,用于在wordpress admin中处理元盒的创建。
我已经设置了该类,以便该类的每个实例都表示一个新的元盒定义。每个类实例都将其元盒定义存储为一个私有类变量,该变量在整个类中用于绘制元盒字段等。到目前为止,一切正常。有一个单独的类变量,用于定义metabox是否可重复。如果是,metabox类会添加必要的操作和javascript来处理admin ajax调用。
现在,这个对管理ajax的调用导致了一个奇怪的问题。出于某种原因,admin ajax调用总是返回第一个创建的元盒的元盒定义,而不管哪个元盒实际调用admin\\u ajax方法。
这就是我设置管理ajax操作的方式。条件仅检查元盒是否支持可重复的元素。
if($this->is_dynamic){
add_action(\'wp_ajax_get_cloned_content\', array(&$this,\'ref_AJAX_get_cloned_content\'));
}
下面是我的管理ajax调用。
public function ref_AJAX_get_cloned_content( ){
check_ajax_referer(\'get_cloned_content\', \'nonce\');
$newFormData = json_encode($this->renderForm($this->m_box[\'fields\']));
$success_response = new WP_Ajax_Response();
$success_response->add(array(
\'what\' => \'mbox\',
\'data\' => $newFormData,
\'supplemental\' => array(\'fielddata\' => $newFormData)
));
$success_response->send();
exit;
}
这是对管理ajax处理程序的javascript调用。
var data = {
action: \'get_cloned_content\',
nonce: <?php echo wp_create_nonce(\'get_cloned_content\');?>,
};
$.post(ajaxurl, data, function(response) {
var res = wpAjax.parseAjaxResponse(response, \'ajax-response\');
jQuery.each( res.responses, function() {
console.log(this.supplemental.fielddata);
});
});
调用ajax方法和获取响应没有问题,问题在于如何获取实际的类实例字段数据。我不知道为什么wordpress不会从管理ajax调用返回我的类实例变量值。
你知道为什么会发生这种情况吗?
我可以通过使用不同的非管理ajax方法来克隆metabox字段来解决这个问题,但我仍然想知道为什么我的头撞到墙上后会出现这个问题。