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


10

Я знаю, как загрузить несколько изображений в существующий пост, но это другой сценарий. Это для большого каталога ресурсов, где каждая пользовательская публикация пост-типа представляет актив изображения (таким образом, одно изображение назначается как «рекомендуемое изображение» для каждой публикации).

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

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

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

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

Я надеюсь, что это можно сделать в пользовательской панели администратора, но если мне нужно сделать это вне wp-admin, это тоже хорошо ...

Идеи?


Вы когда-нибудь нашли ответ на это? Это было бы идеально для меня ...

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

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


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

Ответы:


5

Есть этот плагин: Автоматический плагин постов избранного изображения

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

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

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

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

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

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

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

введите описание изображения здесь

Заголовки сообщений задаются именами файлов изображений. Вы должны быть в состоянии работать с этим и назвать их в своей теме сthe_title()

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

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

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

Примечание: убедитесь, что все ваши image_sizeнастройки установлены в functions.php. Я не хотел бы отменить / удалить 10000 фотографий или запустить очень длинные «регенерированные эскизы» только потому, что я забыл или изменил размер изображения!


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

5

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

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

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

function WPSE_1595_image_post() {

    // We need to use the default uploads dir
    $wp_upload_dir =  wp_upload_dir();
    // The actual folder
    $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);

        //Customize this post data as you wish
        $my_post_data = array(
            'post_title' => $image_name,
            'post_type' => 'post',
            'post_category' => array('1'),
            'post_author'   => 1,
            'post_status' => 'publish'
        );

        // We need the ID for the attachment
        $post_id = wp_insert_post($my_post_data);

        $wp_filetype = wp_check_filetype($image_base, null );

         //Customize this attachment data as you wish
        $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 );
    }   
}

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


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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.