it-swarm-pt.tech

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

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 personalizada representando um recurso de imagem (assim, uma única imagem é atribuída como "imagem em destaque" para cada postagem).

Todo o sistema funciona muito bem para a criação de um ativo por vez, mas consome muito tempo. Preciso fazer o "lote" para enviar várias imagens de uma 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 alguns metadados e atribuições de taxonomia personalizada, portanto, deve ser possível atribuir em lote os metadados e a taxonomia durante esse processo de criação de lotes.

Eu pesquisei soluções de pós-criação de XML-RPC (que normalmente não lida com upload/atribuição de imagens) para plugins que puxam arquivos de um diretório de servidor para a biblioteca de mídia (que não cobre pós-criação) 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 este processo, pois requer a primeira etapa de obter os arquivos para o servidor em alguma capacidade temporária, gerando posts baseados nos arquivos. carregado e atribuindo alguns metadados de identificação ao lote inteiro.

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

Idéias?

10
somatic

Existe este plugin: Automatic Featured Image Posts Plugin

Na página do plug-in:

Os Posts com Imagens em Destaque Automáticas criam uma nova postagem com uma Imagem em Destaque sempre que uma imagem é carregada. Por meio da página de configurações de plug-ins, você pode definir a imagem para publicar e atribuir-se a um dos seus outros tipos de postagem personalizados e/ou formatos de postagem.

Basicamente, toda imagem que é 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 é semelhante a essa e permite que você selecione o tipo de postagem, incluindo os tipos de postagem personalizados, os quais deseja atribuir uploads de fotos e o status de publicação desejado.

Screenshot of plugin

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

Para carregar fotos em massa, basta destacar várias fotos na caixa de diálogo "carregar". Estou destacando 8 fotos aqui, mas não vejo razão para que não seja 80 ou 800, a menos que haja limites que eu não conheça no aplicativo de envio de imagens do wordpress.

enter image description here

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 com the_title()

Eu testei localmente e está trabalhando no Wordpress 3.6.

Tenho certeza de que há uma maneira mais robusta ou flexível de realizar isso, mas, neste caso, o plug-in parece fazer exatamente o que você está pedindo, com exceção da atribuição de metadados. Talvez outra pessoa pudesse detalhar essa parte um pouco.

Se você precisasse de conteúdo de postagem gerado dinamicamente, você poderia pelo menos começar com o plug-in e repetir a partir daí. Um pensamento seria usar post-formats ou page-templates para determinar como as postagens são exibidas.

Nota: Certifique-se de ter todos os seus image_sizes definidos em functions.php. Eu odiaria ter que desfazer/excluir 10.000 fotos ou executar uma "miniatura regenerada" extremamente longa só porque esqueci ou alterei o tamanho da imagem!

5
timshutes

Este script é uma prova de conceito (testado e funcionando), não é um plugin e foi feito para ser hackeado, ele assume algumas coisas:

  1. Ele usa wp_insert_post por isso é aconselhável que você não o conecte em nenhum hook de administrador, então apenas execute-o uma vez!
  2. As imagens devem estar na pasta wp-content\uploads, mudando isso exigiria mais aros para pular. O exemplo usa uma pasta personalizada chamada \images na pasta de uploads, você pode alterar essa parte.
  3. Ele não faz nenhuma verificação de erros, eu só testei em uma pasta com 20 imagens, então os resultados podem variar :)

O código abaixo irá percorrer a pasta wp-content\uploads\images e criar um título com base no nome da imagem que está sendo anexada a ele. Você provavelmente quer mudar isso para algo melhor ou possível inserir metadados usando outros dados que você tem (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 mais de alguns milhares de imagens, você provavelmente teria mais facilidade em usar:

5
Wyck

O "Limpar pasta de uploads, estrutura do db da Biblioteca de Mídia" Question tem algumas sugestões de plugins que podem estar relacionadas - embora não exatamente o que você está fazendo. Mas talvez a informação seja útil.

1
hakre