Đổi tên tệp trong khi tải lên bằng các biến


7

Tôi muốn đổi tên các tệp trong khi tải lên và đặt tên của chúng thành bài đăng, các tệp đang được đính kèm, cộng với một số ký tự ngẫu nhiên (bộ đếm tăng đơn giản sẽ rất tốt) để làm cho tên tệp khác nhau.

Nói cách khác, nếu tôi đang tải lên / đính kèm hình ảnh vào bài đăng có sên trang là "sên trang thử nghiệm", tôi muốn các hình ảnh được đổi tên khi đang bay tới test-page-slug-[C].[extension]:

  • test-page-slug-1.jpg
  • test-page-slug-2.jpg
  • vv, nó không quan trọng tên tập tin ban đầu là gì.

Có plugin này, Chỉ dẫn tải lên tùy chỉnh :

Với plugin này, bạn có thể xây dựng các đường dẫn từ các biến bổ sung như: tiêu đề bài viết, ID, danh mục, tác giả bài đăng, ngày đăng bài và nhiều hơn nữa.

Làm thế nào tôi có thể làm tương tự với tên tập tin?


Tôi nên bao gồm tập lệnh này trong cài đặt WordPress của mình ở đâu? Tôi nên làm cho nó một plugin hoặc tôi thêm nó vào một tệp chức năng? Tôi muốn làm việc tự động hoặc biết cách kích hoạt nó để nó thực hiện tất cả các phép thuật tự động thay đổi tên cho tôi. Cảm ơn!

Câu trả lời:


9

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.


MathSmath, tôi không thể tin điều này hoàn toàn hiệu quả, cảm ơn bạn rất nhiều! Bạn có nghĩ rằng chúng ta có thể mở rộng thêm một chút nữa và làm cho nó gán tiêu đề và alt (cả hai giống nhau) cho các hình ảnh được tải lên dựa trên tên của bài đăng chúng tôi đính kèm không? :) Điều đó sẽ hoàn hảo. Cảm ơn bạn rất nhiều vì sự giúp đỡ của bạn!
pereyra

@pereyra Vui mừng vì nó đã làm việc! Tôi đã cập nhật câu trả lời của mình để bao gồm một chức năng khác để thay đổi một số dữ liệu meta hình ảnh. Tôi không thể lấy nó để đặt văn bản thay thế, nhưng nó đặt tiêu đề hình ảnh thành tiêu đề bài viết.
MathSmath

@pereyra Ngoài ra, vui lòng đặt một dấu kiểm bên cạnh câu trả lời để mọi người biết rằng nó đã được giải quyết. Đập tay!
MathSmath

Công việc này, cảm ơn bạn! Trên thực tế tôi đã thấy rằng miễn là trường tiêu đề được điền, WP sẽ sử dụng cùng một giá trị cho cả alt và title, trừ khi trường alt được cung cấp một giá trị khác nhau, vì vậy chỉ cần $ meta ['title'] = $ post_title; là hoàn hảo cho nhu cầu của tôi. Một lần nữa, cảm ơn bạn rất nhiều vì sự giúp đỡ của bạn.
pereyra

1
thay vì số ngẫu nhiên, làm thế nào để bạn tăng số này?
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.