Hallo liebe Wordpress Gemeinde,
ich habe folgendes Problem, ich möchte ein Bild als Attachment eines Posts anlgene, was ja folgenermaßen geht:
Nun braucht man ja auch die verschiedenen Größen der Bilder um diese dann ordentlich darzusetellen, das geht ja damit:
/ Make sure that this file is included, as wp_generate_attachment_metadata() depends on it. require_once( ABSPATH . 'wp-admin/includes/image.php' );
// Generate the metadata for the attachment, and update the database record. $attach_data = wp_generate_attachment_metadata( $attach_id, $filename ); wp_update_attachment_metadata( $attach_id, $attach_data );
Das Problem hierbei ist, das hier bei generate metadata, wo halt die kleineren Bilder erzeugt werden, das Haupt Bild auch nochmal angelegt wird.
Also so:
main_image -> wp_insert_attachment
wp_generate_attachment_metadata erzeugt:
main_image_size1
main_image_size2
main_image_size3
main_image_size4
main_image_1 -> ist das gleiche bild wie das Hauptbild
Wie kann man das unterbinden?
Ich hatte am ende folgendes vor, ich möchte eine Gallerie alls Attachment anlegen, also lege ich mehrere Bilder als Attachment hinter einen Post und rufe das folgendermaßen ab:
//$number_of_images = -1 ALL IMAGES
function get_attachments_gallery($post_id, $number_of_images = -1){
if ($post->post_name != 'screenshots') return false;
if (!is_numeric($number_of_images)) return false;
if ($post_id === NULL){
$post_id = get_the_ID();
}
$post = get_post($post_id);
$attachments = get_posts( array(
'post_type' => 'attachment',
'posts_per_page' => -1,
'post_parent' => $post->ID,
'exclude' => get_post_thumbnail_id()
) );
foreach ($attachments as $key => $row) {
$post_date[$key] = $row->post_date;
}
array_multisort($post_date, SORT_DESC,$attachments);
$number_of_returned_images = 0;
foreach ($attachments as $attachment){
//hier werden die erzeugten Metabilder ausgefiltert, damit nur die Hauptbilder angezeigt werden
if (!preg_match('@x\d+$@', $attachment->post_name)){
$attachment_ids[]= $attachment->ID;
}
//wp_delete_attachment( $attachment->ID, $force_delete );
$number_of_returned_images++;
if ($number_of_images != -1){
if ($number_of_returned_images >= $number_of_images){
break;
}
}
}
print_r ($attachment_ids);
$attachment_ids = implode(",", $attachment_ids);
$gallery_shortcode = '[gallery columns="5" size="gallery_thumbs" order="DESC" orderby="post_date" include="' .$attachment_ids. '"] ';
$gallery = do_shortcode($gallery_shortcode);
echo $gallery;
}
und Hier kommt das problem
//hier werden die erzeugten Metabilder ausgefiltert, damit nur die Hauptbilder angezeigt werden
if (!preg_match('@x\d+$@', $attachment->post_name)){
$attachment_ids[]= $attachment->ID;
}
daher das das main_image doppelt angelegt wurde, also nicht mit der Post-Größe am ende des post_titles, kommte beim Abrufen dieses Bild auch doppelt vor.
Ich könnte natürlich das Bild auch rausfiltern, würde dieses aber lieber einfach nicht in der Datenbank haben das es ja bei jedem Bild ein unnötigen Datensatz anlegen würde.