Como posso fazer upload em massa de imagens e criar postagens automaticamente para cada uma ao mesmo tempo?

10

Eu sei como fazer upload de várias imagens em uma postagem existente, mas esse é um cenário diferente. Isso é para um grande catálogo de ativos, com cada postagem do tipo pós-representação personalizada representando um ativo de imagem (portanto, uma única imagem é atribuída como a "imagem em destaque" de cada postagem).

Todo o sistema funciona muito bem na criação de ativos de uma vez, mas consome muito tempo. Eu preciso ser capaz de "enviar em lote" várias imagens de uma só vez, criar uma nova postagem para cada imagem e anexar a imagem à nova postagem como "imagem em destaque".

Não haverá conteúdo de texto inserido para cada postagem - apenas algumas metadados e atribuições de taxonomia personalizadas, portanto, será possível atribuir em lote os metadados e a taxonomia durante esse processo de criação de lotes.

Pesquisei soluções desde a criação posterior de XML-RPC (que normalmente não lida com o upload / atribuição de imagens) até plugins que extraem arquivos de um diretório de servidor para a biblioteca de mídia (que não cobre a criação posterior) e jquery vários arquivos uploaders (que basicamente apenas despejam arquivos em um diretório).

Eu sou relativamente versado em php, tendo construído plugins e temas, mas estou perplexo em como lidar com esse processo, pois exige a primeira etapa de obter os arquivos para o servidor com alguma capacidade temporária, gerando postagens com base nos arquivos carregado e atribuindo alguns metadados de identificação ao lote inteiro.

Espero que isso possa ser feito em um painel de administração personalizado, mas se eu tiver que fazer isso fora do wp-admin, tudo bem também ...

Ideias?

somático
fonte
Você já encontrou uma resposta para isso? Isso seria perfeito para mim ...
Eu fiz ... mas o cenário evoluiu para um plugin de estrutura inteiro para o projeto. Não é uma resposta curta específica - eu teria que documentar o fluxo de várias funções e ganchos que todos juntos realizam isso.
Sommatic
11
Em resumo, na verdade, fiz um processo de duas etapas, por razões editoriais não fazia sentido gerar postagens para tudo o que um usuário carregou. Em vez disso, o usuário carrega todas as imagens em uma única postagem "em lote" como anexos a essa postagem única. Em seguida, o lote é revisado e cada anexo é aceito / rejeitado - e uma vez que a postagem "em lote" é realmente publicada, uma rotina de salvamento personalizada pega cada anexo aceito e usa wp_insert_post () para criar uma postagem com apenas esse anexo único como destaque. imagem.
Sommatic
Também uma duplicata: wordpress.stackexchange.com/questions/55616/...
Anoop Chandrika HarisudhanNair
Como você está adicionando os metadados, como as imagens estão relacionadas aos dados?
21913 Wyck

Respostas:

5

Existe este plugin: Automatic Featured Image Posts Plugin

Na página do plug-in:

As postagens automáticas de imagens em destaque criam uma nova postagem com uma imagem em destaque sempre que uma imagem é carregada. Por meio da página de configurações do plug-in, você pode definir a imagem para publicar e atribuir-se a um dos outros tipos de postagem personalizados existentes e / ou formatos de postagem.

Basicamente, toda imagem carregada gera uma postagem (do tipo de postagem escolhido) e é definida como a imagem em destaque dessa postagem.

Eu instalei isso na minha máquina local. A página de configurações tem esta aparência e permite selecionar a qual tipo de postagem, incluindo tipos personalizados, você deseja atribuir uploads de fotos e a qual status de publicação você deseja.

Captura de tela do plugin

Para colocar o plug-in em prática - navegue até o tipo de postagem escolhido, abra uma nova postagem e faça o upload da mídia.

Para fazer upload em massa de fotos, basta realçar várias fotos na caixa de diálogo "upload". Estou destacando 8 fotos aqui, mas não vejo razão para que não possa ser 80 ou 800, a menos que haja limites que eu não conheça no carregador de imagens wordpress.

insira a descrição da imagem aqui

Os títulos das postagens são definidos pelos nomes dos arquivos de imagem. Você deve poder trabalhar com isso e chamá-los em seu tema comthe_title()

Eu testei localmente e está funcionando no Wordpress 3.6.

Tenho certeza de que existe uma maneira mais robusta ou flexível de fazer isso, mas nesse caso, o plug-in parece fazer exatamente o que você está perguntando, com a exceção de atribuir metadados. Talvez alguém mais possa fazer essa parte um pouco.

Se você precisava de conteúdo de postagem gerado dinamicamente, pelo menos poderia começar com o plug-in e iterar a partir daí. Um pensamento seria o uso de formatos de postagem ou modelos de página para determinar como as postagens são exibidas.

Nota: Verifique se todos os seus image_sizes estão configurados em functions.php. Eu odiaria ter que desfazer / excluir 10.000 fotos ou executar uma "miniatura de regeneração" extremamente longa só porque esqueci ou alterei o tamanho da imagem!

timshutes
fonte
você deve comentar quando fizer um voto negativo - seria muito mais útil para melhorar a qualidade do site.
timshutes
5

Este script é uma prova de conceito (testado e funcionando), não é um plug-in e deve ser hackeado, pressupõe algumas coisas:

  1. Ele é usado, wp_insert_postportanto, é aconselhável que você não o conecte a nenhum gancho de administrador; basta executá-lo uma vez!
  2. As imagens devem estar na wp-content\uploadspasta, alterar isso exigiria mais argolas para passar. O exemplo usa uma pasta personalizada chamada \imagesna pasta de uploads. Você pode alterar esta parte.
  3. Ele não realiza nenhuma verificação de erro, apenas o testei em uma pasta com 20 imagens para que os resultados possam variar :)

O código abaixo irá percorrer a wp-content\uploads\imagespasta e criar um título de postagem com base no nome da imagem anexada. Você provavelmente deseja alterar isso para algo melhor ou possível inserir metadados usando outros dados que você possui (talvez 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 );
    }   
}

Para algo além de alguns milhares de imagens, você provavelmente teria mais facilidade usando:

Wyck
fonte
Ele continua adicionando imagens redimensionadas de volta à pasta upload / images e, para isso, gera uma nova postagem. O processo tornou-se recursivo. Antes de remover a função, foram criadas quase 800 postagens. Novos tamanhos gerados devem ser feitos em local de mídia wp regular.
precisa saber é o seguinte