Если посмотреть, как в блоге хранятся все изображения, которые вы загружали и использовали в постах, то станет понятно, что без дополнительного анализа понять, в каком посте какое изображение использовалось, не удастся – все изображения собраны в папки по месяцам и годам закачки. Если вы захотите изменить папки для сохранения изображений, сделав для каждого поста отдельную папку, то стандартными средствами решить этот воспрос не удастся, нужно будет прибегать либо к помощи плагинов, либо внедрять специальный код.
Для того, чтобы закачивать изображения в блог, и располагать их в папках, соответствующих постам, можно применить специальный код. Вставьте его в файл 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 поста. Все изображения из поста закачиваются в отдельную папку, и в дальнейшем легко понять, к какому посту относятся изображения.
www/blog/wp-content/uploads/ – это полный путь до папки с учетом того, как он формируется вашим хостингом.
site.com/blog/wp-content/uploads/ – это полный путь до папки uploads с учетом того, как он выглядит в браузере.
Код можно усовершенствовать, сделав более универсальным: функция будет сохранять изображения в папках, соответствующих, на ваш выбор, ID поста, автору поста, или типу файлов. Путь к файлам будет такой: /wp-content/uploads/выбранный_вами_шаблон/.
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 только один раз.
Если вы не хотите самостоятельно внедрять код в используемую тему, то есть более простой и универсальный для любой темы в блоге способ – плагин Custom Upload Dir. Этот плагин делает то же самое, что и вышеприведенный код, только вариантов шаблонов больше: вы можете сохранять изображения в папки по ID поста, автору, названию поста (slug), типу записи (пост, страница, страница вложения), году, месяцу, дню, текущему пользователю, категории, метке, и даже по произвольной структуре, которую вы сами придумаете.
Но что самое удобное, так это то, что все эти шаблоны можно комбинировать, используя один в другом. Например, можно сохранять изображения в папки с таким путем: /wp-content/uploads/YYYY/MM/DD/user/post_id/.
Custom Upload Dir









Классный вариант когда изображения сохраняться в папку /wp-content/uploads/file_type/
Подскажите пожалуйста как добавить в адрес год и месяц?
Чтобы получилось:
/wp-content/uploads/file_type/год/месяц/
Заранее спасибо!!!
Воспользуйтесь плагином Custom Upload Dir.
Дорогой tiaurus. Спасибо за эту статью!! Была проблема с организацией медиафайлов по папкам на сервере через библиотеку по постам (ключ для поисковиков кхе-кхе). Перечитал кучу сайтов и отчаялся. Думал уже начинать пользоваться виртуальными папками, а не физическим на сервере. Спасибо еще раз!!