Ubah nama file lampiran


11

Apakah ada fungsi yang memungkinkan saya untuk mengubah nama file lampiran, berdasarkan ID Lampiran yang saya miliki?

Terima kasih! Dennis

Jawaban:


22

Ini akan memungkinkan Anda untuk mengganti nama lampiran segera setelah diunggah:

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 );

}

1
dijelaskan dengan sangat tepat :)
booota

uhm, saya mendapatkan rename ini (): http wrapper tidak mendukung penggantian nama
Bakaburg

Ada salah ketik di sini. Fungsi harus dipanggil rename_attachment.
Avishai

Saya pikir untuk kejelasan lebih baik jika Anda memberi nama $ post_ID sebagai $ attach_ID atau yang serupa, karena itu dapat dikacaukan dengan ID posting induk, sementara itu dimaksudkan untuk menjadi lampiran ID. Good anwser :)
Armando

Harap perhatikan bahwa ini tidak mengubah panduan lampiran, jadi kode yang mengandalkan panduan untuk mendapatkan sumber gambar misalnya tidak akan berfungsi. Meskipun secara umum Anda tidak boleh mengubah posting pedoman, dalam situasi ini mungkin bijaksana untuk memperbarui panduan juga.
Armando

4

Gunakan Kasing

Fungsi ini berfungsi untuk

  • Menambahkan file
  • Memperbarui file (ya, juga untuk file yang sudah ada)
  • Banyak file

Kasus Tidak Digunakan

Ini dibatalkan untuk pekerjaan penyimpanan otomatis, dilakukan oleh wordpress secara otomatis atau jika jenis file yang ditargetkan atau tipe mime tidak terpenuhi.

Barang

Anda dapat mengatur nama file, tipe file & tipe pantomim yang ingin Anda ubah di dalam fungsi sebelum foreachloop. File mendapatkan ID pos dan kemudian ID lampiran ditambahkan, sehingga Anda dapat dengan aman mengunggah dan mengubah beberapa file sekaligus. Ini juga peduli tentang pemesanan file dengan ID posting (pertama) dan ID lampiran (kedua).

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' );

Fungsi harus ditambahkan ke file functions.php Anda atau (lebih baik) sebagai plugin kecil yang terpisah. Cukup tambahkan komentar plugin di atas, unggah ke folder plugins dan aktifkan.


terima kasih atas balasan terperinci, saya menjalankan kode dan sepertinya mengeksekusi, tapi saya tidak yakin apakah itu mengubah apa pun. Haruskah itu mengubah post_name atau panduan objek lampiran?
Robert Sinclair

3

Saya akan menggunakan PHP renamedan path ke file yang diberikan oleh get_attached_file.

function rename_file( $post_id, $newname ) {
    $file = get_attached_file( $post_id );
    rename($file,dirname($file).$newname)
}

CATATAN bahwa ini belum diuji dan Anda harus sangat berhati-hati saat bekerja dengan file whith. Mungkin perlu diubah agar bisa berfungsi tetapi mungkin merupakan titik awal yang baik. Semoga ini membantu.

Beri tahu saya jika ini membantu dan saya akan mengubah kode menjadi kode kerja yang sebenarnya.


1
Ini memecah tautan WordPress ke file, karena WordPress tidak akan mengerti bahwa penggantian nama telah terjadi.
Annika Backstrom

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.