WordPress – Programmatisches Hinzufügen von Produkten, die keine Miniaturansichten generieren

Lesezeit: 3 Minuten

Benutzer-Avatar
Daniel

Ich erstelle einen benutzerdefinierten CSV-Importer für einen Kunden und die Bilder werden hinzugefügt, aber die Miniaturansichten werden nicht richtig generiert. Nach der Verwendung eines Plugins wie Regenerate Thumbnails werden sie korrekt angezeigt.

Hier ist der Code, in dem ich den Anhang hinzufüge und mit dem Beitrag verlinke.

    $uploadDir="wp-content/uploads/importedproductimages/";
    $siteurl = get_option('siteurl');
    $thumbnail="importedproductimages/" . $name;
    $filename="importedproductimages/" . $name;
    $wp_filetype = wp_check_filetype($filename, null);
    $attachment = array(
                'post_author' => 1, 
                'post_date' => current_time('mysql'),
                'post_date_gmt' => current_time('mysql'),
            'post_mime_type' => $wp_filetype['type'],
            'post_title' => $filename,
                'comment_status' => 'closed',
                'ping_status' => 'closed',
            'post_content' => '',
            'post_status' => 'inherit',
                'post_modified' => current_time('mysql'),
                'post_modified_gmt' => current_time('mysql'),
                'post_parent' => $post_id,
                'post_type' => 'attachment',
                'guid' => $siteurl."https://stackoverflow.com/".$uploadDir.$name
    );

    $attach_id = wp_insert_attachment( $attachment, $filename, $post_id );
    $attach_data = wp_generate_attachment_metadata( $attach_id, $thumbnail );
    wp_update_attachment_metadata( $attach_id, $attach_data );

    // add featured image to post
    add_post_meta($post_id, '_thumbnail_id', $attach_id);

Warum werden die Thumbnails nicht richtig generiert? Danke im Voraus.

BEARBEITEN:

Ich habe auch image.php wie folgt eingefügt:

require_once(ABSPATH . 'wp-admin/includes/image.php');

  • Wenn Sie sagen, dass es nicht richtig generiert wird, was meinen Sie genau? nicht die richtige Größe? gar nicht angezeigt?

    – dano

    6. November 2014 um 16:08 Uhr

Das hat am Ende für mich funktioniert:

            function createnewproduct($product)
        {


            $new_post = array(
                'post_title' => $product['Product'],
                'post_content' => $product['Long_description'],
                'post_status' => 'publish',
                'post_type' => 'product'
            );

            $skuu = $product['SKU'];
            $post_id = wp_insert_post($new_post);
            update_post_meta($post_id, '_sku', $skuu );
            update_post_meta( $post_id, '_regular_price', $product['ourPrice'] );
            update_post_meta( $post_id, '_manage_stock', true );
            update_post_meta( $post_id, '_stock', $product['Qty'] );
            update_post_meta( $post_id, '_weight', $product['Weight'] );
            if (((int)$product['Qty']) > 0) {
                update_post_meta( $post_id, '_stock_status', 'instock');
            }


            $dir = dirname(__FILE__);
            $imageFolder = $dir.'/../import/';
            $imageFile   = $product['ID'].'.jpg';
            $imageFull = $imageFolder.$imageFile;

            // only need these if performing outside of admin environment
            require_once(ABSPATH . 'wp-admin/includes/media.php');
            require_once(ABSPATH . 'wp-admin/includes/file.php');
            require_once(ABSPATH . 'wp-admin/includes/image.php');

            // example image
            $image="http://localhost/wordpress/wp-content/import/".$product['ID'].'.jpg';

            // magic sideload image returns an HTML image, not an ID
            $media = media_sideload_image($image, $post_id);

            // therefore we must find it so we can set it as featured ID
            if(!empty($media) && !is_wp_error($media)){
                $args = array(
                    'post_type' => 'attachment',
                    'posts_per_page' => -1,
                    'post_status' => 'any',
                    'post_parent' => $post_id
                );

                // reference new image to set as featured
                $attachments = get_posts($args);

                if(isset($attachments) && is_array($attachments)){
                    foreach($attachments as $attachment){
                        // grab source of full size images (so no 300x150 nonsense in path)
                        $image = wp_get_attachment_image_src($attachment->ID, 'full');
                        // determine if in the $media image we created, the string of the URL exists
                        if(strpos($media, $image[0]) !== false){
                            // if so, we found our image. set it as thumbnail
                            set_post_thumbnail($post_id, $attachment->ID);
                            // only want one image
                            break;
                        }
                    }
                }
            }
        }

  • Wenn Sie ein Bild von der Seite laden, durchläuft es meines Erachtens nicht den normalen Prozess zum Erstellen aller Zwischenminiaturansichten. Das image_make_intermediate_size() Funktion könnte hilfreich sein.

    – Helgathewikinger

    4. November 2014 um 8:27 Uhr

Alte Frage, die ich kenne, aber diese tauchte bei meiner Suche nach der Antwort bei Google auf, und es gibt eine bessere Möglichkeit, die Miniaturansichten sowie alle anderen benötigten Bildgrößen zu generieren: wp_generate_attachment_meta. Wird in zwei Zeilen verwendet:

$attach_data = wp_generate_attachment_metadata( $attach_id, $filename );
wp_update_attachment_metadata( $attach_id,  $attach_data );

Dadurch werden ALLE Bildgrößen, einschließlich Miniaturansichten, aktualisiert, wenn eine Anhangs-ID angegeben wird.

1362680cookie-checkWordPress – Programmatisches Hinzufügen von Produkten, die keine Miniaturansichten generieren

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy