Почему не загружается файл в папку?

Ссылка скопирована
1 ответ

Суть, через 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, чтобы проверить, в каком месте происходят проблемы.

  • а post_type точно post?
  • Михаил Р., я что-то echo Не могу сделать, я расставил его везде и при открытии страницы почему-то на секунду вижу как раз свои echo, тип, до того как откроется страница с добавлением записи, хотя вроде при сохранении вызываться должно + при добавлени echo выбивает ошибку потом при попытке сохрантиь - Ответ не является допустимым ответом JSON
  • IvanU7n, вроде угу, папку создавать пробовал и там похожий способ работает
    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); } } }

  • yraiv, такая да не совсем, для начала попробуйте убрать эту проверку, а проверять наличие $_FILES['crb_game_files']
  • IvanU7n, результат такой же, ошибок нет, сохраняет остальные все поля, но вот в папке файлы не появляются выбранные
  • отстутствие ошибок это не значит, что нет ошибок. ошибки вылезают фатальные только.
  • yraiv, что-то я забыл, что у себя загрузку файлов делал через медиабиблиотеку и там файл загружается отдельно, а в поле только id от attachment-а и теперь не уверен, что загружать так файлы можно, т.к. enctype для формы глобальной может быть неподходящим
  • Ответы:

    Может права доступа у папки не те выставлены?

    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Сергей Миронов Ответ

    Если файл из 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));

    $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);

    $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');
        }
    }

    $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;
    }

    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() найдите физический путь, проверьте права папки и логируйте каждый шаг. В большинстве случаев проблема не в загрузке, а в неверном моменте чтения поля или отсутствии прав на папку назначения.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно