← home

워드프레스 – 업로드 폴더 구조 변경

업로드 폴더의 기본 구조인 ‘/연도/월’ 구조에서 ‘/월’ 분류를 없애고 ‘/연도’ 구조로 간략하게 변경.

워드프레스에서 파일을 업로드하면 기본적으로 다음과 같은 폴더 구조가 만들어집니다.

이러한 분류가 불필요하다면 미디어 설정 페이지(/wp-admin/options-media.php)에서 이 기능을 해제할 수 있습니다. 그러면 이후에 업로드하는 파일들은 폴더 분류없이 uploads에 주~욱 쌓이게 됩니다.
어떤 옵션을 선택하는 것이 좋을지는 블로그 운영자의 관리 취향 혹은 미디어 업로드 빈도에 따라 각각 다를 것입니다. 하지만 그 중간의 설정이 없는 것은 다소 아쉽습니다. 다양한 규모의 웹사이트들을 만들다보면 이러한 구조변경의 필요성을 종종 느끼곤 하는데요, ‘월’ 분류없이 ‘연도’로만 분류를 만들어보도록 하겠습니다.

업로드 경로설정은 ‘upload_dir’이라는 훅 네임으로 필터링할 수 있는 기회가 있군요.
우선 아래와 같이 필터를 걸고, 어떤 값들이 할당되었는지 확인해보겠습니다.

add_filter( 'upload_dir', 'my_upload_dir' );
function my_upload_dir($r){
	echo '<pre>' . print_r($r, true) . '</pre>';
	return $r;
}

출력 결과:

Array
(
    [path] => /생략/wp-content/uploads/2014/03
    [url] => /생략/wp-content/uploads/2014/03
    [subdir] => /2014/03
    [basedir] => /생략/wp-content/uploads
    [baseurl] => /생략/wp-content/uploads
    [error] => 
)

basedir/baseurl은 uploads 폴더의 경로이고, path/url은 파일이 업로드될 경로입니다.
subdir의 형식(/연도/월)을 체크하여 ‘월’부분을 떼어내고 path와 url을 고쳐줍니다.

function my_upload_dir($r){
	$subdir = $r['subdir'];
	if ( get_option( 'uploads_use_yearmonth_folders' ) 
		&& preg_match( '#^/\d{4}/\d{2}$#', $subdir ) ) {
		$new_subdir = preg_replace('#^(/\d{4})/\d{2}$#', '$1', $subdir);
		$r['path'] = preg_replace('#(.+)('.$subdir.')$#', '$1'.$new_subdir, $r['path']);
		$r['url'] = preg_replace('#(.+)('.$subdir.')$#', '$1'.$new_subdir, $r['url']);
		$r['subdir'] = $new_subdir;
	}
	return $r;
}

앞으로 업로드하는 파일들은 ‘월’ 구분없이 ‘연도’로만 구분됩니다.

← home