Câu trả lời:
Điều này sẽ cho phép bạn đổi tên tệp đính kèm ngay khi được tải lên:
add_action('add_attachment', 'rename_attachment');
function rename_attachment($post_ID){
$file = get_attached_file($post_ID);
$path = pathinfo($file);
//dirname = File Path
//basename = Filename.Extension
//extension = Extension
//filename = Filename
$newfilename = "NEW FILE NAME HERE";
$newfile = $path['dirname']."/".$newfilename.".".$path['extension'];
rename($file, $newfile);
update_attached_file( $post_ID, $newfile );
}
rename_attachment
.
Hàm làm việc cho
Bạn có thể đặt tên tệp, loại tệp & loại mime mà bạn muốn thay đổi bên trong hàm trước foreach
vòng lặp. Tệp nhận được ID bài đăng và sau đó ID đính kèm được thêm vào, do đó bạn có thể tải lên và thay đổi nhiều tệp một cách an toàn cùng một lúc. Điều này cũng quan tâm đến việc sắp xếp các tập tin bằng (đầu tiên) ID bài đăng và (tập tin đính kèm) thứ hai.
function wpse30313_update_attachment_names($post_ID)
{
// Abort if WP does an autosave
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE )
return;
# >>>> SET
// New file name:
$new_file_name = "___";
// Best would be to take the post name as file name instead of a custom title:
# $post_data = get_post( $post_ID );
# $new_file_name = $post_data->post_name;
// The file types we want be changed:
$allowed_types = array(
'image'
);
// The mime types we want to be changed:
$allowed_ext = array(
'jpg'
,'jpeg'
,'gif'
,'png'
);
# <<<< SET
// Appended by post ID for collision safety
$new_file_name = "{$new_file_name}-{$post_ID}";
// get all attached files
$attachments = get_children( array(
'post_type' => 'attachment'
,'post_parent' => $post_ID
) );
// Bulk updating attached file names
foreach ( $attachments as $att )
{
$att_ID = $att->ID;
// Append attachment ID (collision safety)
// Also allows sorting files by post & then attchment ID
$new_name = "{$new_file_name}-{$att_ID}";
$mime_type = explode( "/", get_post_mime_type( $att->ID ) );
$file_type = $mime_type[0];
$mime_type = $mime_type[1];
// Skip file types we don't want to change
if ( ! in_array( $file_type, $allowed_types ) )
continue;
// Skip mime types we don't want to change
if ( ! in_array( $mime_type, $allowed_ext ) )
continue;
// Get current file info
$file_path = get_attached_file( $att->ID );
$path = pathinfo( $file_path );
$dir = trailingslashit( $path['dirname'] );
$ext = $path['extension'];
// Build final name
$final = "{$dir}{$new_name}.{$ext}";
// Skip if the path was already changed on upload
// If we don't set this, the function wouldn't work for older files
if ( $file_path == $final )
continue;
// Update attachment-post meta info for file
rename( $file_path, $final );
update_attached_file( $att_ID, $final );
}
return;
}
add_action( 'add_attachment', 'wpse30313_update_attachment_names' );
add_action( 'edit_attachment', 'wpse30313_update_attachment_names' );
Hàm nên được thêm vào tệp tin.php của bạn hoặc (tốt hơn) dưới dạng một plugin nhỏ riêng biệt. Chỉ cần thêm một nhận xét plugin trên đầu trang, tải nó lên thư mục plugin và kích hoạt.
Tôi sẽ sử dụng PHP rename
và đường dẫn đến tệp được cung cấp bởi get_attached_file
.
function rename_file( $post_id, $newname ) {
$file = get_attached_file( $post_id );
rename($file,dirname($file).$newname)
}
LƯU Ý rằng điều này đã không được kiểm tra và bạn nên hết sức thận trọng khi làm việc với các tập tin. Nó có thể cần thay đổi để nó hoạt động nhưng có thể là một điểm khởi đầu tốt. Hi vọng điêu nay co ich.
Hãy cho tôi biết nếu nó giúp và tôi sẽ thay đổi mã thành mã làm việc thực tế.
add_action('add_attachment', 'rename');
function rename($post_ID){
$post = get_post($post_ID);
$file = get_attached_file($post_ID);
$path = pathinfo($file);
$newfilename = "mynewfilename";
$newfile = $path['dirname']."/".$newfilename.".".$path['extension'];
rename($file, $newfile);
update_attached_file( $post_ID, $newfile );
}
Tham khảo http://codex.wordpress.org/Function_Reference/update_attached_file http://wordpress.org/tags/add_attachment