Recortar, redimensionar y guardar imágenes de una carpeta a otra en wordpress

3

Estoy agregando una actualización para el complemento de WordPress que he desarrollado hace años. Este complemento es solo un catálogo de productos, así que solo muestre los productos y sus imágenes. Los productos pueden tener más de una imagen.

Estaba cambiando el tamaño de las imágenes en la versión anterior del complemento mediante CSS, asignándoles ancho y alto. Lo que funcionaba pero las imágenes parecían estiradas pero los usuarios estaban felices. Ahora he agregado una nueva función en el complemento que es recortar y redimensionar la imagen cargada y guardarla con un nombre diferente, como un archivo thumbnail.jpg. La nueva función funciona de manera notable para los nuevos usuarios que suben imágenes, pero se trata de usuarios antiguos que se actualizaron a una versión más reciente.

El problema es que los usuarios antiguos ya tienen productos e imágenes. Cuando trato de obtener todos los productos e imágenes a través de foreach loop, funciona perfectamente en 200 - 250 imágenes pero se rompe en más de 250+ imágenes - Sin error :(

Muchos de mis antiguos usuarios tienen más de 600 imágenes, por lo que quiero una forma de recortar y redimensionar las imágenes existentes, guardarlas con un nuevo nombre y guardar los nombres de los archivos en la base de datos.

Estoy usando la función wp_get_image_editor(); predeterminada de wordpress.

Aquí está mi consulta para obtener productos antiguos que tienen imágenes:

$wpc_product_images_sql = "Select wpc_posts.*, wpc_meta.* From " . $wpdb->posts . " As wpc_posts Inner Join " . $wpdb->postmeta . " As wpc_meta On wpc_posts.ID = wpc_meta.post_id Where wpc_meta.meta_key = 'product_images' Order By wpc_posts.post_title;

Y aquí están mis bucles foreach (estoy usando dos bucles. El primero es obtener los productos que tienen imágenes y el segundo es para obtener imágenes de cada publicación, como mencioné anteriormente en mi pregunta que los productos puede tener más de una imagen. Por lo tanto, debe usar dos bucles)

foreach ($wpc_images_qry as $wpc_prod_images) {

                echo '<div class="wpc_image_body">'
                . '<h3>' . $wpc_prod_images->post_title . '</h3>'
                . '<div class="wpc_images">';

                $wpc_post_id = $wpc_prod_images->ID;
                $wpc_product_images = get_post_meta($wpc_post_id, 'product_images', true);

                $big_img_name = array();
                foreach ($wpc_product_images as $wpc_prod_img) {
                    /// For Big
                    $big_resize_img = wp_get_image_editor($wpc_prod_img['product_img']);
                    if (!is_wp_error($big_resize_img)) {
                        $product_big_img = $wpc_prod_img['product_img'];

                        $product_img_explode = explode('/', $product_big_img);
                        $product_img_name = end($product_img_explode);
                        $product_img_name_explode = explode('.', $product_img_name);

                        $product_img_name = $product_img_name_explode[0];
                        $product_img_ext = $product_img_name_explode[1];

                        $big_crop = array('center', 'center');
                        $big_resize_img->resize($wpc_image_width, $wpc_image_height, $big_crop);
                        $big_filename = $big_resize_img->generate_filename('big-' . $wpc_image_width . 'x' . $wpc_image_height, $upload_dir['path'], NULL);
                        $big_resize_img->save($big_filename);

                        $big_img_name[]['wpc_big_img'] = $upload_dir['url'] . '/' . $product_img_name . '-big-' . $wpc_image_width . 'x' . $wpc_image_height . '.' . $product_img_ext;


                        if (file_exists($upload_dir['path'] . '/' . $product_img_name . '-big-' . $wpc_image_width . 'x' . $wpc_image_height . '.' . $product_img_ext)) {

                            echo $upload_dir['path'] . '/' . $product_img_name . '-big-' . $wpc_image_width . 'x' . $wpc_image_height . '.' . $product_img_ext . ' - <strong style="color: #7ad03a;">OK</strong><br>';

                        } else {
                            echo $upload_dir['path'] . '/' . $product_img_name . '-big-' . $wpc_image_width . 'x' . $wpc_image_height . '.' . $product_img_ext . ' <strong style="color: red">:(</strong><br>';
                        }
                    }

                }
                update_post_meta($wpc_post_id, 'wpc_big_images', $big_img_name);

                echo '</div>'
            . '</div>';
            }
    
pregunta Omer 09.07.2015 - 13:52

1 respuesta

0

Si he entendido correctamente, ¿solo quieres que las imágenes más antiguas se actualicen para que sean como las imágenes más nuevas?

Primero haga una copia de seguridad de sus datos , pero si he entendido , simplemente vuelva a crear sus conjuntos de imágenes con un complemento como Regenerar miniaturas debería hacer el truco.

¡Prueba esto en una copia de desarrollo de tu sitio!

    
respondido por el Andy Macaulay-Brook 21.07.2016 - 13:06

Lea otras preguntas en las etiquetas