PHP Fatal error: Вызов неопределенной функции download_url()
Сначала полный текст ошибки:
PHP Fatal error: Call to undefined function download_url() in /path/to/wordpress/wp-admin/includes/media.php on line 562
Внизу вопроса я также привел связанные функции.
Я модифицирую скрипт для сайта моей компании, который позволяет автоматизировать получение и загрузку контента от нашего поставщика. Из-за особенностей организации их XML мне нужно загружать изображения, связанные со статьями, отдельно от основного содержимого статей. Я попытался использовать media_sideload_image() для этого, но получил ошибку:
Функция (media_sideload_image()), которая вызывает download_url и приводит к ошибке:
PHP Fatal error: Call to undefined function download_url() in /path/to/wordpress/wp-admin/includes/media.php on line 562
Как видно, я успешно подключил media.php - остальная часть моего скрипта уже реализована на сайте, и у меня не было других проблем с доступом к файлам WordPress. Ошибка, похоже, связана с самим media.php - что кажется мне странным.
Есть идеи, как решить эту проблему? Альтернативно, если вы знаете другую функцию, которую я могу использовать для этого, это тоже будет полезно.
Если вам нужны дополнительные детали о проблеме - просто спросите.
/**
* Загружает изображение по указанному URL и прикрепляет его к записи.
*
* @since 2.6.0
*
* @param string $file URL изображения для загрузки
* @param int $post_id ID записи, к которой будет прикреплено изображение
* @param string $desc Опционально. Описание изображения
* @return string|WP_Error HTML-тег img при успехе или объект ошибки
*/
function media_sideload_image($file, $post_id, $desc = null) {
if ( ! empty($file) ) {
// Загрузка файла во временное местоположение
$tmp = download_url( $file );
// Установка переменных для хранения
// исправление имени файла для query-строк
preg_match('/[^\?]+\.(jpg|JPG|jpe|JPE|jpeg|JPEG|gif|GIF|png|PNG)/', $file, $matches);
$file_array['name'] = basename($matches[0]);
$file_array['tmp_name'] = $tmp;
// Если ошибка при временном сохранении, удаляем
if ( is_wp_error( $tmp ) ) {
@unlink($file_array['tmp_name']);
$file_array['tmp_name'] = '';
}
// выполняем проверку и сохранение
$id = media_handle_sideload( $file_array, $post_id, $desc );
// Если ошибка при постоянном сохранении, удаляем
if ( is_wp_error($id) ) {
@unlink($file_array['tmp_name']);
return $id;
}
$src = wp_get_attachment_url( $id );
}
// Проверяем, что файл сохранен, и возвращаем html
if ( ! empty($src) ) {
$alt = isset($desc) ? esc_attr($desc) : '';
$html = "<img src='$src' alt='$alt' />";
return $html;
}
}
Функция, где я вызываю media_sideload_image() в своем коде:
// Загружаем изображение, если оно существует, и возвращаем post_id
function upload_image($post_id, $image_url) {
require_once('wp-admin/includes/media.php');
$image_url = 'http://admin.gkbusiness.com/gkbusiness/files/2011/04/LOGOGKMBUS1.jpg';
media_sideload_image($image_url, $post_id);
return $post_id;
}

Как насчет этого:
/**
* Прикрепляет изображение по URL к записи
*
* @param string $file URL изображения
* @param int $post_id ID записи
* @param string|null $desc Описание изображения
*/
function attach_image_url($file, $post_id, $desc = null) {
require_once(ABSPATH . "wp-admin" . '/includes/image.php');
require_once(ABSPATH . "wp-admin" . '/includes/file.php');
require_once(ABSPATH . "wp-admin" . '/includes/media.php');
if ( ! empty($file) ) {
// Загружаем файл во временное расположение
$tmp = download_url( $file );
// Устанавливаем переменные для хранения
// исправляем имя файла для query strings
preg_match('/[^\?]+\.(jpg|JPG|jpe|JPE|jpeg|JPEG|gif|GIF|png|PNG)/', $file, $matches);
$file_array['name'] = basename($matches[0]);
$file_array['tmp_name'] = $tmp;
// Если ошибка временного сохранения - удаляем
if ( is_wp_error( $tmp ) ) {
@unlink($file_array['tmp_name']);
$file_array['tmp_name'] = '';
}
// выполняем валидацию и сохранение
$id = media_handle_sideload( $file_array, $post_id, $desc );
// Если ошибка постоянного сохранения - удаляем
if ( is_wp_error($id) ) {@unlink($file_array['tmp_name']);}
// Добавляем метаданные миниатюры
add_post_meta($post_id, '_thumbnail_id', $id, true);
}
}

Если вам не требуется столь детализированное решение или у вас возникают проблемы с отсутствием других функций в вашем "внешнем" скрипте, просто подключите также административные скрипты.
Таким образом, в начале вашего "внешнего" скрипта, который должен использовать функциональность WordPress, подключите wp-load.php для фронтенд-функций и admin.php для бэкенд/административных функций:
require_once ('wp-load.php');
require_once ('wp-admin/includes/admin.php');
Это предполагает, что ваш скрипт находится на корневом уровне WordPress. Если это не так, вам нужно будет адаптировать пути.
