WordPress 5.x: программная загрузка изображений не работает

Я создаю собственный плагин для WordPress, чтобы загружать свои продукты из моей базы данных в WooCommerce. Вся логика работает отлично, но когда дело доходит до загрузки изображений и прикрепления их к товару, то она не работает.

Я попытался использовать обычную копию из исходного кода в локальный каталог, а затем создать медиапост, но это не сработало.

Это то, что я пытаюсь сейчас:

$image_id = media_sideload_image( 
                urlencode( $item['ImgPath1'] ),
                $post_id,
                $item['Title'],
                'id'
            );
add_post_meta( $post_id, '_thumbnail_id', $image_id );

Я также пробовал:

$filename = basename( $source ); // Get the filename including extension from the $fileurl e.g. myimage.jpg

$destination = WP_CONTENT_DIR. '/uploads/product_images/' . $filename; // Specify where we wish to upload the file, generally in the wp uploads directory

copy( $source, $destination ); // Copy the file

$filetype = wp_check_filetype( $destination ); // Get the mime type of the file

$attachment = array( // Set up our images post data
  'guid'           => get_option( 'siteurl' ) . '/wp-content/uploads/product_images/' . $filename,
  'post_mime_type' => $filetype['type'],
  'post_title'     => $filename,
  'post_author'    => 1,
  'post_content'   => ''
);

Я ожидаю, по крайней мере, увидеть изображения на ftp, но ничего не сообщается, и мой импорт продукта продолжается без каких-либо проблем.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
258
1

Ответы 1

Ваш второй пример кажется неполным, поэтому я проигнорирую его и сосредоточусь на исправлении первого.

Проблема с вашим первым примером заключается в том, что media_sideload_image() предназначен для использования с внешним URL-адресом, а не с путем к файлу на том же сервере. Однако большая часть внутренней работы этой функции на самом деле происходит в media_handle_sideload(), который вызывается после загрузки файла во временное место на локальном сервере.

Следующий код был написан в основном из памяти и не тестировался, но должен работать:

function insert_media_from_path( $file_path, $attach_to = 0, $title = null, $delete_original = false ) {
  if ( !file_exists( $file_path ) ) {
    return false;
  }
  $file_array = array(
    'name' => basename($file_path),
    'tmp_name' => $file_path
  );
  $id = media_handle_sideload( $file_array, $attach_to, $title );
  if ( $id && $delete_original ) {
    unlink( $file_path );
  }
  return $id;
}

Я на самом деле пытаюсь скопировать из внешнего источника. второй пример я пытаюсь скопировать из моего внешнего источника в локальный источник, а затем прикрепить его.

juanmrad 12.02.2019 20:55

Можете ли вы опубликовать пример содержимого массива $item из первого опубликованного вами фрагмента кода?

Greg Schoppe 13.02.2019 04:23

Другие вопросы по теме