Как обрезать фотографии с acf?

Для обрезки фотографий с использованием 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.