问题描述
我想在上传期间重命名文件,并将其名称设置为文件所附加的帖子,再加上一些随机字符 (一个简单的增量计数器将会正常),使文件名不同。
换句话说,如果我正在上传/附加图片到页面插件是”test-page-slug” 的帖子,我想要将图像重命名为 test-page-slug-[C].[extension]
:
-
test-page-slug-1.JPG
-
test-page-slug-2.JPG
-
等等,原来的文件名是不重要的。
有这个插件,Custom Upload Dir:
With this plugin you can construct paths from additional variables like: post title, ID, category, post author, post date and much more.
怎样才能做到文件名呢?
最佳解决方案
你想挂钩到 wp_handle_upload_prefilter 过滤器 (我找不到任何文档,但是看起来很简单) 。我在本地尝试过,似乎对我有用:
function wpsx_5505_modify_uploaded_file_names($arr) {
// Get the parent post ID, if there is one
if( isset($_REQUEST['post_id']) ) {
$post_id = $_REQUEST['post_id'];
} else {
$post_id = false;
}
// Only do this if we got the post ID--otherwise they're probably in
// the media section rather than uploading an image from a post.
if($post_id && is_numeric($post_id)) {
// Get the post slug
$post_obj = get_post($post_id);
$post_slug = $post_obj->post_name;
// If we found a slug
if($post_slug) {
$random_number = rand(10000,99999);
$arr['name'] = $post_slug . '-' . $random_number . '.jpg';
}
}
return $arr;
}
add_filter('wp_handle_upload_prefilter', 'wpsx_5505_modify_uploaded_file_names', 1, 1);
在我的测试中,看起来好像帖子只有一个 s lug if if if 。。。。。。。。。。。。。。。。。。。。。。。。。。。。你也想考虑检查文件类型,我没有在这里做 – 我只是假设它是一个 jpg 。
编辑
根据评论的要求,此附加功能会更改上传图像的某些元属性。似乎没有让您设置 ALT 文本,由于某些原因,您设置为”caption” 的值实际上被分配为描述。你必须和猴子一起玩。我在功能 wp_read_image_metadata() 中找到了这个过滤器,它位于 wp-admin /includes /image.php 中。这是媒体上传,wp_generate_attachment_metadata 功能依赖于从图像中提取元数据。如果你想要更多的洞察力,你可以看看那里。
function wpsx_5505_modify_uploaded_file_meta($meta, $file, $sourceImageType) {
// Get the parent post ID, if there is one
if( isset($_REQUEST['post_id']) ) {
$post_id = $_REQUEST['post_id'];
} else {
$post_id = false;
}
// Only do this if we got the post ID--otherwise they're probably in
// the media section rather than uploading an image from a post.
if($post_id && is_numeric($post_id)) {
// Get the post title
$post_title = get_the_title($post_id);
// If we found a title
if($post_title) {
$meta['title'] = $post_title;
$meta['caption'] = $post_title;
}
}
return $meta;
}
add_filter('wp_read_image_metadata', 'wpsx_5505_modify_uploaded_file_meta', 1, 3);
编辑 04/04/2012 从 REQUEST obj 中提取帖子 ID,而不是连续检查 GET 和 POST 。根据意见中的建议。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。