feat: Add product images support with WP Media Library integration

- Add WP Media Library integration for product and variation images
- Support images array (URLs) conversion to attachment IDs
- Add images array to API responses (Admin & Customer SPA)
- Implement drag-and-drop sortable images in Admin product form
- Add image gallery thumbnails in Customer SPA product page
- Initialize WooCommerce session for guest cart operations
- Fix product variations and attributes display in Customer SPA
- Add variation image field in Admin SPA

Changes:
- includes/Api/ProductsController.php: Handle images array, add to responses
- includes/Frontend/ShopController.php: Add images array for customer SPA
- includes/Frontend/CartController.php: Initialize WC session for guests
- admin-spa/src/lib/wp-media.ts: Add openWPMediaGallery function
- admin-spa/src/routes/Products/partials/tabs/GeneralTab.tsx: WP Media + sortable images
- admin-spa/src/routes/Products/partials/tabs/VariationsTab.tsx: Add variation image field
- customer-spa/src/pages/Product/index.tsx: Add gallery thumbnails display
This commit is contained in:
Dwindi Ramadhana
2025-11-26 16:18:43 +07:00
parent 909bddb23d
commit f397ef850f
69 changed files with 12481 additions and 156 deletions

View File

@@ -1,26 +1,26 @@
-----BEGIN CERTIFICATE-----
MIIEZTCCAs2gAwIBAgIQF1GMfemibsRXEX4zKsPLuTANBgkqhkiG9w0BAQsFADCB
lzEeMBwGA1UEChMVbWtjZXJ0IGRldmVsb3BtZW50IENBMTYwNAYDVQQLDC1kd2lu
ZG93bkBvYWppc2RoYS1pby5sb2NhbCAoRHdpbmRpIFJhbWFkaGFuYSkxPTA7BgNV
BAMMNG1rY2VydCBkd2luZG93bkBvYWppc2RoYS1pby5sb2NhbCAoRHdpbmRpIFJh
bWFkaGFuYSkwHhcNMjUxMDI0MTAzMTMxWhcNMjgwMTI0MTAzMTMxWjBhMScwJQYD
VQQKEx5ta2NlcnQgZGV2ZWxvcG1lbnQgY2VydGlmaWNhdGUxNjA0BgNVBAsMLWR3
aW5kb3duQG9hamlzZGhhLWlvLmxvY2FsIChEd2luZGkgUmFtYWRoYW5hKTCCASIw
DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALt22AwSay07IFZanpCHO418klWC
KWnQw4iIrGW81hFQMCHsplDlweAN4mIO7qJsP/wtpTKDg7/h1oXLDOkvdYOwgVIq
4dZZ0YUXe7UC8dJvFD4Y9/BBRTQoJGcErKYF8yq8Sc8suGfwo0C15oeb4Nsh/U9c
bCNvCHWowyF0VGY/r0rNg88xeVPZbfvlaEaGCiH4D3BO+h8h9E7qtUMTRGNEnA/0
4jNs2S7QWmjaFobYAv2PmU5LBWYjTIoCW8v/5yRU5lVyuI9YFhtqekGR3b9OJVgG
ijqIJevC28+7/EmZXBUthwJksQFyb60WCnd8LpVrLIqkEfa5M4B23ovqnPsCAwEA
AaNiMGAwDgYDVR0PAQH/BAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMB8GA1Ud
IwQYMBaAFMm7kFGBpyWbJhnY+lPOXiQ0q9c3MBgGA1UdEQQRMA+CDXdvb25vb3cu
bG9jYWwwDQYJKoZIhvcNAQELBQADggGBAHcW6Z5kGZEhNOI+ZwadClsSW+00FfSs
uwzaShUuPZpRC9Hmcvnc3+E+9dVuupzBULq9oTrDA2yVIhD9aHC7a7Vha/VDZubo
2tTp+z71T/eXXph6q40D+beI9dw2oes9gQsZ+b9sbkH/9lVyeTTz3Oc06TYNwrK3
X5CHn3pt76urHfxCMK1485goacqD+ju4yEI0UX+rnGJHPHJjpS7vZ5+FAGAG7+r3
H1UPz94ITomyYzj0ED1v54e3lcxus/4CkiVWuh/VJYxBdoptT8RDt1eP8CD3NTOM
P0jxDKbjBBCCCdGoGU7n1FFfpG882SLiW8fsaLf45kVYRTWnk2r16y6AU5pQe3xX
8L6DuPo+xPlthxxSpX6ppbuA/O/KQ1qc3iDt8VNmQxffKiBt3zTW/ba3bgf92EAm
CZyZyE7GLxQ1X+J6VMM9zDBVSM8suu5IPXEsEepeVk8xDKmoTdJs3ZIBXm538AD/
WoI8zeb6KaJ3G8wCkEIHhxxoSmWSt2ez1Q==
MIIEdTCCAt2gAwIBAgIRAKO2NWnRuWeb2C/NQ/Teuu0wDQYJKoZIhvcNAQELBQAw
gaExHjAcBgNVBAoTFW1rY2VydCBkZXZlbG9wbWVudCBDQTE7MDkGA1UECwwyZHdp
bmRvd25ARHdpbmRpcy1NYWMtbWluaS5sb2NhbCAoRHdpbmRpIFJhbWFkaGFuYSkx
QjBABgNVBAMMOW1rY2VydCBkd2luZG93bkBEd2luZGlzLU1hYy1taW5pLmxvY2Fs
IChEd2luZGkgUmFtYWRoYW5hKTAeFw0yNTExMjIwOTM2NTdaFw0yODAyMjIwOTM2
NTdaMGYxJzAlBgNVBAoTHm1rY2VydCBkZXZlbG9wbWVudCBjZXJ0aWZpY2F0ZTE7
MDkGA1UECwwyZHdpbmRvd25ARHdpbmRpcy1NYWMtbWluaS5sb2NhbCAoRHdpbmRp
IFJhbWFkaGFuYSkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCwGedS
6QfL/vMzFktKhqvIVGAvgpuNJO2r1Mf9oHlmwSryqjYn5/zp82RhgYLIW3w3sH6x
1V5AkwiHBoaSh+CZ+CHUOvDw5+noyjaGrlW1lj42VAOH3cxSrtc1scjiP2Cph/jY
qZEWZb4iq2J+GSkpbJHUbcqtbUw0XaC8OXg0aRR5ELmRQ2VNs7cqSw1xODvBuOak
6650r5YfoR8MPj0sz5a16notcUXwT627HduyA7RAs8oWKn/96ZPBo7kPVCL/JowG
tdtIka+ESMRu1qsdu1ZtcSVbove/wTNFV9akfKRymI0J2rcTWPpz4lVfvIBhQz0J
bnFqSZeDE3pLLfg1AgMBAAGjYjBgMA4GA1UdDwEB/wQEAwIFoDATBgNVHSUEDDAK
BggrBgEFBQcDATAfBgNVHSMEGDAWgBSsL6TlzA65pzrFGTrL97kt0FlZJzAYBgNV
HREEETAPgg13b29ub293LmxvY2FsMA0GCSqGSIb3DQEBCwUAA4IBgQBkvgb0Gp50
VW2Y7wQntNivPcDWJuDjbK1waqUqpSVUkDx2R+i6UPSloNoSLkgBLz6rn4Jt4Hzu
cLP+iuZql3KC/+G9Alr6cn/UnG++jGekcO7m/sQYYen+SzdmVYNe4BSJOeJvLe1A
Km10372m5nVd5iGRnZ+n5CprWOCymkC1Hg7xiqGOuldDu/yRcyHgdQ3a0y4nK91B
TQJzt9Ux/50E12WkPeKXDmD7MSHobQmrrtosMU5aeDwmEZm3FTItLEtXqKuiu7fG
V8gOPdL69Da0ttN2XUC0WRCtLcuRfxvi90Tkjo1JHo8586V0bjZZl4JguJwCTn78
EdZRwzLUrdvgfAL/TyN/meJgBBfVnTBviUp2OMKH+0VLtk7RNHNYiEnwk7vjIQYR
lFBdVKcqDH5yx6QsmdkhExE5/AyYbVh147JXlcTTiEJpD0Nm8m4WCIwRR81HEvKN
emjbk+5vcx0ja+jj+TM2Aofv/rdOllfjsv26PJix+jJgn0cJ6F+7gKA=
-----END CERTIFICATE-----

View File

@@ -1,28 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC7dtgMEmstOyBW
Wp6QhzuNfJJVgilp0MOIiKxlvNYRUDAh7KZQ5cHgDeJiDu6ibD/8LaUyg4O/4daF
ywzpL3WDsIFSKuHWWdGFF3u1AvHSbxQ+GPfwQUU0KCRnBKymBfMqvEnPLLhn8KNA
teaHm+DbIf1PXGwjbwh1qMMhdFRmP69KzYPPMXlT2W375WhGhgoh+A9wTvofIfRO
6rVDE0RjRJwP9OIzbNku0Fpo2haG2AL9j5lOSwVmI0yKAlvL/+ckVOZVcriPWBYb
anpBkd2/TiVYBoo6iCXrwtvPu/xJmVwVLYcCZLEBcm+tFgp3fC6VayyKpBH2uTOA
dt6L6pz7AgMBAAECggEAZeT1Daq9QrqOmyFqaph20DLTv1Kee/uTLJVNT4dSu9pg
LzBYPkSEGuqxECeZogNAzCtrTYeahyOT3Ok/PUgkkc3QnP7d/gqYDcVz4jGVi5IA
6LfdnGN94Bmpn600wpEdWS861zcxjJ2JvtSgVzltAO76prZPuPrTGFEAryBx95jb
3p08nAVT3Skw95bz56DBnfT/egqySmKhLRvKgey2ttGkB1WEjqY8YlQch9yy6uV7
2iEUwbGY6mbAepFv+KGdOmrGZ/kLktI90PgR1g8E4KOrhk+AfBjN9XgZP2t+yO8x
Cwh/owmn5J6s0EKFFEFBQrrbiu2PaZLZ9IEQmcEwEQKBgQDdppwaOYpfXPAfRIMq
XlGjQb+3GtFuARqSuGcCl0LxMHUqcBtSI/Ua4z0hJY2kaiomgltEqadhMJR0sWum
FXhGh6uhINn9o4Oumu9CySiq1RocR+w4/b15ggDWm60zV8t5v0+jM+R5CqTQPUTv
Fd77QZnxspmJyB7M2+jXqoHCrwKBgQDYg/mQYg25+ibwR3mdvjOd5CALTQJPRJ01
wHLE5fkcgxTukChbaRBvp9yI7vK8xN7pUbsv/G2FrkBqvpLtAYglVVPJj/TLGzgi
i5QE2ORE9KJcyV193nOWE0Y4JS0cXPh1IG5DZDAU5+/zLq67LSKk6x9cO/g7hZ3A
1sC6NVJNdQKBgQCLEh6f1bqcWxPOio5B5ywR4w8HNCxzeP3TUSBQ39eAvYbGOdDq
mOURGcMhKQ7WOkZ4IxJg4pHCyVhcX3XLn2z30+g8EQC1xAK7azr0DIMXrN3VIMt2
dr6LnqYoAUWLEWr52K9/FvAjgiom/kpiOLbPrzmIDSeI66dnohNWPgVswQKBgCDi
mqslWXRf3D4ufPhKhUh796n/vlQP1djuLABf9aAxAKLjXl3T7V0oH8TklhW5ySmi
8k1th60ANGSCIYrB6s3Q0fMRXFrk/Xexv3+k+bbHeUmihAK0INYwgz/P1bQzIsGX
dWfi9bKXL8i91Gg1iMeHtrGpoiBYQQejFo6xvphpAoGAEomDPyuRIA2oYZWtaeIp
yghLR0ixbnsZz2oA1MuR4A++iwzspUww/T5cFfI4xthk7FOxy3CK7nDL96rzhHf3
EER4qOOxP+kAAs8Ozd4ERkUSuaDkrRsaUhr8CYF5AQajPQWKMEVcCK1G+WqHGNYg
GzoAyax8kSdmzv6fMPouiGI=
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCwGedS6QfL/vMz
FktKhqvIVGAvgpuNJO2r1Mf9oHlmwSryqjYn5/zp82RhgYLIW3w3sH6x1V5AkwiH
BoaSh+CZ+CHUOvDw5+noyjaGrlW1lj42VAOH3cxSrtc1scjiP2Cph/jYqZEWZb4i
q2J+GSkpbJHUbcqtbUw0XaC8OXg0aRR5ELmRQ2VNs7cqSw1xODvBuOak6650r5Yf
oR8MPj0sz5a16notcUXwT627HduyA7RAs8oWKn/96ZPBo7kPVCL/JowGtdtIka+E
SMRu1qsdu1ZtcSVbove/wTNFV9akfKRymI0J2rcTWPpz4lVfvIBhQz0JbnFqSZeD
E3pLLfg1AgMBAAECggEBAKVoH0xUD3u/w8VHen7M0ct/3Tyi6+J+PjN40ERdF8q5
Q9Lcp7OCBp/kenPPhv0UWS+hus7kf/wdXxQcwAggUomsdHH4ztkorB942BBW7bB7
J4I2FX7niQRcr04C6JICP5PdYJJ5awrjk9zSp9eTYINFNBCY85dEIyDIlLJXNJ3c
SkjmJlCAvJXYZcJ1/UaitBNFxiPWd0Abpr2kEvIbN9ipLP336FzTcp+KwxInMI5p
s/vwXDkzlUr/4azE0DlXU4WiFLCOfCiL0+gX128+fugmYimig5eRSbpZDWXPl6b7
BnbKLy1ak53qm7Otz2e/K0sgSUnMXX12tY1BGgg+kL0CgYEA2z/usrjLUu8tnvvn
XU7ULmEOUsOVh8NmW4jkVgd4Aok+zRxmstA0c+ZcIEr/0g4ad/9OQnI7miGTSdaC
1e8cDmR1D7DtyxuwhNDGN73yjWjT+4gAba087J/+JPKky3MNV5fISgRi1he5Jqfp
aPZDsf4+cAmI0DQm+TnIDBaXt0cCgYEAzZ50b4KdmqURlruDbK1GxH7jeMVdzpl8
ZyLXnXJbTK8qCv2/0kYR6r3raDjAN7AFMFaFh93j6q/DTJb/x4pNYMSKTxbkZu5J
S7jUfcgRbMp2ItLjtLc5Ve/yEUa9JtaL8778Efd5oTot5EflkG0v+3ISLYDC6Uu1
wTUcClX4iqMCgYEAovB7c8UUDhmEfQ/WnSiVVbZ5j5adDR1xd3tfvnOkg7X9vy9p
P2Cuaqf7NWCniDNFBoLtZUJB+0USkiBicZ1W63dK7BNgVb7JS5tghFKc7OzIBbnI
H7pMecpZdJoDUNO7Saqahi+GSHeu+QR22bOTEbfSLS9YxurLQBLqEdnEfMcCgYAW
0ZPoYB1vcQwvpyWhpOUqn05NM9ICQIROyc4V2gAJ1ZKb36cvBbmtTGBYk5u5Ul5x
C9kLx/MoM1NAJ63BDjciGw2iU08LoTwfHCbwwog0g49ys+azQnYpdFRv2GLbcYnc
hgBhWg50dwlqwRPX4FYn2HPt+tEmpNFJ3MP83aeUcwKBgCG4FmPe+a7gRZ/uqoNx
bIyNSKQw6O/RSP3rOcqeZjVxYwBYuqaMIr8TZj5NTePR1kZsuJ0Lo02h6NOMAP0B
UtHulMHf83AXySHt8J907fhdvCotOi6E/94ziTTmU0bNsuWE2/FYe34LrYlcoVbi
QPo8USOGPS9H/OTR3tTAPdSG
-----END PRIVATE KEY-----