Me gustaría ofrecer a mis visitantes la opción de descargar toda la galería de fotos (que se muestra en páginas dedicadas [galería]) como un archivo ZIP que se muestra en la parte inferior de cada página de la galería. - La imagen a tamaño completo tendrá que ser incluida.
David Walsh ha dado un código en su publicación aquí para comprimir archivos, pero tengo problemas para integrarlo con las funciones de Wordpress.
Soy consciente de que hay un complemento de descarga de la galería NextGEN, pero no estoy en condiciones de usarlo, ya que utilizo las funciones nativas de la galería de WordPress.
Aquí puede encontrar una pregunta similar con una alternativa (método manual) para completar lo anterior: ¿ Complemento para descargar archivos multimedia adjuntos?
Cualquier ayuda sería muy apreciada. Gracias.
Respuestas:
Primero tienes que obtener las imágenes. Aquí se describe cómo obtener todas las imágenes de una galería .
WordPress usa dos clases para descomprimir archivos. El PHP bilt in
ZipArchive()
(uso ver David Walsh). Y PclZip , puedes encontrar esta clase enwp-admin/includes/class-pclzip.php
. Si tienes problemas conZipArchive()
probar la clase PclZip.Ahora solo tienes que pegar ambos juntos. Tal vez pueda publicar un código de muestra más tarde, actualmente no estoy en mi escritorio.
Actualizar
Su pregunta se puede dividir en dos partes. El primero es obtener todas las imágenes de una galería. El segundo es comprimir las imágenes y enviar el archivo zip.
Solo explicaré la primera parte, obtener todas las imágenes de una galería, porque comprimir los archivos es un poco fuera de tema.
Quizás haya otras soluciones, pero en este ejemplo, reemplazo el shortcode de la galería original por uno personalizado para obtener las imágenes. La razón es que WordPress cambió un poco las galerías en v3.5.
Antes de 3.5, las imágenes de una galería son archivos adjuntos de la publicación. Después de 3.5, las imágenes se pasan al shortcode como un atributo. Desde WP3.5 ya no podemos obtener las imágenes adjuntas de una publicación, tenemos que obtener la lista de los atributos de código corto. Mi estrategia es reemplazar el shortcode original con un shortcode personalizado, tomar los atributos y llamar al shortcode original para obtener la salida de la galería.
Todas las cosas relacionadas con la galería están dentro de una clase. Para crear un archivo zip, podemos usar otra clase que tome como entrada la salida de la clase de la galería. Comencemos con una clase y un constructor simple.
Llamaremos al método
get_instance()
más adelante en el complemento con el ganchoplugins_loaded
. En el constructor, eliminamos el shortcode original y lo reemplazamos con nuestro shortcode personalizadogallery_zip_shortcode()
. Ahora necesitamos la devolución de llamada shortcodeLo primero en este método es obtener la publicación porque necesitamos la ID de la publicación. De lo que incluimos
wp-includes/media.php
, este archivo contiene la función de devolución de llamada para el shortcode de la galería original. Ahora llamamos a un método para obtener una matriz con todas las imágenes, crear la salida de la galería llamando a la devolución de llamada de la galería original, crear un enlace y agregar el enlace a la salida de la galería. Las imágenes en sí, respectivamente, las rutas a las imágenes, se almacenan en la variable de clase$images
, necesitamos esta matriz más adelante.La variable de clase
$image
contiene una entrada para cada publicación con una galería, por lo que podemos usar la función en la página principal o en una vista única. Cada entrada contiene una matriz para cada galería, porque puede haber más de una galería en cada publicación.El núcleo del complemento es el método para obtener las imágenes del shortcode.
Al principio decidimos si es una publicación única o una lista de ID de publicaciones. Si se trata de una lista de ID de publicaciones, manejamos una galería de WP3.5 +. Después de eso, tenemos que manejar el
exclude
atributo. Después de configurar todas las variables, finalmente podemos obtener las imágenes de la galería. Las imágenes recuperadas se insertarán en la clase var$images
para su uso posterior.Este es el oro del complemento. Simplemente configure una matriz con argumentos de consulta, obtenga los archivos adjuntos
get_posts()
y recorra los archivos adjuntos recuperados. Para manejar diferentes tamaños, obtenemos la imagen adjunta y la tira de la url. Desde el archivo adjunto, tomamos la ruta y la juntamos con el nombre del archivo. En la matriz$images
ahora están todas las imágenes y sus patrones de la galería.Básicamente su pregunta es respondida en este punto. Pero también desea crear un archivo zip a partir de las imágenes. Puede crear un archivo zip desde la matriz
$images
en el último método. Pero este método se llama cada vez que se muestra una galería y la creación de un archivo zip puede llevar un tiempo. Quizás nadie solicite el archivo zip que creó aquí, esto es un desperdicio de recursos.¿Cómo podemos hacerlo mejor? ¿Recuerdas que puse todas las imágenes en la variable de clase
$images
? Podemos usar esta clase var para una solicitud ajax. Pero una solicitud ajax es solo otra carga de página y podemos acceder a las imágenes solo cuando se crea la salida de la galería. Tenemos que guardar nuestras imágenes en un lugar donde podamos acceder a ellas incluso después de una solicitud de otra página.En este ejemplo, uso una variable de sesión para almacenar la matriz con imágenes. Se puede acceder a una variable de sesión incluso después de volver a cargar otra página. Para almacenar las imágenes, registro un método con el
shutdown
gancho. Después de que WordPress termine de renderizar la página,shutdown
se llamará al gancho. En este punto, deberíamos haber recopilado todas las imágenes de todas las galerías mostradas. Simplemente almacenamos las imágenes y podemos acceder a ellas en una solicitud ajax.Cuando se activa la solicitud ajax, recuperamos la sesión var y creamos un archivo zip a partir de los datos. Pero esto es un poco fuera de tema para esta pregunta.
Creé un repositorio en GitHub con el código completo del complemento. Espero que te indique la dirección correcta.
fuente
Me gusta la idea del complemento de Ralf para poder descargar una galería completa de una vez, pero no he podido hacer que funcione. Se me ocurrió una solución alternativa que funciona para nuestros propósitos. El método consiste en reemplazar la galería WP nativa con la suya que coloca al final del
functions.php
archivo de su tema Y agregar el siguiente archivo, nombradodownload.php
en la carpeta del tema activo. En la galería personalizada, un enlace debajo del archivo llama al archivo download.php que automáticamente fuerza la descarga de su archivo al disco duro. He probado esto en las últimas versiones de Chrome, Firefox y Safari y funciona bien. He estado usando el tema Twenty Twelve, pero no hay razón para que no funcione en otros también.a) Agregue lo siguiente al final de
functions.php
. Esto simplemente está tomado de media.phpb) Copie y pegue lo siguiente en un archivo llamado
download.php
en el directorio base del tema.C). ¡¡No olvides enlazar al archivo en la galería !! ¡Importante!
fuente
download.php
el$_GET
parámetro y puedo descargar todos los archivos que quiera de su carpeta web (también en recursos compartidos de red), comowp-config.php