用WP API生成和下载文件

时间:2015-08-26 作者:Max

最近,我遇到了一个挑战,即实现允许用户编辑特定自定义帖子的功能,以便根据该帖子的元数据下载json文件。我终于完成了任务(至少在某种意义上是这样),但现在我最担心的是我的解决方案的安全性。

代码如下(这是一个插件,目录中有三个文件):

功能。php

// Main plugin file. This is where I output button for custom post type edit page 
/*...*/
    <button data-postid="<?php echo $post->ID; ?>" data-fileurl="<?php echo plugins_url(\'download_json.php\',__FILE__); ?>" class="button-secondary" id="mycp-download-json" >Download JSON</button>
/*...*/
脚本。js公司

jQuery(document).ready(function(){
    var $btn = jQuery(\'#mycp-download-json\');
    $btn.on(\'click\', function(e){
        e.preventDefault();
        window.location = jQuery(this).data(\'fileurl\') + \'?postid=\' + jQuery(this).data(\'postid\');
    });
});
下载\\u json。php

<?php
require(dirname(dirname(dirname(__DIR__))) . \'/wp-load.php\');
$postid = (int)($_GET[\'postid\']);
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename= file.json");
header("Content-Transfer-Encoding: binary");    
$fields  = get_post_meta($postid,\'\', true);
echo json_encode($fields,  JSON_HEX_APOS);
下面是我的问题:

这很简单current_user_can() 检查是否足以防止未经授权的下载(例如键入url)

1 个回复
最合适的回答,由SO网友:Milo 整理而成

以这种方式加载WordPress环境的插件会被存储库拒绝,因为它们在非标准配置中容易失败。

对于这样的事情,我会使用admin-post-$action 接收请求。WordPress API将可用,您可以检查用户是否有权执行特定操作。

相关推荐

$wp_FILESYSTEM返回空。依赖关系是什么?

我需要获取对$wp\\u filesystem对象的引用。在下面的测试中,var\\u dump($wp\\u filesystem)返回NULL。要正确设置$wp\\U文件系统,还需要哪些其他文件?我一直在期待,因为它在文件中调用。php,加载该文件就足以加载该对象。<?php require(\'../../../wp-blog-header.php\'); require(\'../../../wp-admin/includes/file.php\'); $m