Ich möchte meinen Besuchern die Möglichkeit bieten, die gesamte Fotogalerie (auf dedizierten [Galerie] -Seiten) als ZIP-Datei herunterzuladen, die am unteren Rand jeder Galerieseite angezeigt wird. - Das Bild in voller Größe muss enthalten sein.
David Walsh hat in seinem Beitrag hier einen Code angegeben , um Dateien zu komprimieren, aber ich habe Probleme, diesen Code in Wordpress-Funktionen zu integrieren.
Ich bin mir bewusst, dass es ein NextGEN-Galerie-Download-Plugin gibt, aber ich bin nicht in der Lage, dieses zu verwenden, da ich die nativen WordPress-Galerie-Funktionen verwende.
Eine ähnliche Frage mit einer Alternative (manuelle Methode) zum Ausfüllen der oben genannten Informationen finden Sie hier: Plugin zum Herunterladen angehängter Mediendateien?
Jede Hilfe wäre sehr dankbar. Vielen Dank.
Antworten:
Zuerst müssen Sie die Bilder bekommen. Wie Sie alle Bilder einer Galerie erhalten, wird hier beschrieben .
WordPress verwendet zwei Klassen zum Entpacken von Dateien. Das PHP ist eingebunden
ZipArchive()
(Verwendung siehe David Walsh). Und PclZip , Sie können diese Klasse in findenwp-admin/includes/class-pclzip.php
. Wenn Sie Probleme mitZipArchive()
der PclZip-Klasse haben, versuchen Sie es.Jetzt musst du nur noch beides zusammenkleben. Vielleicht kann ich später einen Beispielcode posten, zur Zeit bin ich nicht an meinem Schreibtisch.
Aktualisieren
Ihre Frage kann in zwei Teile geteilt werden. Die erste Methode ruft alle Bilder aus einer Galerie ab. Der zweite ist das Zippen der Bilder und das Senden der Zip-Datei.
Ich werde nur den ersten Teil erläutern, in dem alle Bilder einer Galerie angezeigt werden, da das Komprimieren der Dateien nicht immer aktuell ist.
Vielleicht gibt es andere Lösungen, aber in diesem Beispiel ersetze ich den ursprünglichen Galerie-Shortcode durch einen benutzerdefinierten, um die Bilder zu erhalten. Der Grund ist, dass WordPress die Galerien in v3.5 ein wenig verändert hat.
Vor 3.5 sind die Bilder für eine Galerie Anhänge des Beitrags. Nach 3.5 werden die Bilder als Attribut an den Shortcode übergeben. Da wir in WP3.5 die angehängten Bilder eines Posts nicht mehr erhalten können, müssen wir die Liste aus den Shortcode-Attributen abrufen. Meine Strategie besteht darin, den ursprünglichen Shortcode durch einen benutzerdefinierten Shortcode zu ersetzen, die Attribute zu erfassen und den ursprünglichen Shortcode aufzurufen, um die Galerieausgabe zu erhalten.
Alle galeriebezogenen Dinge gehören zu einer Klasse. Um eine zip-Datei zu erstellen, können wir eine andere Klasse verwenden, die die Ausgabe der Galerieklasse als Eingabe verwendet. Beginnen wir mit einer Klasse und einem einfachen Konstruktor.
Wir werden die Methode
get_instance()
später im Plugin mit dem Hook aufrufenplugins_loaded
. Im Konstruktor entfernen wir den ursprünglichen Shortcode und ersetzen ihn durch unseren benutzerdefinierten Shortcodegallery_zip_shortcode()
. Jetzt brauchen wir den Shortcode-RückrufBei dieser Methode müssen Sie zuerst den Beitrag abrufen, da wir die Beitrags-ID benötigen. Als wir enthalten
wp-includes/media.php
, enthält diese Datei die Rückruffunktion für den ursprünglichen Galerie-Shortcode. Nun rufen wir eine Methode auf, um ein Array mit allen Bildern zu erhalten, erstellen die Galerie-Ausgabe durch Aufrufen des ursprünglichen Galerie-Rückrufs, erstellen einen Link und hängen den Link an die Galerie-Ausgabe an. Die Bilder selbst bzw. die Pfade zu den Bildern werden in der Klassenvariablen gespeichert$images
, wir brauchen dieses Array später.Die Klassenvariable
$image
enthält einen Eintrag für jeden Beitrag mit einer Galerie, sodass wir die Funktion entweder auf der Startseite oder in der Einzelansicht verwenden können. Jeder Eintrag enthält ein Array für jede Galerie, da jeder Beitrag mehrere Galerien enthalten kann.Der Kern des Plugins ist die Methode, um die Bilder aus dem Shortcode zu erhalten.
Zuerst entscheiden wir, ob es sich um einen einzelnen Beitrag oder eine Liste von Beitrags-IDs handelt. Wenn es sich um eine Liste mit Beitrags-IDs handelt, wird eine Galerie ab WP3.5 + verarbeitet. Danach müssen wir das
exclude
Attribut behandeln. Nachdem wir alle Variablen eingerichtet haben, können wir endlich die Bilder aus der Galerie bekommen. Die abgerufenen Bilder werden$images
zur späteren Verwendung in die Klasse var verschoben .Das ist das Gold des Plugins. Richten Sie einfach ein Array mit Abfrageargumenten ein, rufen Sie die Anhänge mit ab
get_posts()
und gehen Sie über die abgerufenen Anhänge. Um mit unterschiedlichen Größen umgehen zu können, erhalten wir das angehängte Bild und den URL-Streifen. Aus der angehängten Datei nehmen wir den Pfad und fügen ihn mit dem Dateinamen zusammen. Im Array$images
befinden sich nun alle Bilder und deren Pfade aus der Galerie.Grundsätzlich ist Ihre Frage an dieser Stelle beantwortet. Sie möchten aber auch eine Zip-Datei aus den Bildern erstellen. Sie können mit
$images
der letzten Methode eine Zip-Datei aus dem Array erstellen . Diese Methode wird jedoch jedes Mal aufgerufen, wenn eine Galerie angezeigt wird und das Erstellen einer ZIP-Datei eine Weile dauern kann. Vielleicht würde niemand die hier erstellte Zip-Datei anfordern, dies ist eine Verschwendung von Ressourcen.Wie können wir es besser machen? Erinnerst du dich, dass ich alle Bilder in die Klassenvariable gestellt habe
$images
? Wir können diese Klassenvariable für eine Ajax-Anfrage verwenden. Eine Ajax-Anfrage ist jedoch nur ein weiterer Seitenaufruf, und wir können nur dann auf die Bilder zugreifen, wenn die Ausgabe der Galerie erstellt wird. Wir müssen unsere Bilder an einem Ort speichern, auf den wir auch nach einer erneuten Seitenanforderung zugreifen können.In diesem Beispiel verwende ich eine Sitzungsvariable, um das Array mit Bildern zu speichern. Auf eine Sitzungsvariable kann auch nach einem erneuten Laden der Seite zugegriffen werden. Um die Bilder zu speichern, registriere ich eine Methode mit dem
shutdown
Haken. Nachdem WordPress das Rendern der Seite beendet hat, wird dershutdown
Hook aufgerufen. Zu diesem Zeitpunkt sollten wir alle Bilder aus allen angezeigten Galerien gesammelt haben. Wir speichern einfach die Bilder und können auf sie in einer Ajax-Anfrage zugreifen.Wenn die Ajax-Anforderung ausgelöst wird, rufen wir die Sitzungsvariable auf und erstellen aus den Daten eine ZIP-Datei. Aber das ist ein bisschen unangebrachtes Thema für diese Frage.
Ich habe auf GitHub ein Repository mit dem kompletten Plugin-Code erstellt. Ich hoffe, es weist Sie in die richtige Richtung.
quelle
Ich mag die Idee von Ralfs Plugin, eine ganze Galerie auf einmal herunterladen zu können, aber ich habe es nicht geschafft, sie zum Laufen zu bringen. Ich habe eine Problemumgehung gefunden, die für unsere Zwecke funktioniert. Die Methode besteht darin, die native WP-Galerie durch Ihre eigene zu ersetzen, die Sie am Ende der
functions.php
Datei Ihres Themas platzieren, UND die folgende Datei hinzuzufügen, diedownload.php
im aktiven Themenordner benannt ist. In der benutzerdefinierten Galerie ruft ein Link unter der Datei die Datei download.php auf, die automatisch den Download Ihrer Datei auf die Festplatte erzwingt. Ich habe dies auf den neuesten Chrome-, Firefox- und Safari-Versionen getestet und es funktioniert einwandfrei. Habe Twenty Twelve Theme benutzt, aber keinen Grund warum es nicht auch bei anderen funktionieren sollte.a) Fügen Sie am Ende von Folgendes hinzu
functions.php
. Dies wird einfach aus media.php entnommenb) Kopieren Sie das Folgende und fügen Sie es in eine Datei ein,
download.php
die im Basisverzeichnis des Themas aufgerufen wird .c). Vergiss nicht, auf die Datei in der Galerie zu verlinken !! Wichtig!
quelle