Как массово загрузить изображения и автоматически создать посты для каждого из них одновременно?

10 сент. 2010 г., 00:23:01
Просмотры: 23.5K
Голосов: 10

Я знаю, как загружать несколько изображений в существующий пост, но этот сценарий другой. Речь идет о большом каталоге ресурсов, где каждый пост пользовательского типа представляет собой изображение (таким образом, одно изображение назначается как "featured image" для каждого поста).

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

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

Я исследовал решения от создания постов через XML-RPC (которые обычно не обрабатывают загрузку/назначение изображений) до плагинов, которые переносят файлы из директории сервера в медиабиблиотеку (что не охватывает создание постов), и jquery загрузчиков множества файлов (которые по сути просто сбрасывают файлы в директорию).

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

Надеюсь, это можно сделать в пользовательской панели администратора, но если придется делать это за пределами wp-admin, это тоже нормально...

Есть идеи?

5
Комментарии

Вы нашли ответ на этот вопрос? Это было бы идеально для меня...

User User
11 апр. 2012 г. 01:08:59

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

somatic somatic
2 мая 2012 г. 10:45:56

Вкратце, я реализовал двухэтапный процесс, так как по редакционным причинам не имело смысла создавать посты для всего, что загружал пользователь. Вместо этого пользователь загружает все изображения в один "пакетный" пост как вложения к этому единственному посту. Затем пакет проверяется, и каждое вложение принимается или отклоняется - и когда этот "пакетный" пост публикуется, пользовательская функция сохранения берет каждое принятое вложение и использует wp_insert_post() для создания поста с этим единственным вложением в качестве его миниатюры.

somatic somatic
2 мая 2012 г. 10:47:22

Также дубликат:

http://wordpress.stackexchange.com/questions/55616/bulk-image-upload-and-one-image-for-each-post

Anoop Chandrika HarisudhanNair Anoop Chandrika HarisudhanNair
11 авг. 2013 г. 12:47:05

Как вы добавляете метаданные, как изображения связаны с данными?

Wyck Wyck
11 авг. 2013 г. 16:22:04
Все ответы на вопрос 3
1

Этот скрипт является концепцией (протестирован и работает), это не плагин и предназначен для модификации, он предполагает несколько вещей:

  1. Он использует wp_insert_post, поэтому рекомендуется не подключать его к каким-либо хукам админки, просто запустите его один раз!
  2. Изображения должны находиться в папке wp-content\uploads, изменение этого потребует дополнительных усилий. В примере используется пользовательская папка \images внутри папки загрузок, вы можете изменить эту часть.
  3. Он не выполняет проверку ошибок, я тестировал его только на папке с 20 изображениями, поэтому результаты могут отличаться :)

Приведенный ниже код будет перебирать папку wp-content\uploads\images и создавать заголовок поста на основе имени изображения, которое к нему прикрепляется. Вероятно, вы захотите изменить это на что-то лучшее или, возможно, добавить метаданные, используя другие имеющиеся данные (например, Exif).

function WPSE_1595_image_post() {

    // Используем стандартную папку загрузок
    $wp_upload_dir =  wp_upload_dir();
    // Конкретная папка
    $wp_upload_images = $wp_upload_dir['basedir'] . '/images';

    require_once(ABSPATH . 'wp-admin/includes/image.php');

    foreach (new DirectoryIterator($wp_upload_images) as $fileInfo) {

        if($fileInfo->isDot()) continue;

        $image_base = $fileInfo->getFilename();
        $image_name = pathinfo($fileInfo, PATHINFO_FILENAME);

        //Настройте эти данные поста по своему усмотрению
        $my_post_data = array(
            'post_title' => $image_name,
            'post_type' => 'post',
            'post_category' => array('1'),
            'post_author'   => 1,
            'post_status' => 'publish'
        );

        // Нам нужен ID для вложения
        $post_id = wp_insert_post($my_post_data);

        $wp_filetype = wp_check_filetype($image_base, null );

         //Настройте эти данные вложения по своему усмотрению
        $attachment = array(
             'guid' => $wp_upload_dir['url'] . '/' . $image_name, 
             'post_mime_type' => $wp_filetype['type'],
             'post_title' => 'child-' . $image_name,
             'post_content' => '',
             'post_status' => 'inherit'
        );

        $imagefile = $wp_upload_images . '/' . $image_base;
        $attach_id = wp_insert_attachment( $attachment, $imagefile, $post_id );
        $attach_data = wp_generate_attachment_metadata( $attach_id, $imagefile );

        wp_update_attachment_metadata( $attach_id, $attach_data );
    }   
}

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

14 авг. 2013 г. 08:24:44
Комментарии

Он продолжает добавлять измененные изображения обратно в папку upload/images, и для каждого из них также создает новую запись. Процесс стал рекурсивным, поэтому до того, как я удалил функцию, было создано почти 800 записей. Новые размеры изображений должны генерироваться в стандартном расположении медиафайлов WordPress.

Heena Shah Heena Shah
20 авг. 2017 г. 10:42:19
1

Есть такой плагин: Automatic Featured Image Posts Plugin

С страницы плагина:

Automatic Featured Image Posts автоматически создает новую запись с изображением записи (Featured Image) каждый раз при загрузке изображения. Через страницу настроек плагина вы можете задать параметры публикации и привязки к одному из ваших пользовательских типов записей и/или форматам записей.

По сути, каждое загружаемое изображение генерирует запись (выбранного вами типа) и устанавливается как изображение записи для этой записи.

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

Скриншот плагина

Чтобы использовать плагин — перейдите к выбранному типу записи, создайте новую запись и загрузите медиафайлы.

Для массовой загрузки фото просто выделите несколько фото в диалоговом окне загрузки. Здесь я выделил 8 фото, но не вижу причин, почему нельзя загрузить 80 или 800, если только в загрузчике WordPress нет неизвестных мне ограничений.

Массовая загрузка изображений

Названия записей формируются из имен файлов изображений. Вы сможете работать с ними и выводить в своей теме через the_title().

Я протестировал локально, и плагин работает в WordPress 3.6.

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

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

Примечание: Убедитесь, что все ваши image_size заданы в functions.php. Было бы неприятно удалять 10 000 фото или запускать очень долгий процесс "regenerate thumbnails" только потому, что вы забыли или изменили размер изображений!

15 авг. 2013 г. 04:23:00
Комментарии

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

timshutes timshutes
25 авг. 2013 г. 00:37:42
0

Вопрос "Очистка папки загрузок, структура базы данных Медиатеки" содержит несколько предложений по плагинам, которые могут быть полезны - хотя и не выполняют в точности то, о чем вы спрашиваете. Но, возможно, эта информация окажется ценной.

14 сент. 2010 г. 20:39:20