Gostaria de oferecer aos meus visitantes a opção de baixar a galeria de fotos inteira (exibida nas páginas dedicadas da [galeria]) como um arquivo ZIP exibido na parte inferior de cada página da galeria. - A imagem em tamanho real deverá ser incluída.
David Walsh deu um código em seu post aqui para compactar arquivos, mas estou tendo problemas para integrá-lo às funções do Wordpress.
Estou ciente de que existe um plug-in de download da galeria NextGEN, mas não estou em posição de usá-lo, pois uso as funções nativas da galeria wordpress.
Uma pergunta semelhante com uma alternativa (método manual) de concluir o acima pode ser encontrada aqui: Plugin para baixar arquivos de mídia anexados?
Qualquer ajuda seria muito apreciada. Obrigado.
Respostas:
Primeiro você precisa obter as imagens. Como obter todas as imagens de uma galeria é descrito aqui .
O WordPress usa duas classes para descompactar arquivos. O PHP foi incorporado
ZipArchive()
(uso, veja David Walsh). E PclZip , você pode encontrar esta classe emwp-admin/includes/class-pclzip.php
. Se você tiver problemas comZipArchive()
a classe PclZip.Agora você só precisa colar os dois juntos. Talvez eu possa postar algum código de exemplo mais tarde, atualmente não estou na minha mesa.
Atualizar
Sua pergunta pode ser dividida em duas partes. O primeiro é obter todas as imagens de uma galeria. O segundo é fechar as imagens e enviar o arquivo zip.
Explicarei apenas a primeira parte, obtendo todas as imagens de uma galeria, porque compactar os arquivos é um pouco offtopic.
Talvez haja outras soluções, mas neste exemplo eu substituo o código de acesso da galeria original por um personalizado para obter as imagens. O motivo é que o WordPress mudou um pouco as galerias na v3.5.
Antes da versão 3.5, as imagens de uma galeria são anexos da postagem. Depois da versão 3.5, as imagens são passadas para o código curto como um atributo. Como o WP3.5 não pode mais obter as imagens anexadas de uma postagem, precisamos buscar a lista nos atributos de código curto. Minha estratégia é substituir o código de acesso original por um código de acesso personalizado, pegar os atributos e chamar o código de acesso original para obter a saída da galeria.
Todas as coisas relacionadas à galeria estão dentro de uma classe. Para criar um arquivo zip, podemos usar outra classe que usa como entrada a saída da classe da galeria. Vamos começar com uma classe e um construtor simples.
Chamaremos o método
get_instance()
posteriormente no plugin com o ganchoplugins_loaded
. No construtor, removemos o código de acesso original e o substituímos por nosso código de acesso personalizadogallery_zip_shortcode()
. Agora precisamos do retorno de chamada de código curtoA primeira coisa nesse método é obter a postagem porque precisamos do ID da postagem. Do que incluímos
wp-includes/media.php
, esse arquivo contém a função de retorno de chamada para o código de acesso da galeria original. Agora, chamamos um método para obter uma matriz com todas as imagens, criar a saída da galeria chamando o retorno de chamada da galeria original, criar um link e anexar o link à saída da galeria. As imagens em si, respectivamente os caminhos para as imagens, são armazenadas na variável de classe$images
, precisamos dessa matriz posteriormente.A variável de classe
$image
mantém uma entrada para cada postagem com uma galeria, para que possamos usar a função na primeira página ou na visualização única. Cada entrada contém uma matriz para cada galeria, porque pode haver mais de uma galeria em cada postagem.O núcleo do plugin é o método para obter as imagens do shortcode.
Inicialmente, decidimos se é uma postagem única ou uma lista de IDs de postagem. Se for uma lista de IDs de postagem, lidamos com uma galeria do WP3.5 +. Depois disso, temos que lidar com o
exclude
atributo Depois de configurar todas as variáveis, podemos finalmente obter as imagens da galeria. As imagens recuperadas serão enviadas para a classe var$images
para uso posterior.Este é o ouro do plugin. Basta configurar uma matriz com argumentos de consulta, obter os anexos
get_posts()
e percorrer os anexos recuperados. Para lidar com tamanhos diferentes, obtemos a imagem do anexo e a faixa do URL. No arquivo anexado, pegamos o caminho e o juntamos ao nome do arquivo.$images
Agora, na matriz, estão todas as imagens e seus caminhos da galeria.Basicamente, sua pergunta é respondida neste momento. Mas você também deseja criar um arquivo zip a partir das imagens. Você pode criar um arquivo zip a partir da matriz
$images
no último método. Mas esse método é chamado sempre que uma galeria é exibida e a criação de um arquivo zip pode demorar um pouco. Talvez ninguém solicite o arquivo zip que você criou aqui, isso é um desperdício de recursos.Como podemos fazer melhor? Você se lembra que eu coloquei todas as imagens na variável de classe
$images
? Podemos usar essa classe var para uma solicitação ajax. Mas uma solicitação ajax é apenas outra carga de página e podemos acessar as imagens somente quando a saída da galeria é criada. Temos que salvar nossas imagens em um local onde possamos acessá-las mesmo após uma solicitação de outra página.Neste exemplo, eu uso uma variável de sessão para armazenar a matriz com imagens. Uma variável de sessão pode ser acessada mesmo após outra página ser recarregada. Para armazenar as imagens, registro um método com o
shutdown
gancho. Depois que o WordPress terminar de renderizar a página, oshutdown
gancho será chamado. Neste ponto, deveríamos ter coletado todas as imagens de todas as galerias exibidas. Simplesmente armazenamos as imagens e podemos acessá-las em uma solicitação ajax.Quando a solicitação ajax é acionada, lembramos a sessão var e criamos um arquivo zip a partir dos dados. Mas este é um tópico pouco interessante para esta pergunta.
Eu criei um repositório no GitHub com o código completo do plugin. Espero que você aponte na direção certa.
fonte
Gosto da ideia do plugin de Ralf poder baixar uma galeria inteira de uma só vez, mas não consegui fazê-la funcionar. Eu vim com uma solução alternativa que funciona para nossos propósitos. O método é substituir a galeria WP nativa pela sua própria, que você coloca no final do
functions.php
arquivo do seu tema E adicionar o seguinte arquivo, nomeadodownload.php
na pasta do tema ativo. Na galeria personalizada, um link sob o arquivo chama o arquivo download.php, que força automaticamente o download do seu arquivo para o disco rígido. Eu testei isso nas versões mais recentes do Chrome, Firefox e Safari e funciona bem. Usaram o tema Twenty Twelve, mas não há razão para que ele não funcione em outros também.a) Adicione o seguinte ao final de
functions.php
. Isso é simplesmente retirado do media.phpb) Copie e cole o seguinte em um arquivo chamado
download.php
no diretório base do tema.c) Não se esqueça de vincular o arquivo na galeria !! Importante!
fonte