我正在为很久以前开发的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>';
}
答案 0 :(得分:0)
您可以尝试添加新的图片尺寸 add_image_size() 然后跑 https://wordpress.org/plugins/regenerate-thumbnails/ 肯定有解决超时问题的方法。 有一种方法可以在更新时为插件用户显示消息,如果他们有旧图像,请让他们安装并运行插件。
希望对你有用。