下面是我为WP使用的函数,用于在动态上载期间重命名图像,并将图像的文件名设置为与post slug匹配。
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);
我正在尝试修改此功能,使其不再局限于图像(例如,在这种特殊情况下,我希望WP在上载过程中重命名图像和mp3),并且无法使其工作。
此功能的另一个问题是,只有在上传附件之前发布了帖子,才能成功重命名附件。WP自动保存帖子几乎在填写帖子标题字段后立即创建帖子,那么为什么发布帖子是一个必要的步骤呢?是否有办法修改此函数,使其仅可用于autosave?
事先非常感谢您的帮助。
SO网友:kaiser
只需根据您为您的文件获取的数据来决定这一点(我使用$file
而不是$arr
作为论据,因为以后更容易理解)。
if ( \'image\' == array_shift( explode( \'/\', $file[\'type\'] ) ) )
// do wonderful things
您可以随时查看在过滤器中添加以下行所得到的结果:
exit( printf( \'<pre>%s</pre>\', var_export( $file, true ) ) );
这将
exit
在上传过程中,请停止该过程,以便您可以检查输出并查看您从上传中获得的数据。只需对不同的文件类型执行此操作,并根据它修改代码即可。