WordPress: agregar productos programáticamente sin generar miniaturas

3 minutos de lectura

avatar de usuario
Daniel

Estoy creando un importador CSV personalizado para un cliente y se agregan las imágenes, sin embargo, las miniaturas no se generan correctamente. Después de usar un complemento como Regenerar miniaturas, se muestran correctamente.

Aquí está el código en el que agrego el archivo adjunto y lo vinculo a la publicación.

    $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);

¿Por qué no se generan correctamente las miniaturas? Gracias de antemano.

EDITAR:

También he incluido image.php así:

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

  • cuando dices que no se genera correctamente, ¿a qué te refieres exactamente? no es el tamaño correcto? no se muestra en absoluto?

    – danio

    6 de noviembre de 2014 a las 16:08

Esto terminó funcionando para mí:

            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;
                        }
                    }
                }
            }
        }

  • Cuando carga una imagen, no creo que siga el proceso normal de creación de todas las miniaturas intermedias. los image_make_intermediate_size() función podría ser útil.

    – helgathevikingo

    4 de noviembre de 2014 a las 8:27

Ya sé una vieja pregunta, pero esto apareció en Google en mis búsquedas de la respuesta, y hay una mejor manera de generar las miniaturas, así como cualquier otro tamaño de imagen necesario: wp_generate_attachment_meta. Se utiliza en dos líneas:

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

Esto actualiza TODOS los tamaños de imagen, incluidas las miniaturas, cuando se proporciona una ID de archivo adjunto.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad