সংযুক্তি ফাইলের নাম পরিবর্তন করুন


11

এমন কোনও ফাংশন আছে যা আমাকে সংযুক্তি আইডি এর উপর ভিত্তি করে একটি সংযুক্তির ফাইলের নাম পরিবর্তন করতে দেয়?

ধন্যবাদ! ডেনিস

উত্তর:


22

এটি আপনাকে কোনও সংযুক্তিটির আপলোড হওয়ার সাথে সাথেই নামটির অনুমতি দেবে:

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
খুব স্পষ্টভাবে ব্যাখ্যা করা হয়েছে :)
বুটা 5

আহ, আমি এই নামটি
পেয়েছি

এখানে একটি টাইপো আছে। ফাংশন বলা উচিত rename_attachment
অবিশাই

আমি মনে করি স্পষ্টতার জন্য আপনি যদি $ post_ID নামটিকে $ সংযুক্তি_আইডি বা অনুরূপ কিছু নাম দেন তবে এটি প্যারেন্ট পোস্ট আইডির সাথে বিভ্রান্ত হতে পারে, যদিও এটি সংযুক্তি আইডি বোঝানো হয়েছে। ভাল আনসার :)
আরমান্ডো

দয়া করে লক্ষ্য করুন এটি সংযুক্তি নির্দেশিকা পরিবর্তন করে না, উদাহরণস্বরূপ চিত্রের উত্স পাওয়ার জন্য নির্দেশিকায় নির্ভর কোডটি কাজ করবে না। যদিও সাধারণত বলতে গেলে আপনার কোনও পোস্টের নির্দেশিকা পরিবর্তন করা উচিত নয়, এই পরিস্থিতিতে গাইডলাইনটি আপডেট করার পক্ষেও বুদ্ধিমান হতে পারে।
আরমান্ডো

4

ব্যবহারের ক্ষেত্রে

ফাংশন জন্য কাজ করে

  • ফাইল যুক্ত করা হচ্ছে
  • ফাইলগুলি আপডেট করা হচ্ছে (হ্যাঁ, ইতিমধ্যে উপস্থিত ফাইলগুলির জন্যও)
  • একাধিক ফাইল

কোন ব্যবহারের মামলা

এটি স্বয়ংক্রিয় সংরক্ষণের কাজের জন্য, ওয়ার্ডপ্রেস দ্বারা স্বয়ংক্রিয়ভাবে সঞ্চালিত বা যদি লক্ষ্যযুক্ত ফাইলের ধরণ বা মাইম প্রকারগুলি পূরণ না করা হয় তবে তা বাতিল করে।

গুডিজ

আপনি foreachলুপের আগে ফাংশনের অভ্যন্তরে যে ফাইলের নাম, ফাইলের ধরন এবং মাইম টাইপগুলি পরিবর্তন করতে চান তা সেট করতে পারেন । ফাইলটি পোস্ট আইডি পায় এবং তার পরে সংযুক্তি আইডি সংযুক্ত করা হয়, যাতে আপনি নিরাপদে আপলোড এবং একসাথে একাধিক ফাইল পরিবর্তন করতে পারেন। এটি (প্রথম) পোস্ট আইডি এবং (দ্বিতীয়) সংযুক্তি আইডি দ্বারা ফাইলগুলি অর্ডার করার বিষয়েও যত্নশীল।

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

ফাংশনটি আপনার ফাংশন.এফপি ফাইল বা একটি আরও ছোট প্লাগইন হিসাবে (আরও ভাল) যুক্ত করা উচিত। কেবল উপরে একটি প্লাগইন মন্তব্য যুক্ত করুন, এটি প্লাগইন ফোল্ডারে আপলোড করুন এবং সক্রিয় করুন।


বিস্তারিত উত্তরের জন্য আপনাকে ধন্যবাদ, আমি কোডটি চালিয়েছিলাম এবং এটি কার্যকর হয়েছিল বলে মনে হয়েছিল, তবে আমি নিশ্চিত নই যে এটির কোনও পরিবর্তন হয়েছে কিনা i'm এটি সংযুক্তি অবজেক্টের পোস্ট_নাম বা গাইড পরিবর্তন করা উচিত?
রবার্ট সিনক্লেয়ার

3

আমি পিএইচপি এর renameএবং প্রদত্ত ফাইলের পথ ব্যবহার করব get_attached_file

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

লক্ষ্য করুন যে এটি পরীক্ষা করা হয়নি এবং ফাইলগুলির সাথে কাজ করার সময় আপনার চূড়ান্ত সতর্কতা অবলম্বন করা উচিত। এটির কাজ করার জন্য সম্ভবত এটির পরিবর্তন দরকার তবে এটি একটি ভাল সূচনা পয়েন্ট হতে পারে। আশাকরি এটা সাহায্য করবে.

এটির সাহায্য করে কিনা তা আমাকে জানান এবং আমি কোডটি আসল ওয়ার্কিং কোডে পরিবর্তন করব।


1
এটি ফাইলের সাথে ওয়ার্ডপ্রেসের লিঙ্কটি ভঙ্গ করে, যেহেতু ওয়ার্ডপ্রেস বুঝতে পারবে না যে কোনও নামকরণ হয়েছে।
আনিকা ব্যাকস্ট্রোম

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

}

রেফারেন্স http://codex.wordpress.org/Function_Reference/update_attached_file http://wordpress.org/tags/add_attachment

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.