在WordPress中将图像从一个文件夹裁剪、调整大小和保存到另一个文件夹

时间:2015-07-09 作者:Omer

我正在为我多年前开发的WordPress插件添加一个升级。这个插件只是一个产品目录,所以只需显示产品及其图像。产品可以有多个图像。

我用CSS重新调整了插件旧版本中的图像大小,为它们指定了宽度和高度。这是可行的,但图像看起来很紧张,但用户很高兴。现在,我在插件中添加了一个新功能,可以从上传的图像中裁剪并重新调整大小,然后用不同的名称保存,如缩略图。jpg。这项新功能对于上传图像的新用户来说非常有效,但问题是关于升级到新版本的老用户。

问题是老用户已经有了产品和图像。当我尝试通过foreach 循环,它在200-250幅图像上运行良好,但在250多幅图像上中断-无错误:(

我的许多老用户都有600多张图像,因此我想找到一种方法来裁剪和重新调整现有图像的大小,并使用新名称保存它们,并将文件名保存在数据库中。

我正在使用wordpress的默认设置wp_get_image_editor(); 作用

以下是我的查询,以获取具有图像的旧产品:

$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;
这是我的foreach 循环(我使用两个循环。第一个循环是获取有图像的产品,第二个循环是获取每个帖子的图像,正如我在前面的问题中提到的,产品可以有多个图像。因此必须使用两个循环)

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

1 个回复
SO网友:Andy Macaulay-Brook

如果我理解正确的话,您只想将旧图像升级为新图像?

Back up your data first, 但是if I have understood 然后只需使用如下插件重新制作图像集Regenerate Thumbnails 应该做到这一点。

Test this out on a development copy of your site though!

结束