我有一个连接到load edit的函数。打印打印内容的php:
add_action(\'load-edit.php\', array($this, \'generate_bulk_print_content\'));
public function generate_bulk_print_content() {
//check for bulk action & print
}
我用以下(常见)技巧准备了批量操作触发器:
add_action( \'admin_footer-edit.php\', array(&$this, \'add_to_bulk_actions\'));
public function add_to_bulk_actions() {
global $post_type;
if ( \'shop_order\' == $post_type ) {
?>
<script type="text/javascript">
jQuery(document).ready(function() {
jQuery(\'<option>\').val(\'custact\').text(\'<?php _e( \'Custom action\', \'woocommerce\' )?>\').appendTo("select[name=\'action\']");
jQuery(\'<option>\').val(\'custact\').text(\'<?php _e( \'Custom action\', \'woocommerce\' )?>\').appendTo("select[name=\'action2\']");
});
</script>
<?php
}
}
所有这些都像人们所期望的那样工作,除了这样一个事实:当我在打印内容之后死亡()或退出()时,我只能看到我的打印内容。但是,我希望此打印内容显示在管理页面的thickbox中,而不是显示在新的(否则为空)页面上。当我尝试在其他位置访问操作变量时,它将无法再访问操作变量。在我点击动作按钮和下一次再次进入编辑页面之间发生了什么?我的打印内容去哪里了?
有没有其他方法可以使用现有的按钮,或者将我的东西放到管理ajax中,而不是编辑页面(我认为这是一个完全重新加载的页面)?
编辑:更进一步,我意识到我可能不应该使用单击按钮时重新加载页面的默认操作,现在我使用以下JS:
$("#doaction, #doaction2").click(function (event) {
var actionselected = $(this).attr("id").substr(2);
if ($(\'select[name="\' + actionselected + \'"]\').val() == "bulkprint") {
event.preventDefault();
var checked = [];
$(\'tbody th.check-column input[type="checkbox"]:checked\').each(
function() {
checked.push($(this).val());
}
);
data = {
action: \'bulkprint\',
orders: checked
};
$.post(ajaxurl, data, function (response) {
//how to output this to the standard thickbox?
});
}
});
现在,难题的最后一部分是将我的ajax响应放入一个thickbox中。tb\\U show不起作用,因为这需要一个常规链接,而我希望将post数据传递给管理员ajax(而不是使用参数)。