Ich arbeite an einem Skript, das es einem Client ermöglicht, alle Bilder herunterzuladen, die an Posts innerhalb einer bestimmten benutzerdefinierten Taxonomie angehängt sind und an einem bestimmten Datum veröffentlicht wurden.
Ich habe die neue Admin-Seite erstellt, die eine enthält form
können sie die Taxonomie und das Datum auswählen und dann das Formular absenden.
Das Formular sendet dann an ein Skript, das versucht, alle zu erhalten url
‘s für eine bestimmte Bildgröße (1920px). Bisher lasse ich eine Schleife laufen, um die Beiträge zu erhalten, dann a db
rufen Sie an, um die Anhänge mit Übereinstimmung zu erhalten ID
‘s.
Aber ich stecke ein wenig fest, wie ich die bekommen soll url
‘s dieser Bilder in einem Array, sodass sie vom Benutzer gezippt und heruntergeladen werden können.
Hier ist der Code für das Skript bisher:
(create_zip
Funktion von: http://davidwalsh.name/create-zip-php)
/* creates a compressed zip file */
function create_zip($files = array(),$destination = '',$overwrite = false) {
//if the zip file already exists and overwrite is false, return false
if(file_exists($destination) && !$overwrite) { return false; }
//vars
$valid_files = array();
//if files were passed in...
if(is_array($files)) {
//cycle through each file
foreach($files as $file) {
//make sure the file exists
if(file_exists($file)) {
$valid_files[] = $file;
}
}
}
//if we have good files...
if(count($valid_files)) {
//create the archive
$zip = new ZipArchive();
if($zip->open($destination,$overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true) {
return false;
}
//add the files
foreach($valid_files as $file) {
$zip->addFile($file,$file);
}
//debug
//echo 'The zip archive contains ',$zip->numFiles,' files with a status of ',$zip->status;
//close the zip -- done!
$zip->close();
//check to make sure the file exists
return file_exists($destination);
} else {
return false;
}
}
?>
(Code um die Bilder zu bekommen)
<?php
// get things from the form
$club = $_POST['club'];
$day = $_POST['day'];
$month = $_POST['month'];
$year = $_POST['year'];
// run the loop
$loop = new WP_Query( array(
'post_type' => 'sell_media_item',
'collection' => $club,
'include_children' => false,
'year' => $year,
'monthnum' => $month,
'day' => $day,
'fields' => 'ids',
) );
if ( $post_ids = $loop->get_posts() ) {
$post_ids = implode( ',', $post_ids );
$atts_ids = $wpdb->get_col( "SELECT ID FROM $wpdb->posts WHERE post_parent IN($post_ids) AND post_type="attachment"" );
$images->query( array(
'post_mime_type' =>'image',
'post_status' => 'published',
'post_type' => 'attachment',
'post__in' => $atts_ids,
));
}
//////////////////////////////////////////////
// something here to get the image url's?
/////////////////////////////////////////////
// prep the files to zip
$files_to_zip = array(
'src/to/files.jpg'
);
// zip 'em!
$result = create_zip($files_to_zip,'vip-download.zip');
?>
Irgendwelche Ideen, wie ich dann die URL zu der spezifischen Miniaturbildgröße von 1920px in das Zip-Datei-Array bekomme?
Schau mal hier: stackoverflow.com/questions/9906403/… Das könnte helfen. Wenn die Größe des Bildes ein weiteres Problem darstellt, können Sie entweder Tags für die verschiedenen Größen verwenden, Dateinamenkonventionen verwenden oder gdlib/imagick zum Abrufen der Bildgröße verwenden.
– Sven Schneider
2. September 2013 um 9:19 Uhr
Danke, werde das prüfen. Ich dachte nur, ich könnte vielleicht eine machen
$wpdb
rufen Sie an, um die Bilder aus der Datenbank selbst zu erhalten, da ich jeden Anhang anhand der Post-ID finden kann. Aber wenn ich mir diesen Thread ansehe, muss ich den tatsächlichen Pfad zur Datei und nicht den Link erhalten. Ist dies bei Shared Hosting möglich?– Lukas
3. September 2013 um 10:24 Uhr
Ja. Sie haben immer einen vollständigen Pfad. Ob das “virtuell” ist oder nicht spielt keine Rolle.
– Sven Schneider
3. September 2013 um 13:11 Uhr
@lucas572 Hallo, bitte überprüfe meine Antwort und lass mich wissen, ob es funktioniert;) Ich habe Informationen zur Bildgröße hinzugefügt.
– Gemeinschaft
7. September 2013 um 10:14 Uhr