В блогах часто используются картинки и фотографии. Обычно они скидываются в одну папку. Но через какое-то время становится непонятно какое изображение в каком посте используется. Стандартными средствами не удастся сделать, чтобы для каждого поста была своя отдельная папка.
Вначале рассмотрим, как сделать это с помощью кода. Надо вставить данный код в файл functions.php:
Для того, чтобы закачивать изображения в блог, и располагать их в папках, соответствующих постам, можно применить специальный код. Вставьте его в файл functions.php используемой темы:
function media_upload_dir($upload) { if(!isset($_REQUEST['post_id'])) return $upload; $id = $_REQUEST['post_id']; if (isset($_REQUEST['post_id'])) { $upload['path'] = "/www/blog/wp-content/uploads/" . $id; $upload['url'] = "http://site.com/blog/wp-content/uploads/" . $id; $upload['basedir'] = "/www/blog/wp-content/uploads/" . $id; $upload['baseurl'] = "http://site.com/blog/wp-content/uploads/" . $id; if (!file_exists("/www/blog/wp-content/uploads/" . $id)) { mkdir("/www/blog/wp-content/uploads/" . $id, 0777); } } return $upload; } add_filter('upload_dir', 'media_upload_dir');
Данный код создаст папку с названием ID записи. Все изображения записи будут загружаться в отдельную папку.
/wp-content/uploads/
— это полный путь до папки (может отличаться).
http://site.com/blog/wp-content/uploads/
— это полный путь до папки uploads в браузере.
Код можно усовершенствовать, сделав более универсальным: функция будет сохранять изображения в папках, соответствующих, на ваш выбор, ID поста, автору поста, или типу файлов.
Путь к файлам будет такой: /wp-content/uploads/выбранный_вами_шаблон/
.
Сохранение изображений в папку ID поста
add_filter('wp_handle_upload_prefilter', 'tp_handle_upload_prefilter'); add_filter('wp_handle_upload', 'tp_handle_upload'); function tp_handle_upload_prefilter( $file ) { add_filter('upload_dir', 'tp_custom_upload_dir'); return $file; } function tp_handle_upload( $fileinfo ) { remove_filter('upload_dir', 'tp_custom_upload_dir'); return $fileinfo; } function tp_custom_upload_dir($path) { $use_default_dir = ( isset($_REQUEST['post_id'] ) && $_REQUEST['post_id'] == 0 ) ? true : false; if( !empty( $path['error'] ) || $use_default_dir ) return $path; $the_post = get_post($_REQUEST['post_id']); $customdir = '/' . $the_post->post_name; $path['path'] = str_replace($path['subdir'], '', $path['path']); $path['url'] = str_replace($path['subdir'], '', $path['url']); $path['subdir'] = $customdir; $path['path'] .= $customdir; $path['url'] .= $customdir; return $path; }
В этом случае изображения будут сохраняться в папку /wp-content/uploads/post_id/
.
Сохранение изображений в папку Автор_поста
add_filter('wp_handle_upload_prefilter', 'tp_handle_upload_prefilter'); add_filter('wp_handle_upload', 'tp_handle_upload'); function tp_handle_upload_prefilter( $file ) { add_filter('upload_dir', 'tp_custom_upload_dir'); return $file; } function tp_handle_upload( $fileinfo ) { remove_filter('upload_dir', 'tp_custom_upload_dir'); return $fileinfo; } function tp_custom_upload_dir($path) { $use_default_dir = ( isset($_REQUEST['post_id'] ) && $_REQUEST['post_id'] == 0 ) ? true : false; if( !empty( $path['error'] ) || $use_default_dir ) return $path; $the_post = get_post($_REQUEST['post_id']); $the_author = get_user_by('id', $the_post->post_author); $customdir = '/' . $the_author->data->display_name; $path['path'] = str_replace($path['subdir'], '', $path['path']); $path['url'] = str_replace($path['subdir'], '', $path['url']); $path['subdir'] = $customdir; $path['path'] .= $customdir; $path['url'] .= $customdir; return $path; }
В данном случае изображения будут сохраняться в папку /wp-content/uploads/post_author/
.
Сохранение изображений в папку Тип_файлов
add_filter('wp_handle_upload_prefilter', 'tp_handle_upload_prefilter'); add_filter('wp_handle_upload', 'tp_handle_upload'); function tp_handle_upload_prefilter( $file ) { add_filter('upload_dir', 'tp_custom_upload_dir'); return $file; } function tp_handle_upload( $fileinfo ) { remove_filter('upload_dir', 'tp_custom_upload_dir'); return $fileinfo; } function tp_custom_upload_dir($path) { $use_default_dir = ( isset($_REQUEST['post_id'] ) && $_REQUEST['post_id'] == 0 ) ? true : false; if( !empty( $path['error'] ) || $use_default_dir ) return $path; $extension = substr( strrchr( $_POST['name'], '.' ), 1 ); switch( $extension ) { case 'jpg': case 'png': case 'gif': $customdir = '/images'; break; case 'mp4': case 'm4v': $customdir = '/videos'; break; case 'txt': case 'doc': case 'pdf': $customdir = '/documents'; break; default: $customdir = '/others'; break; } $path['path'] = str_replace($path['subdir'], '', $path['path']); $path['url'] = str_replace($path['subdir'], '', $path['url']); $path['subdir'] = $customdir; $path['path'] .= $customdir; $path['url'] .= $customdir; return $path; }
В данном случае изображения будут сохраняться в папку /wp-content/uploads/file_type/
.
Любой из кодов нужно использовать в файле functions.php только один раз.