我为阿凡达建立了一个自定义图像上传程序,我真的很喜欢media_handle_upload()
创建不同大小的图像。因为它们是化身,而不是帖子的数据,我不希望它们被放在默认的WordPress上传文件夹中。
是否可以继续使用media_handle_upload()
同时定义自定义上载文件夹?
我为阿凡达建立了一个自定义图像上传程序,我真的很喜欢media_handle_upload()
创建不同大小的图像。因为它们是化身,而不是帖子的数据,我不希望它们被放在默认的WordPress上传文件夹中。
是否可以继续使用media_handle_upload()
同时定义自定义上载文件夹?
如果我没弄错的话,那应该是可能的。您要使用media_handle_upload()
, 哪个呼叫wp_handle_upload()
处理文件上载。wp_handle_upload()
on本身不会有帮助,尤其是因为它几乎只是_wp_handle_upload()
. 还没有结束,因为里面_wp_handle_upload()
功能wp_upload_dir()
就是我们找到钩子的地方upload_dir
:
/**
* Filters the uploads directory data.
*
* @since 2.0.0
*
* @param array $uploads Array of upload directory data with keys of \'path\',
* \'url\', \'subdir, \'basedir\', and \'error\'.
*/
$uploads = apply_filters( \'upload_dir\', $cache[ $key ] );
Theupload_dir
过滤器可用于更改上载路径。为此,我们需要一个函数:function wpse_custom_upload_dir( $dir_data ) {
// $dir_data already you might want to use
$custom_dir = \'custom\';
return [
\'path\' => $dir_data[ \'basedir\' ] . \'/\' . $custom_dir,
\'url\' => $dir_data[ \'url\' ] . \'/\' . $custom_dir,
\'subdir\' => \'/\' . $custom_dir,
\'basedir\' => $dir_data[ \'error\' ],
\'error\' => $dir_data[ \'error\' ],
];
}
然后你可以这样使用它:// changing the directory
add_filter( \'upload_dir\', \'wpse_custom_upload_dir\' );
// uploading
$upload = media_handle_upload( \'some_upload\', $post_id );
// remove so it doesn\'t apply to all uploads
remove_filter( \'upload_dir\', \'wpse_custom_upload_dir\' );
所有这些或多或少都是示范性的,但我相信你明白其中的道理。有关更多详细信息,请查看我链接的文档页面,在那里您还可以浏览源代码。是否可以通过使用将“wp content/uploads”设置为使用不同的文件夹define( \'UPLOADS\', \'\'.\'files\' ); 我已经永久有效地更改了所有路径,如果是这样的话,我如何撤消它,使其指向“wp内容/上传”?我认为只要把define( \'UPLOADS\', \'\'.\'files\' ); 我会解决一个问题,我上传到WP的文件不想下载,因为URL不是文件的正确路径。