wp_insert_attachment -> wp_generate_attachment_metadata - Bild wird doppelt angelegt

  • Hallo liebe Wordpress Gemeinde,

    ich habe folgendes Problem, ich möchte ein Bild als Attachment eines Posts anlgene, was ja folgenermaßen geht:

    PHP
    wp_insert_attachment( $attachment, $filename, $parent_post_id );

    Nun braucht man ja auch die verschiedenen Größen der Bilder um diese dann ordentlich darzusetellen, das geht ja damit:

    PHP
    / 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.

    Einmal editiert, zuletzt von Surfer_xD (22. August 2014 um 14:16)

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!