我需要创建一个文件,然后将其作为一个WordPress插件中的html非直接下载链接。由于我还没有找到一个明确的解决方案,我发布了我所做的。也许它可以保存别人的时间。
在我的插件中,我创建了一个“脏的”自定义端点来服务于任何来自受限文件夹(在非公共位置)的现有文件。
define( 'RESTRICTED_DOWNLOAD_DIR', '/restricted-dir/' );
add_action( 'parse_request', 'parse_request_endpoint' );
function parse_request_endpoint($wp) {
//endpoint url
$endpoint="download";
if ( $endpoint == $wp->request ) {
@$filename=RESTRICTED_DOWNLOAD_DIR.$_GET["fn"];
if(is_file($filename)){
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . basename($filename) . '"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($filename));
readfile($filename);
unlink($filename);//If served just once
exit;
}
}
}
shortcode函数或任何地方的html输出:
function my_file_link(){
$filename="myfile.ext";
create_my_file(RESTRICTED_DOWNLOAD_DIR.$filename);//Logic for file creation
$html="<a href=\"/download?fn=$filename\">Download my file</a>";
return $html;
}
这样,如果文件被找到得到下载,但如果网址是调用没有正确的参数WordPress将显示一个404页面。该解决方案可以得到改善,在下载端点添加一个阻止逻辑。
对我来说,这是一个可行的解决方案,我希望它可以保存别人的研究时间。任何改进都是受欢迎的。
1条答案
按热度按时间yr9zkbsy1#
**答案:**非常简单,在锚标记中添加
download
属性!例如
<a link="/pdfs/file.pdf" download>Download PDF File </a>
希望这对你有帮助!!