上传时重命名文件?

时间:2014-12-12 07:23:09

标签: wordpress attachment

我的Wordpress中有以下代码。我需要为每个上传的图像添加一个计数数字,如image_1,image_2,image_3等等。

这样做的目的是每个上传的图片都附在帖子上,获取帖子ID名称,并计算最终的数字。

如果有人帮我解决这个问题会很棒。谢谢!

<?php

add_filter('wp_handle_upload_prefilter', 'wpse_25894_handle_upload_prefilter');
add_filter('wp_handle_upload', 'wpse_25894_handle_upload');

function wpse_25894_handle_upload_prefilter( $file )
{
add_filter('upload_dir', 'wpse_25894_custom_upload_dir');
return $file;
}

function wpse_25894_handle_upload( $fileinfo )
{
remove_filter('upload_dir', 'wpse_25894_custom_upload_dir');
return $fileinfo;
}

function wpse_25894_custom_upload_dir($path)
{   
/*
 * Determines if uploading from inside a post/page/cpt - if not, default Upload folder is used
 */
$use_default_dir = ( isset($_REQUEST['post_id'] ) && $_REQUEST['post_id'] == 0 ) ?   true : false; 
if( !empty( $path['error'] ) || $use_default_dir )
    return $path; //error or uploading not from a post/page/cpt 

/*
 * Save uploads in ID based folders 
 *
 */

 $customdir = '/' . $_REQUEST['post_id'];


$path['path']    = str_replace($path['subdir'], '', $path['path']); //remove default subdir (year/month)
$path['url']     = str_replace($path['subdir'], '', $path['url']);      
$path['subdir']  = $customdir;
$path['path']   .= $customdir; 
$path['url']    .= $customdir;  

return $path;
}
// The filter runs when resizing an image to make a thumbnail or intermediate size.
add_filter( 'image_make_intermediate_size', 'wpse_123240_rename_intermediates' );

function wpse_123240_rename_intermediates( $image ) {

// Split the $image path into directory/extension/name
$info = pathinfo($image);
$dir = $info['dirname'] . '/';
$ext = '.' . $info['extension'];
$name = wp_basename( $image, "$ext" );

// Get image information 
// Image edtor is used for this
$img = wp_get_image_editor( $image );

// Build our new image name
$postid = $_REQUEST['post_id'];
$random = rand(1,5);

$new_name = $dir . $postid . '_' . $random . $ext;

// Rename the intermediate size
$did_it = rename( $image, $new_name );

// Renaming successful, return new name
if( $did_it )
return $new_name;
return $image;
}
?>

现在,此代码生成名为postid_randomnumber.jpg

的图像

我只需要添加最多20张图片,所以如果我可以使用1-20的数字,那么我的目的也可以。

- 更新 -

我把最后一部分代码搞砸了,它可能不是最干净的解决方案,但它确实有效:

function wpse_123240_rename_intermediates( $image ) 

{
// Split the $image path into directory/extension/name
$info = pathinfo($image);
$dir = $info['dirname'] . '/';
$ext = '.' . $info['extension'];
$name = wp_basename( $image, "$ext" );

// Get image information 
// Image edtor is used for this
$img = wp_get_image_editor( $image );

//$count = get_option( 'wpa59168_counter', 1 );

// Build our new image name
$postid = $_REQUEST['post_id'];
$increment = 1;

$new_name = $dir . $postid . '_1' . $ext;

while(is_file($new_name)) {
 $increment++;
 $new_name = $dir . $postid . '_' . $increment . $ext;
}

// Rename the intermediate size
$did_it = rename( $image, $new_name );

// Renaming successful, return new name
if( $did_it )
    return $new_name;

return $image;

}

0 个答案:

没有答案