[WordPress] Сохраняем изображения в папки, отдельные для каждого поста

В блогах часто используются картинки и фотографии. Обычно они скидываются в одну папку. Но через какое-то время становится непонятно какое изображение в каком посте используется. Стандартными средствами не удастся сделать, чтобы для каждого поста была своя отдельная папка.

Вначале рассмотрим, как сделать это с помощью кода. Надо вставить данный код в файл 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 только один раз.

Добавить комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.