我的函数从Load-*输出到哪里?

时间:2013-01-16 作者:Ewout

我有一个连接到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(而不是使用参数)。

1 个回复
SO网友:Ewout

好的,我已经解决了我的问题,但我的问题(为什么我需要在load-*函数的末尾放置die(),让它显示出来)仍然没有答案。

我找不到任何方法可以使用tb\\U show同时将超级全局post变量发送到目标url。tb\\U show只需调用url并将其放入iframe中。我想如果我希望输出是真正的ajax,我需要在页面的某个地方放置一个div,供thickbox使用,并让ajax调用该div的输出。

我最终决定采用一种方法,在这种方法中,我将变量(在本例中只是post id)传递到url,并读取带有$\\u GET的变量。

javascript:

$("#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());
            }
        );

        var order_ids=checked.join(\'x\');
        url = \'admin-ajax.php?action=bulkprint&order_ids=\'+order_ids;

        tb_show(\'\', url + \'&TB_iframe=true&width=720&height=460\');
    }
});
(nifty simple url encoding trick 取自stackoverflow)

结束

相关推荐

通过AJAX将帖子加载到侧边栏并分页?

是否可以在侧栏中分页或加载下一篇/上一篇文章,而不影响整个页面分页?比如AJAX?现在,我正在查询自定义帖子类型的帖子,以加载最新的2篇帖子,并需要在其所在位置加载下一篇或上一篇。有什么想法吗?编辑:我试过班特网的建议,但还是没能奏效。我在侧边栏中完全如图所示:<?php $args = array(\'posts_per_page\' => 1); $sidebar = new WP_Query($args); if ( $sidebar->have_posts()