前端文件上传返回错误的附件URL

时间:2014-01-10 作者:Levi Cole

所以我用wordpress制作了一个简单的文件上传程序,用户无需进入wp admin添加文件。

我有它的工作很好,它上传到正确的文件夹文件。。等等,但我遇到的唯一问题是它返回了错误的文件url。

例如,上载文件时\'/wp-content/uploads/2014/01/file.png\' 但它返回的附件URL为\'/uploads/file.png\'

我的代码:

define(\'WP_USE_THEMES\', false);
require_once($_SERVER[\'DOCUMENT_ROOT\']. \'/wp-load.php\');
include_once($_SERVER[\'DOCUMENT_ROOT\']. \'/wp-admin/includes/media.php\');
include_once($_SERVER[\'DOCUMENT_ROOT\']. \'/wp-admin/includes/file.php\');
include_once($_SERVER[\'DOCUMENT_ROOT\']. \'/wp-admin/includes/image.php\');

if(!$_FILES) exit;
if (!defined("PHP_EOL")) define("PHP_EOL", "\\r\\n");

//define variables
if(isset($_FILES[\'fileUpload\'])) {$files = $_FILES[\'fileUpload\'];}
$upload_dir = wp_upload_dir();

$file_name = $files[\'name\'];
$file_vars = array(\'test_form\' => FALSE); //Allows form submission
$file_post = wp_handle_upload($files, $file_vars); //Posts File
$file_link = $file_post[\'url\']; //Full URL
$file_type = wp_check_filetype(basename($file_link), null); //File Extension

$post_name = preg_replace(\'/\\.[^.]+$/\', \'\', basename($file_link)); //Post Name

$attachment = array(
    \'guid\' => $file_link, 
    \'post_mime_type\' => $file_type[\'type\'],
    \'post_title\' => $post_name,
    \'post_content\' => \'\',
    \'post_status\' => \'inherit\'
);
$attach_id = wp_insert_attachment($attachment, $file_name);
//Generates meta
$attach_data = wp_generate_attachment_metadata($attach_id, $file_name);
//Updates meta
$attach_final = wp_update_attachment_metadata($attach_id, $attach_data);
知道我做错了什么吗?

2 个回复
SO网友:Istiaque Ahmed

对于wp_insert_attachmentwp_generate_attachment_metadata, 改变$file_name 按以下方式。

$file_name = $upload_dir[\'path\'] . \'/\' . basename($file_name);
两种功能的Wordpress codex(herehere ) 表示-\'使用绝对路径,而不是文件的URI。文件必须位于上载目录\'$_FILES[\'fileUpload\'] 只给出文件名,而不是绝对路径。

SO网友:terraling

不久前我做了类似的事情,没有逐行重新整理所有内容来记住我到底做了什么,我发现我的代码与你的代码有一点不同:

$file_link = $file_post[\'url\'];
而我有这样的想法:

$file_link = $file_post[\'file\'];
看看这是否有区别。。。

结束