我可能违反了一些常识规则。
is there a way to utilize wordpress\' bake in attachment file handling for
an upload form within a theme
template? yes, the front end -- i know.
我正在创建一个纪念网站,我希望人们能够为我们社区失去的一位亲爱的人留下文字照片上的“评论”。
但这些不是wordpress用户。他们是姑姑和孩子,以及介于两者之间的一切。
这些人将无法理解WP默认的媒体UI,我不希望他们不得不登录并四处走动。对他们来说太令人困惑了。如果这不是一个如此具体和微妙的项目,我就不会试图如此扭曲规则。
我知道我允许任何人上传文件是在打开安全漏洞,但我认为这有点必要。所有上载的附件都将处于“挂起”状态我将文本和照片都设置为自定义的帖子类型,而不是作为评论,以便我可以利用一些内置的帖子数据。
如果我能利用worpdress内置的文件检查、处理、命名、大小。。。等等,即使文件处理在前端。
我想也许我可以使用:wp_handle_upload()
通过包括\'../wp-admin/includes/file.php\'
但那没用。当我尝试包含它时,会出现致命错误。在模板中包含admin include是否完全违反了规则。。。可能
我可以自己处理所有的文件,但我想也许有一种方法可以利用wordpress的功能,而且可能更安全。
或者有没有关于我应该走的另一条路线的建议?
不幸的是,这对时间很敏感。。。几天后就要举行追悼会了。
非常感谢你
约拿
最合适的回答,由SO网友:Bainternet 整理而成
以下是我在接受前端上传时使用的函数,您可以在模板文件中使用它:
function insert_attachment($file_handler,$post_id,$setthumb=\'false\') {
// check to make sure its a successful upload
if ($_FILES[$file_handler][\'error\'] !== UPLOAD_ERR_OK) __return_false();
require_once(ABSPATH . "wp-admin" . \'/includes/image.php\');
require_once(ABSPATH . "wp-admin" . \'/includes/file.php\');
require_once(ABSPATH . "wp-admin" . \'/includes/media.php\');
$attach_id = media_handle_upload( $file_handler, $post_id );
if ($setthumb) update_post_meta($post_id,\'_thumbnail_id\',$attach_id);
return $attach_id;
}
Usage:
// set $post_id to the id of the post you want to attach
// these uploads to (or \'null\' to just handle the uploads
// without attaching to a post)
if ($_FILES) {
foreach ($_FILES as $file => $array) {
$newupload = insert_attachment($file,$post_id);
// $newupload returns the attachment id of the file that
// was just uploaded. Do whatever you want with that now.
}
}