Обрезка, изменение размера и сохранение изображений из одной папки в другую в WordPress

Я добавляю обновление для плагина WordPress, которое я разработал много лет назад. Этот плагин представляет собой просто каталог товаров, поэтому просто покажите товары и их изображения. Продукты могут иметь более одного изображения.

Я изменял размеры изображений в старой версии плагина с помощью CSS, назначая им ширину и высоту. Который работал, но изображения выглядят растянутыми, но пользователи были счастливы. Теперь я добавил новую функцию в плагин, которая заключается в том, чтобы обрезать и изменить размер загруженного изображения и сохранить его под другим именем, например, thumbnail.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>';
            }

2 ответа

Если вы хотите изменить размер изображения, значит, следуйте этому, он изменяет размер вашего изображения при каждой загрузке изображения в медиа,

add_filter('wp_handle_upload_prefilter','aj_handle_upload');

function aj_handle_upload($file)
{

    add_image_size( 'mobile', 360, 0, array( 'center', 'center' ));//mobile is userdefined name.    
    add_image_size( 'desktop', 700, 0, array( 'center', 'center' ));//desktop & tablet is user defined name.    
    return $file;
}

Вы можете попробовать добавить новый размер изображения с помощью add_image_size(), а затем запустить https://wordpress.org/plugins/regenerate-thumbnails/ что, безусловно, имеет решение проблемы тайм-аута. Существует способ отобразить сообщение для пользователей вашего плагина после обновления, попросить их установить и запустить плагин, если у них есть старые образы.

Надеюсь, что это работает для вас.

Другие вопросы по тегам