Bạn sẽ muốn kết nối với bộ lọc wp_handle_upload_prefilter (mà tôi không thể tìm thấy bất kỳ tài liệu nào trên, nhưng có vẻ khá đơn giản). Tôi đã thử điều này tại địa phương và nó dường như hoạt động với tôi:
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);
Trong thử nghiệm của tôi, có vẻ như các bài đăng chỉ có một con sên nếu bạn đã bật permalinks, vì vậy tôi đã thêm một kiểm tra để đảm bảo có một con sên trước khi đổi tên tệp. Bạn cũng sẽ muốn xem xét việc kiểm tra loại tệp mà tôi chưa thực hiện ở đây - Tôi chỉ cho rằng đó là jpg.
BIÊN TẬP
Theo yêu cầu trong bình luận, chức năng bổ sung này thay đổi một số thuộc tính meta cho hình ảnh được tải lên. Dường như không cho phép bạn đặt văn bản ALT và vì một số lý do, giá trị bạn đặt làm "chú thích" thực sự được gán làm mô tả. Bạn sẽ phải khỉ với nó. Tôi đã tìm thấy bộ lọc này trong hàm wp_read_image_metadata (), được đặt trong wp-admin / gồm / image.php. Đó là những gì các phương tiện tải lên và các hàm wp_generate_attachment_metadata dựa vào để lấy siêu dữ liệu từ hình ảnh. Bạn có thể nhìn vào đó nếu bạn muốn có cái nhìn sâu sắc hơn.
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);
Đã chỉnh sửa 04/04/2012 để lấy ID bài đăng từ obj YÊU CẦU thay vì kiểm tra GET và POST liên tiếp. Dựa trên những gợi ý trong các ý kiến.