如果我没弄错你想a URL something like the following 其对浏览器的响应将是您生成的内容,即.CSV
文件,但没有从WordPress生成内容?
http://example.com/download/data.csv
我想你在找
\'template_redirect\'
钩你可以找到
\'template_redirect\'
在里面
/wp-includes/template-loader.php
这是所有WordPress开发人员都应该熟悉的文件;它短而甜,路由每一个非管理页面加载,所以一定要看看它。
只需在主题中添加以下内容functions.php
文件或在您include
在里面functions.php
:
add_action(\'template_redirect\',\'yoursite_template_redirect\');
function yoursite_template_redirect() {
if ($_SERVER[\'REQUEST_URI\']==\'/downloads/data.csv\') {
header("Content-type: application/x-msdownload",true,200);
header("Content-Disposition: attachment; filename=data.csv");
header("Pragma: no-cache");
header("Expires: 0");
echo \'data\';
exit();
}
}
注意测试
\'/downloads/data.csv\'
通过检查URL
$_SERVER[\'REQUEST_URI\']
. 另请注意添加的
,true,200
到您的
header()
在设置的位置调用
Content-type
; 这是因为WordPress将设置
404
“参考资料”;“未找到”状态代码,因为它无法识别URL。不过没问题,因为
true
说明
header()
更换
404
WordPress已设置并使用HTTP
200
“参考资料”;“好的”状态代码。
以下是FireFox中的外观(Note 屏幕截图没有/downloads/
虚拟目录,因为在截图和注释之后,添加一个\'/downloads/\'
虚拟目录):
mikeschinkel.com)
如果希望从前缀为的URL处理下载,请更新/wp-admin/
要向用户提供受登录保护的视觉指示,您也可以这样做;下面介绍一种方法。
这次我封装到一个类中,名为DownloadCSV
, 并创建一个用户;“能力”已调用\'download_csv\'
对于\'administrator\'
角色(了解角色和功能here)您可以从预定义的\'export\'
角色(如果愿意),如果愿意,只需搜索(&A);代替\'download_csv\'
具有\'export\'
并移除register_activation_hook()
电话和activate()
作用顺便说一下,对激活挂钩的需要是我将其移动到插件而不是保留在主题中的原因之八 文件*
我还添加了一个;下载CSV“菜单选项关闭;“工具”菜单使用add_submenu_page()
并将其链接到\'download_csv\'
能力。
最后我选择了\'plugins_loaded\'
钩子,因为这是我能用的最早的合适的钩子。你可以使用\'admin_init\'
但是这个钩子运行的时间要晚得多(第1130次钩子调用与第3次钩子调用),那么为什么让WordPress做更多的一次性工作呢(我使用Instrument Hooks plugin 找出要使用的挂钩。)
在钩子中,我检查以确保我的URL以/wp-admin/tools.php
通过检查$pagenow
变量,我验证current_user_can(\'download_csv\')
如果通过了,我会测试$_GET[\'download\']
查看是否包含data.csv
; 如果是,我们运行的代码实际上与以前相同。我还删除了,true,200
从呼叫到header()
在前面的示例中,因为WordPress知道这是一个好的URL,所以还没有设置404状态。下面是您的代码:
<?php
/*
Plugin Name: Download CSV
Author: Mike Schinkel
Author URI: http://mikeschinkel.com
*/
if (!class_exists(\'DownloadCSV\')) {
class DownloadCSV {
static function on_load() {
add_action(\'plugins_loaded\',array(__CLASS__,\'plugins_loaded\'));
add_action(\'admin_menu\',array(__CLASS__,\'admin_menu\'));
register_activation_hook(__FILE__,array(__CLASS__,\'activate\'));
}
static function activate() {
$role = get_role(\'administrator\');
$role->add_cap(\'download_csv\');
}
static function admin_menu() {
add_submenu_page(\'tools.php\', // Parent Menu
\'Download CSV\', // Page Title
\'Download CSV\', // Menu Option Label
\'download_csv\', // Capability
\'tools.php?download=data.csv\');// Option URL relative to /wp-admin/
}
static function plugins_loaded() {
global $pagenow;
if ($pagenow==\'tools.php\' &&
current_user_can(\'download_csv\') &&
isset($_GET[\'download\']) &&
$_GET[\'download\']==\'data.csv\') {
header("Content-type: application/x-msdownload");
header("Content-Disposition: attachment; filename=data.csv");
header("Pragma: no-cache");
header("Expires: 0");
echo \'data\';
exit();
}
}
}
DownloadCSV::on_load();
}
下面是激活插件的屏幕截图:
mikeschinkel.com)
最后,这里是触发下载的屏幕截图:
mikeschinkel.com)