Для обрезки фотографий с использованием Advanced Custom Fields (ACF) в WordPress можно воспользоваться дополнительным плагином или написать собственную функцию.
1. Использование дополнительного плагина:
- Установите и активируйте плагин "Image Crop";
- Создайте поле типа "изображение" при помощи ACF;
- В настройках поля задайте необходимые параметры, такие как ширина и высота обрезанного изображения;
- Оберните код вывода поля с изображением в функцию "ic_image()" для автоматической обрезки изображения.
2. Написание собственной функции:
- В functions.php вашей темы или в файле, подключаемом в functions.php, добавьте следующий код:
function custom_image_resize($image_id, $width, $height, $crop = false) { $image = wp_get_attachment_image_src($image_id, 'full'); $image_url = $image[0]; $upload_dir = wp_upload_dir(); $image_path = str_replace($upload_dir['baseurl'], $upload_dir['basedir'], $image_url); $image_info = getimagesize($image_path); $image_width = $image_info[0]; $image_height = $image_info[1]; $image_ratio = $image_width / $image_height; $new_ratio = $width / $height; if ($image_ratio >= $new_ratio) { $resize_width = $width; $resize_height = round($width / $image_ratio); $src_x = 0; $src_y = round(($resize_height - $height) / 2); } else { $resize_width = round($height * $image_ratio); $resize_height = $height; $src_x = round(($resize_width - $width) / 2); $src_y = 0; } $resized = imagecreatetruecolor($width, $height); $source = imagecreatefromjpeg($image_path); imagecopyresampled($resized, $source, 0, 0, $src_x, $src_y, $width, $height, $resize_width, $resize_height); $new_image_path = $image_path . '-' . $width . 'x' . $height . '.jpg'; imagejpeg($resized, $new_image_path); imagedestroy($resized); imagedestroy($source); $new_image_url = str_replace($upload_dir['basedir'], $upload_dir['baseurl'], $new_image_path); return $new_image_url; }
- Затем, в коде, где вы выводите поле с изображением, вызовите эту функцию, передав в нее ID изображения, а также необходимые для обрезки параметры, например:
$image_id = get_field('image_field'); $image_url = custom_image_resize($image_id, 500, 300, true); echo '<img src="' . $image_url . '" alt="">';
Где 500
и 300
- это желаемые ширина и высота обрезанного изображения соответственно, а true
- это параметр, определяющий, нужно ли обязательно обрезать изображение до указанных размеров.
В результате выполнения данного кода будет выведено обрезанное изображение, соответствующее указанным размерам, вместо исходного изображения. Обратите внимание, что данная функция работает только с изображениями в формате JPEG.