Jake Vanderwerf
2025-11-23 d7dbe7fee362d587dfc334135d9581b6216a4295
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
<?php
namespace JVBase\utility;
 
use JVBase\managers\CacheManager;
 
if (!defined('ABSPATH')) {
    exit;
}
/**
 * Validates configuration arrays for content types, taxonomies, and user roles
 * Catches errors early in the registration process
 */
class Image
{
    protected ?CacheManager $cache = null;
 
    public function __construct()
    {
        $this->cache = CacheManager::for('images')->connectTo('post', 'attachment');
    }
 
    public function formatImage(int $ID, string $start = 'tiny', string $replace = 'large', bool $addLink = true, ?string $postSlug = null):string
    {
        $return =  $this->cache->remember(
            ['ID' => $ID, 'start' => $start, 'replace' => $replace],
            function() use ($ID, $start, $replace) {
                $img = wp_get_attachment_image_src($ID, $start);
                if (!$img) {
                    return'';
                }
                $img = $img[0];
 
                $data = $this->getGallerySizes($ID, $replace);
 
 
 
                $alt = get_post_meta($ID, '_wp_attachment_image_alt', true);
                $alt = ($alt=='')? '' : ' alt="'.$alt.'" ';
                return '<img width="100%" height="auto" src="'.$img.'"'.$alt.$data.' loading="lazy" decoding="async">';
            }
        );
 
        $aOpen = $aClose = '';
        if ($addLink) {
            if (!$postSlug) {
                global $post;
                $postSlug = $post->post_name;
            }
 
            $imgPost = get_post($ID);
            if (!$imgPost) {
                return $return;
            }
            $imgSlug = $imgPost->post_name;
            $aOpen = '<a class="open-gallery" target="_blank" rel="nofollow" data-opens="gallery-'.$postSlug.'" data-focus="'.$postSlug.'-'.$imgSlug.'">';
            $aClose = '</a>';
        }
        return $aOpen.$return.$aClose;
    }
 
    public function getGallerySizes(int $ID, string $replace):string
    {
        if (!wp_get_attachment_image_src($ID)) {
            return '';
        }
        if (!has_image_size($replace)) {
            $replace = 'large';
        }
 
        if ($replace == 'large') {
            return 'data-small="' .
                wp_get_attachment_image_src($ID)[0] . '" data-medium="' .
                wp_get_attachment_image_src($ID, 'large')[0] . '" data-full="' .
                wp_get_attachment_image_src($ID, 'full')[0] . '"';
        } elseif ($replace == 'medium') {
            return 'data-small="'.
                wp_get_attachment_image_src($ID, 'large')[0].'" data-medium="'.
                wp_get_attachment_image_src($ID, 'large')[0].'" data-full="'.
                wp_get_attachment_image_src($ID, 'large')[0].'"';
        } elseif ($replace == 'thumbnail') {
            return 'data-small="'.
                wp_get_attachment_image_src($ID, 'medium')[0].'" data-medium="'.
                wp_get_attachment_image_src($ID, 'medium')[0].'" data-full="'.
                wp_get_attachment_image_src($ID, 'medium')[0].'"';
        }
        return '';
    }
}