Je voudrais offrir à mes visiteurs la possibilité de télécharger l'intégralité de la galerie de photos (affichée sur les pages [galerie] dédiées) sous forme de fichier ZIP affiché au bas de chaque page de la galerie. - L'image en taille réelle devra être incluse.
David Walsh a donné du code dans son article ici pour compresser les fichiers, mais j'ai du mal à l'intégrer aux fonctions Wordpress.
Je suis conscient qu'il existe un plugin de téléchargement de galerie NextGEN mais je ne suis pas en mesure de l'utiliser car j'utilise les fonctions natives de la galerie wordpress.
Une question similaire avec une alternative (méthode manuelle) pour compléter ce qui précède peut être trouvée ici: Plugin pour télécharger les fichiers multimédias joints?
Toute aide serait grandement appréciée. Merci.
Réponses:
Vous devez d'abord obtenir les images. Comment obtenir toutes les images d'une galerie est décrit ici .
WordPress utilise deux classes pour décompresser les fichiers. PHP bilt in
ZipArchive()
(utilisation voir David Walsh). Et PclZip , vous pouvez trouver cette classe danswp-admin/includes/class-pclzip.php
. Si vous avez des problèmes avecZipArchive()
la classe PclZip.Il ne vous reste plus qu'à coller les deux ensemble. Je peux peut-être poster un exemple de code plus tard, actuellement je ne suis pas à mon bureau.
Mise à jour
Votre question peut être divisée en deux parties. Le premier obtient toutes les images d'une galerie. Le second zippe les images et envoie le fichier zip.
Je vais seulement expliquer la première partie, obtenir toutes les images d'une galerie, car la fermeture éclair des fichiers est légèrement hors sujet.
Il existe peut-être d'autres solutions, mais dans cet exemple, je remplace le shortcode de la galerie d'origine par un personnalisé pour obtenir les images. La raison en est que WordPress a un peu changé les galeries en v3.5.
Avant la 3.5, les images d'une galerie sont des pièces jointes de l'article. Après 3.5, les images sont transmises au shortcode en tant qu'attribut. Depuis WP3.5, nous ne pouvons plus obtenir les images jointes d'un message, nous devons récupérer la liste à partir des attributs de shortcode. Ma stratégie consiste à remplacer le shortcode d'origine par un shortcode personnalisé, récupérer les attributs et appeler le shortcode d'origine pour obtenir la sortie de la galerie.
Toutes les choses liées à la galerie sont dans une classe. Pour créer un fichier zip, nous pouvons utiliser une autre classe qui prend en entrée la sortie de la classe gallery. Commençons par une classe et un constructeur simple.
Nous appellerons la méthode
get_instance()
plus tard dans le plugin avec le hookplugins_loaded
. Dans le constructeur, nous supprimons le shortcode d'origine et le remplaçons par notre shortcode personnaliségallery_zip_shortcode()
. Maintenant, nous avons besoin du rappel de shortcodeLa première chose dans cette méthode est d'obtenir le message car nous avons besoin de l'ID du message. Que nous incluons
wp-includes/media.php
, ce fichier contient la fonction de rappel pour le shortcode de la galerie d'origine. Maintenant, nous appelons une méthode pour obtenir un tableau avec toutes les images, créer la sortie de la galerie en appelant le rappel de la galerie d'origine, créer un lien et ajouter le lien à la sortie de la galerie. Les images elles-mêmes, respectivement les chemins d'accès aux images, sont stockées dans la variable de classe$images
, nous aurons besoin de ce tableau plus tard.La variable de classe
$image
contient une entrée pour chaque article avec une galerie, nous pouvons donc utiliser la fonction en première page ou en vue unique. Chaque entrée contient un tableau pour chaque galerie, car il peut y avoir plus d'une galerie dans chaque publication.Le cœur du plugin est la méthode pour obtenir les images du shortcode.
Dans un premier temps, nous décidons s'il s'agit d'un poste unique ou d'une liste d'ID de poste. S'il s'agit d'une liste d'ID de publication, nous gérons une galerie de WP3.5 +. Après cela, nous devons gérer l'
exclude
attribut. Après avoir configuré toutes les variables, nous pouvons enfin obtenir les images de la galerie. Les images récupérées seront poussées dans la classe var$images
pour une utilisation ultérieure.Ceci est l'or du plugin. Configurez simplement un tableau avec des arguments de requête, récupérez les pièces jointes avec
get_posts()
et parcourez les pièces jointes récupérées. Pour gérer différentes tailles, nous obtenons l'image de la pièce jointe et la bande de l'url. À partir du fichier joint, nous prenons le chemin et le mettons ensemble avec le nom de fichier. Dans le tableau$images
sont maintenant toutes les images et leurs chemins de la galerie.Fondamentalement, votre question reçoit une réponse à ce stade. Mais vous souhaitez également créer un fichier zip à partir des images. Vous pouvez créer un fichier zip à partir du tableau
$images
dans la dernière méthode. Mais cette méthode est appelée à chaque fois qu'une galerie est affichée et la création d'un fichier zip peut prendre un certain temps. Peut-être que personne ne demanderait le fichier zip que vous avez créé ici, c'est un gaspillage de ressources.Comment pouvons-nous faire mieux? Vous souvenez-vous que j'ai mis toutes les images dans la variable de classe
$images
? Nous pouvons utiliser cette classe var pour une requête ajax. Mais une requête ajax n'est qu'un chargement de page supplémentaire et nous ne pouvons accéder aux images que lorsque la sortie de la galerie est créée. Nous devons enregistrer nos images dans un endroit où nous pouvons y accéder même après une autre demande de page.Dans cet exemple, j'utilise une variable de session pour stocker le tableau avec des images. Une variable de session est accessible même après un autre rechargement de page. Pour stocker les images, j'enregistre une méthode avec le
shutdown
crochet. Une fois que WordPress a terminé de rendre la page, leshutdown
crochet sera appelé. À ce stade, nous aurions dû collecter toutes les images de toutes les galeries affichées. Nous stockons simplement les images et pouvons y accéder dans une demande ajax.Lorsque la demande ajax est déclenchée, nous rappelons la session var et créons un fichier zip à partir des données. Mais c'est un peu hors sujet pour cette question.
J'ai créé un référentiel sur GitHub avec le code complet du plugin. J'espère que cela vous indique la bonne direction.
la source
J'aime l'idée que le plugin de Ralf puisse télécharger une galerie entière en une seule fois, mais je n'ai pas pu le faire fonctionner. J'ai trouvé une solution de contournement qui fonctionne pour nos besoins. La méthode consiste à remplacer la galerie WP native par la vôtre que vous placez à la fin du
functions.php
fichier de votre thème ET ajoutez le fichier suivant, nommédownload.php
dans le dossier de thème actif. Dans la galerie personnalisée, un lien sous le fichier appelle le fichier download.php qui force automatiquement le téléchargement de votre fichier sur le disque dur. J'ai testé cela sur les dernières versions de Chrome, Firefox et Safari et cela fonctionne très bien. J'ai utilisé le thème Twenty Twelve, mais aucune raison pour laquelle il ne devrait pas fonctionner sur d'autres.a) Ajoutez ce qui suit à la fin de
functions.php
. Ceci est simplement extrait de media.phpb) Copiez et collez ce qui suit dans un fichier appelé
download.php
dans le répertoire de base du thème.c). N'oubliez pas de créer un lien vers le fichier dans la galerie !! Important!
la source
download.php
et le$_GET
paramètre que je peux télécharger tous les fichiers que je veux à partir de votre dossier Web (également sur les partages réseau), commewp-config.php