How to modify admin headers

时间:2013-12-15 作者:bcorkins

我正在尝试创建一个主题设置导出脚本,该脚本base\\u 64对主题选项进行编码,并允许用户将其下载为文本文件。

我看到一个帖子(What is the best way to export and import theme options?) 这涉及检查查询变量,然后使用“template\\u redirect”操作重定向用户。然而,看起来这个操作只在站点的前端可用(不在管理中)。将操作添加到选项框架的构造函数中并没有任何作用。

我可以通过将我的函数绑定到“admin\\u init”来启动它,但到那时,标题已经被发送了(我无法指定内容描述)。我收到一堆“无法修改标题信息”警告,我的导出字符串被转储到浏览器中,而不是被下载。

是否有一种方法可以在WordPress admin中添加重定向,类似于“template\\u redirect”,允许我在打印默认标题之前修改标题信息?

1 个回复
SO网友:webaware

这不是一个直接的答案,但是:对于管理端的简单数据导出,我通常只使用AJAX API. 为导出设置AJAX处理程序:

/**
* export from admin
*/
function wpse_126508_export() {
    header(\'Content-Type: text/xml; charset=utf-8\');
    header(\'Content-Description: File Transfer\');
    header(\'Content-Disposition: attachment; filename=wpse_126508_export.xml\');

    $xml = new XMLWriter();
    $xml->openURI(\'php://output\');

    $xml->startDocument(\'1.0\', \'UTF-8\');
    $xml->startElement(\'wpse_126508_export\');

    // ... your details

    $xml->endElement();     // wpse_126508_export

    $xml->flush();

    exit();
}

add_action(\'wp_ajax_wpse_126508_export\', \'wpse_126508_export\');
add_action(\'wp_ajax_nopriv_wpse_126508_export\', \'wpse_126508_export\');
然后在管理页面上输出指向它的链接:

$exportURL = add_query_arg(array(
    \'action\' => \'wpse_126508_export\',
    \'nc\' => time(),     // cache buster
), admin_url(\'admin-ajax.php\'));
printf(\'<a href="%s">export</a>\', $exportURL);
当然,如果需要发布请求,也可以向AJAX端点提交表单。

结束