上载过程中重命名附件,无论文件类型如何

时间:2013-03-05 作者:pereyra

下面是我为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?

事先非常感谢您的帮助。

1 个回复
SO网友:kaiser

只需根据您为您的文件获取的数据来决定这一点(我使用$file 而不是$arr 作为论据,因为以后更容易理解)。

if ( \'image\' == array_shift( explode( \'/\', $file[\'type\'] ) ) )
    // do wonderful things
您可以随时查看在过滤器中添加以下行所得到的结果:

exit( printf( \'<pre>%s</pre>\', var_export( $file, true ) ) );
这将exit 在上传过程中,请停止该过程,以便您可以检查输出并查看您从上传中获得的数据。只需对不同的文件类型执行此操作,并根据它修改代码即可。

结束

相关推荐

how to edit attachments?

在将例如文件附加到帖子时,如何在事后编辑/删除它们?在帖子编辑器中找不到任何内容。谢谢