У меня есть плагин, который регистрирует REST API endpoint, получает данные и загружает изображения.
Вот одна из функций в моём плагине:
private function handleMedia(WP_REST_Request $request, int $post_id): void
{
require_once ABSPATH . 'wp-admin/includes/file.php';
require_once ABSPATH . 'wp-admin/includes/media.php';
require_once ABSPATH . 'wp-admin/includes/image.php';
$files = $request->get_file_params();
if (!empty($files['featured_image'])) {
$attachment_id = media_handle_upload('featured_image', $post_id);
if (!is_wp_error($attachment_id)) {
set_post_thumbnail($post_id, $attachment_id);
}
} else {
if (has_post_thumbnail($post_id)) {
delete_post_thumbnail($post_id);
}
}
if (!empty($_FILES['content_images'])) {
foreach ($_FILES['content_images']['name'] as $i => $name) {
$_FILES['tmp_file'] = [
'name' => $name,
'type' => $_FILES['content_images']['type'][$i],
'tmp_name' => $_FILES['content_images']['tmp_name'][$i],
'error' => $_FILES['content_images']['error'][$i],
'size' => $_FILES['content_images']['size'][$i],
];
media_handle_upload('tmp_file', $post_id);
}
}
}
Для чего подключать эти файлы WP?
require_once ABSPATH . 'wp-admin/includes/file.php';
require_once ABSPATH . 'wp-admin/includes/media.php';
require_once ABSPATH . 'wp-admin/includes/image.php';
Ответ
Эти require_once действительно нужны, потому что некоторые функции для загрузки медиа в WordPress доступны только в админке (wp-admin) — и не загружаются автоматически в публичной или REST-среде.
🧠 Почему нужно require_once
Функции вроде:
media_handle_upload()wp_handle_upload()wp_generate_attachment_metadata()wp_crop_image()и т.д.
находятся в файлах:
wp-admin/includes/file.phpwp-admin/includes/media.phpwp-admin/includes/image.php
❗ Эти файлы не подключаются автоматически, если ты:
- в REST API;
- в Ajax-запросе;
- в консольном WP-CLI;
- в плагине, который работает вне админки.
🧱 Что будет без require_once
Если ты не подключишь эти файлы, а попытаешься вызвать media_handle_upload(), WordPress выдаст:
Uncaught Error: Call to undefined function media_handle_upload()
📌 Когда можно не подключать?
- В админке (обычные страницы через
/wp-admin/...) — уже подключено. - В хуках типа
save_postилиadmin_post_*— возможно, уже доступно.
Но в REST API — почти никогда не подключается.
