Почему не загружается файл в папку?
Суть, через carbon fields сделал поле для файла и через него хочу загружать во время добавления записи нужный мне файл в нужную мне папку, но он почему-то не добавляет его, хотя и ошибок не выводит.
add_action('save_post', 'crb_save_post', 10, 3); function crb_save_post($post_id, $post, $update) { if ($post->post_type === 'post' && !$update && defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) { return; } $file_info = $_FILES['crb_game_files']; if ($file_info['error'] === UPLOAD_ERR_OK) { $games_folder = get_template_directory() . '/games/'; $post_folder = $games_folder . $post_id; if (file_exists($post_folder)) { $target_path = $post_folder . '/' . basename($file_info['name']); move_uploaded_file($file_info['tmp_name'], $target_path); } } } |
add_action('save_post', 'crb_save_post', 10, 3); function crb_save_post($post_id, $post, $update) { if ($post->post_type === 'post' && !$update && defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) { return; } $file_info = $_FILES['crb_game_files']; if ($file_info['error'] === UPLOAD_ERR_OK) { $games_folder = get_template_directory() . '/games/'; $post_folder = $games_folder . $post_id; if (file_exists($post_folder)) { $target_path = $post_folder . '/' . basename($file_info['name']); move_uploaded_file($file_info['tmp_name'], $target_path); } } }
Дополнительно:
Логирование что говорит? Расставьте в разных местах echo, чтобы проверить, в каком месте происходят проблемы.
add_action('wp_after_insert_post', 'crb_after_insert_post', 10, 3); function crb_after_insert_post($post_id, $post, $update) { if ($post->post_type === 'post') { $games_folder = get_template_directory() . '/games/'; $post_folder = $games_folder . $post_id; if (!file_exists($post_folder)) { mkdir($post_folder); } } } |
add_action('wp_after_insert_post', 'crb_after_insert_post', 10, 3); function crb_after_insert_post($post_id, $post, $update) { if ($post->post_type === 'post') { $games_folder = get_template_directory() . '/games/'; $post_folder = $games_folder . $post_id; if (!file_exists($post_folder)) { mkdir($post_folder); } } }
Ответы:
Может права доступа у папки не те выставлены?
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Если файл из Carbon Fields не копируется в нужную папку при
save_postи ошибок нет, чаще всего код выполняется раньше, чем поле сохранено, или Вы пытаетесь работать не с физическим файлом, а с ID/URL вложения. Carbon Fields обычно сохраняет файл как attachment, а не как raw upload в$_FILES.Сначала проверьте значение поля после сохранения:
$file = carbon_get_post_meta($post_id, 'your_file_field'); error_log(print_r($file, true));
Если это ID вложения:
$attachment_id = (int) $file; $source = get_attached_file($attachment_id);
Дальше копирование:
$target_dir = WP_CONTENT_DIR . '/my-folder/' . $post_id; if (!wp_mkdir_p($target_dir)) { error_log('Cannot create dir: ' . $target_dir); return; } if ($source && file_exists($source)) { $result = copy($source, $target_dir . '/' . basename($source)); if (!$result) { error_log('Cannot copy file'); } }
Не глушите ошибки. Проверяйте результат
wp_mkdir_p(),file_exists(),is_writable(),copy(). Без этого кажется, что “ничего не происходит”.Также исключите autosave и revisions:
if (wp_is_post_autosave($post_id) || wp_is_post_revision($post_id)) { return; }
Если
save_postсрабатывает до сохранения Carbon Fields, используйте hook Carbon Fields после сохранения или поставьте более поздний приоритет, но лучше ориентироваться на документацию Carbon Fields для конкретной версии.Итог: получите attachment ID из Carbon Fields, через
get_attached_file()найдите физический путь, проверьте права папки и логируйте каждый шаг. В большинстве случаев проблема не в загрузке, а в неверном моменте чтения поля или отсутствии прав на папку назначения.