我想你是指Content-Disposition
标题。
我最近为一位客户做了一件非常类似的事情。我选择的武器:自定义重写规则。
首先,添加重写:
<?php
add_action( \'init\', \'wpse27232_add_rewrite\' );
/**
* Adds the rewrite rule for the download.
*
* @uses add_rewrite_rule
*/
function wpse27232_add_rewrite()
{
add_rewrite_rule(
\'^download/?$\',
\'index.php?file_download=true\',
\'top\'
);
}
当有人来访时
yoursite.com/download
他们会抓住这次重写。请注意
index.php?file_download=true
一点WordPress不知道
file_download
应为可识别的查询变量。让我们通过过滤来识别
query_vars
.
<?php
add_filter( \'query_vars\', \'wpse27232_query_vars\' );
/**
* Filter our query vars so WordPress recognizes \'file_download\'
*/
function wpse27232_query_vars( $vars )
{
$vars[] = \'file_download\';
return $vars;
}
现在有趣的部分是:抓住
file_download
查询变量并发送文件。
<?php
add_action( \'template_redirect\', \'wpse27232_catch_file_dl\' );
/**
* Catches when the file_download query variable is present. Sends the content
* header, the file, and then exits.
*/
function wpse27232_catch_file_dl()
{
// No query var? bail.
if( ! get_query_var( \'file_download\' ) ) return;
// change this, obviously. Should be a path to the pdf file
// I wrote this as a plugin, hence `plugin_dir_path`
$f = plugin_dir_path( __FILE__ ) . \'your-file.pdf\';
if( file_exists( $f ) && is_user_logged_in() )
{
// Do your additional checks and setup here
// Send the headers
header(\'Content-Type: application/pdf\');
header(\'Content-Disposition: attachment; filename=\' . basename( $f ) );
header( \'Content-Length: \' . filesize($f));
// You may want to make sure the content buffer is clear here
// read the pdf output
readfile($f);
exit();
}
else
{
global $wp_query;
$wp_query->is_404 = true;
}
}
终于得到了这一点
plugin 要工作,请使用激活挂钩刷新重写规则。
<?php
register_activation_hook( __FILE__, \'wpse27232_activation\' );
function wpse27232_activation()
{
wpse27232_add_rewrite();
flush_rewrite_rules();
}