Организация загруженных медиафайлов с использованием wp_insert_post() и wp_handle_upload в соответствии с параметром времени.

Вопрос или проблема

Я ретроактивно создаю пост с помощью wp_insert_post() и прикрепляю к нему изображение. Мне нужно, чтобы изображение помещалось в папку, соответствующую дате публикации поста.

Я использую параметр time в функции wp_handle_upload, который должен перемещать файлы в директории в соответствии со значением параметра (смотрите в коде – $upload_date – статическое значение на данный момент). Но сейчас изображение перемещается в папку текущего года/месяца, игнорируя $upload_date (Пример: Должно быть 2007/11, а идет в 2012/12).

    $output_dir = $uploads['path'];
    new_filepath = $output_dir."https://wordpress.stackexchange.com/".$file;

// ВСТАВКА ПОСТА И ПОЛУЧЕНИЕ ID ПОСТА  
    $my_post_id = wp_insert_post($my_post);

// Копирование изображения из моей папки в WP Uploads
    rename($filename,$new_filepath);

// необходимо для wp_handle_upload() для загрузки файла
    $upload_overrides = array( 'test_form' => FALSE );

    $upload_date="2007/11"; // Использую эту дату для тестирования

    $movefile = wp_handle_upload( $new_filepath, $upload_overrides, $upload_date ); 

    $wp_filetype = wp_check_filetype(basename($new_filepath), null );
    $attachment = array(
         'post_mime_type' => $wp_filetype['type'],
         'post_title' => $post_title,
         'post_content' => $post_content,
         'post_status' => 'inherit'
    );
    $attach_id = wp_insert_attachment( $attachment, $new_filepath, $my_post_id );
    $attach_data = wp_generate_attachment_metadata( $attach_id, $new_filepath );
    wp_update_attachment_metadata( $attach_id, $attach_data );

// ДОБАВИТЬ ИЗОБРАЖЕНИЕ В ПУБЛИКАЦИЮ
    add_post_meta($my_post_id, '_thumbnail_id', $attach_id);

Перед копированием файлов (rename()) в конечное место назначения я устанавливаю параметр time для wp_upload_dir() (вместо попытки заставить wp_handle_upload() передать его), и теперь файлы перемещаются в соответствующие директории.

$uploads = wp_upload_dir( $upload_date );
$output_dir = $uploads[ 'path' ];
rename( $filename, $new_filepath );

Ответ или решение

Чтобы организовать загруженные медиафайлы в WordPress по параметру времени, необходимо правильно использовать функции wp_insert_post() и wp_handle_upload(). В вашем случае, проблема заключается в том, что загружаемое изображение помещается в текущую директорию года/месяца, а вам нужно разместить его в папке, соответствующей дате публикации поста.

Вот как можно решить вашу задачу:

  1. Прежде всего, для изменения пути загрузки файлов, вы должны использовать функцию wp_upload_dir() с нужной датой. Это позволит вам указать папку, в которую следует переместить файл.

  2. Затем вам необходимо использовать путь, возвращаемый этой функцией, при загрузке файла. Ниже представлен обновленный пример кода.

// Определение даты публикации
$upload_date = '2007/11'; // Задайте нужную дату для тестирования

// Получение директории загрузки на основе заданной даты
$uploads = wp_upload_dir($upload_date);
$output_dir = $uploads['path']; // Папка назначения
$new_filepath = $output_dir . '/' . basename($filename); // Новый путь файла

// Вставка поста и получение ID
$my_post_id = wp_insert_post($my_post);

// Переименование загружаемого файла в новый путь
if (rename($filename, $new_filepath)) {
    // Если переименование прошло успешно, обрабатываем загрузку
    $wp_filetype = wp_check_filetype(basename($new_filepath), null);
    $attachment = array(
        'post_mime_type' => $wp_filetype['type'],
        'post_title' => $post_title,
        'post_content' => $post_content,
        'post_status' => 'inherit'
    );

    // Вставка вложения
    $attach_id = wp_insert_attachment($attachment, $new_filepath, $my_post_id);

    // Генерация метаданных для вложения
    $attach_data = wp_generate_attachment_metadata($attach_id, $new_filepath);
    wp_update_attachment_metadata($attach_id, $attach_data);

    // Установка изображения как миниатюры
    add_post_meta($my_post_id, '_thumbnail_id', $attach_id);
} else {
    // Обработка ошибки, если переименование не удалось
    error_log('Ошибка перемещения файла: ' . $filename);
}

Объяснение ключевых шагов:

  • Получение директории загрузки: Сначала мы исполняем wp_upload_dir($upload_date), что обеспечивает получение пути, основанного на заданной дате, а не текущей.

  • Переименование файла: Мы используем rename() для перемещения файла в папку, полученную ранее, что гарантирует, что файл будет находиться в нужной директории.

  • Вставка вложения: Используйте wp_insert_attachment() для добавления медиафайла в базу данных WordPress.

  • Обновление метаданных: После добавления вложения, важно сгенерировать метаданные и обновить их с помощью wp_update_attachment_metadata().

Теперь ваш код будет правильно организовывать загруженные медиафайлы по дате, что решает проблему размещения изображений в папке, соответствующей дате публикации поста.

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

Капча загружается...