2012-12-06 4 views
3

업로드 파일 이름의 이름을 게시물 제목과 일치 시키려하고 있습니다.
Rename files during upload within Wordpress backendWordpress 내에서 업로드 중에 파일 이름 바꾸기

이 코드를 사용 :

function make_filename_hash($filename) { 
    $info = pathinfo($filename); 
    $ext = empty($info['extension']) ? '' : '.' . $info['extension']; 
    $name = basename($filename, $ext); 
    return md5($name) . $ext; 
} 
add_filter('sanitize_file_name', 'make_filename_hash', 10); 

사람이 포스트 Title.extension 일치하는 파일의 이름을 변경하는 코드를 알고 있습니까

이 다른 스레드에서는 해시 이름을 보여줍니다?

답변

4

barakadam 님의 답변은 거의 정확합니다. 답변을 아래에 남겨 두었던 의견을 기반으로 작성되었습니다. 코드의

function new_filename($filename, $filename_raw) { 
    global $post; 
    $info = pathinfo($filename); 
    $ext = empty($info['extension']) ? '' : '.' . $info['extension']; 
    $new = $post->post_title . $ext; 
    // the if is to make sure the script goes into an indefinate loop 
    if($new != $filename_raw) { 
     $new = sanitize_file_name($new); 
    } 
    return $new; 
} 
add_filter('sanitize_file_name', 'new_filename', 10, 2); 

설명 :

는 "파리/런던 내 휴가"라는 게시물에 picture one.jpg라는 원래의 파일 이름으로 파일을 업로드 가정 할 수 있습니다.

파일을 업로드 할 때 WordPress는 sanitize_file_name() 기능을 사용하여 원래 파일 이름에서 특수 문자를 제거합니다.

오른쪽 하단에 필터가 있습니다.

// line 854 of wp-includes/formatting.php 
return apply_filters('sanitize_file_name', $filename, $filename_raw); 

이 시점에서 $ filename은 picture-one.jpg이됩니다. add_filter()을 사용했기 때문에 new_filename() 함수는 $ filename을 picture-one.jpg으로, $ filename_raw를 picture one.jpg으로 호출합니다.

그러면 new_filename() 함수는 파일 이름을 원래 확장자가 추가 된 게시물 제목으로 바꿉니다. 여기에서 끝내면 새 파일 이름 $new은 결국 우리 모두가 알고있는 유효하지 않은 파일 이름 인 My Holiday in Paris/London.jpg이됩니다.

sanitize_file_name 함수를 다시 호출 할 때입니다. 거기에 조건문을 기록하십시오. 이 시점에서 $new != $filename_raw부터 파일 이름을 다시 살균합니다.

sanitize_file_name()

가 호출되고 함수의 끝에서, $filenameMy-Holiday-in-Paris-London.jpg $filename_raw 동안 여전히 My Holiday in Paris/London.jpg을 것이다 될 것이다. apply_filters() 때문에 우리의 new_filename() 함수가 다시 실행됩니다. 그러나 이번에는 $new == $filename_raw이기 때문에 끝납니다.

그리고 마지막으로 My-Holiday-in-Paris-London.jpg가 반환됩니다.

+0

+1 멋진 글쓰기! 같은 파일이 두 번 업로드되면 어떻게됩니까? – brasofilo

+0

대단하군요! 의도 한대로 작동하는 것 같습니다. – jonbennett

+0

@brasofilo이 시나리오를 볼 수 있습니까? [link] (http://stackoverflow.com/questions/13809555/rename-files-during-upload-within-wordpress-and-gravity-form) – jonbennett

0

이와 비슷한? ($post을 고려하는 것은 귀하의 게시물 변수, 그것은 글로벌하게) :

function new_filename($filename) { 
    global $post; 
    $info = pathinfo($filename); 
    $ext = empty($info['extension']) ? '' : '.' . $info['extension']; 
    return $post->post_title . $ext; 
} 
add_filter('sanitize_file_name', 'new_filename', 10); 

내가 당신을 이해 했습니까?

+1

파일 이름을 지정하는 것이 안전하지 않을 수 있으므로 게시물 제목에 무언가를하고 싶습니다. 슬래시가있는 게시물 제목은 코드를 확실히 파기합니다. 예, WordPress는 업로드 된 파일의 파일 이름을 삭제하지만 필터를 추가하면 파일을 덮어 쓰므로 다시 호출해야합니다. http://core.trac.wordpress.org/browser/tags/3.4.2/wp-includes/formatting.php#L814 – mushroom