첨부 파일 이름 변경


11

첨부 파일 ID에 따라 첨부 파일의 파일 이름을 변경할 수있는 기능이 있습니까?

감사! 데니스

답변:


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
매우 정확하게 설명 :)
booota

음,이 이름 바꾸기 ()를 얻을 : HTTP 래퍼 이름 바꾸기를 지원하지 않습니다
Bakaburg

오타가 있습니다. 함수를 호출해야합니다 rename_attachment.
Avishai

$ post_ID를 $ attach_ID 또는 이와 유사한 이름으로 지정하면 부모 게시물 ID와 혼동 될 수 있지만 첨부 파일 ID로 사용되기 때문에 명확성을 높이는 것이 좋습니다. 좋은 답변 :)
Armando

이는 첨부 파일 guid를 변경하지 않으므로 이미지 소스를 가져 오기 위해 guid에 의존하는 코드는 작동하지 않습니다. 일반적으로 포스트 안내를 변경해서는 안되지만이 상황에서는 안내를 업데이트하는 것이 현명 할 수 있습니다.
Armando

4

사용 사례

이 기능은

  • 파일 추가
  • 파일 업데이트 (예, 이미 존재하는 파일의 경우)
  • 여러 파일

미사용 사례

자동으로 워드 프레스 또는 대상 파일 형식 또는 MIME 형식이 충족되지 않으면 자동 저장 작업이 중단됩니다.

케이크

foreach루프 전에 함수 내에서 변경하려는 파일 이름, 파일 형식 및 MIME 형식을 설정할 수 있습니다 . 파일은 게시물 ID를 가져온 다음 첨부 파일 ID가 추가되므로 한 번에 여러 파일을 안전하게 업로드하고 변경할 수 있습니다. 또한 (첫 번째) 포스트 ID와 (두 번째) 첨부 파일 ID로 파일을 정렬하는 데 관심이 있습니다.

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

함수는 functions.php 파일에 추가하거나 별도의 작은 플러그인으로 추가해야합니다. 상단에 플러그인 주석을 추가하고 플러그인 폴더에 업로드 한 후 활성화하십시오.


자세한 답장을 보내 주셔서 감사합니다. 코드를 실행하고 실행되는 것 같지만 변경 사항이 있는지 확실하지 않습니다. 부착물 객체의 post_name 또는 guid를 변경해야합니까?
Robert Sinclair

3

PHP rename와에서 제공된 파일의 경로를 사용합니다 get_attached_file.

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

이것은 테스트되지 않았으므로 파일을 작업 할 때 매우주의해야합니다. 작동하려면 변경해야 할 수도 있지만 좋은 출발점이 될 수 있습니다. 도움이 되었기를 바랍니다.

도움이되는지 알려 주시면 코드를 실제 작업 코드로 변경하겠습니다.


1
WordPress에서 이름 바꾸기가 발생했음을 이해하지 못하므로 파일에 대한 WordPress의 링크가 끊어집니다.
Annika Backstrom

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.