通过管理中的媒体页面上传时,使用wp_插入_附件()会导致GUID的文件名与同一文件不同

时间:2013-11-18 作者:AdamJones

我正在尝试制作一个插件,作为其任务的一部分,将csv文件上传到wordpress安装。决定尽可能使用wordpress函数进行紧密集成,我正在将上载的文件保存到正确的当前wordpress文件夹中(在wp\\u upload\\u dir()函数的帮助下)。

然后,我将上传作为附件添加到posts表中,以便用户可以通过媒体页面进行管理。这是通过内置函数wp\\u insert\\u attachment()完成的。这就是事情似乎出错的地方。

基本上,我解析到函数的文件名中有空格,但当我查看posts表中的GUID值时,空格已被去掉。如果我通过wordpress媒体页面界面添加相同的文件,空格将替换为连字符。我理解为什么wordpress在不能很好地处理空格的旧浏览器中添加连字符以使文件url更安全,但是为什么在解析到wp\\U insert\\U附件时会删除空格?

以便确认;通过wordpress界面上载“Work Spreadsheet.csv”会导致预期的GUID为

http://domain.com/wordpress/wp-content/uploads/2013/11/Work-Spreadsheet.csv

但是通过我的插件代码

http://domain.com/wordpress/wp-content/uploads/2013/11/WorkSpreadsheet.csv

此外,在wp\\U Posteta表中,当通过wordpress界面上载时,meta\\u键“\\u wp\\u attached\\u file”的值添加了连字符,并且相对文件夹路径为:2013/11/Work Spreadsheet。csv

其中,对于通过我的代码进行的上载,其没有文件夹路径和文件名,不会从我的原始工作电子表格中修改。csv

有人能帮忙解释为什么会发生这种情况吗?下面是我使用wp\\u insert\\u attachment()之前的代码作为参考。。只是说;我尝试过其他文件类型,如图像,以防与上载文本文件有关,但结果是一样的。

$attachment = array(
\'guid\' => $upload_dir_array[\'url\'] . \'/\' . basename( $destination_name ), 
\'post_mime_type\' => $wp_filetype[\'type\'],
\'post_title\' => preg_replace(\'/\\.[^.]+$/\', \'\', basename($destination_name)),
\'post_status\' => \'inherit\'
);
$attach_id = wp_insert_attachment( $attachment, $destination_name );
// for the function wp_generate_attachment_metadata() to work
require_once(ABSPATH . "wp-admin" . \'/includes/image.php\');
$attach_data = wp_generate_attachment_metadata($attach_id,$upload_dir.$destination_name );
wp_update_attachment_metadata( $attach_id, $attach_data );

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

所以我想出来了。

函数wp\\u insert\\u attachment()清理解析到它的文件名。在这个过程中,它删除了文件名中的空格。为了避免这种情况,我在解析文件名之前进行了自己的清理(仍然使用WP函数)。

我使用sanitize\\u file\\u name()重命名了我的文件,并在名称中的所有空格中添加了连字符(我真正想要的)。然后,在代码的后面部分,当我将详细信息解析为wp\\u insert\\u attachment()时,不会对文件名进行任何更改,文件名将保留连字符。

结束