@@ -35,12 +35,7 @@ class WC_REST_Dev_Product_Variations_Controller extends WC_REST_Product_Variatio
35
35
* @return array
36
36
*/
37
37
protected function get_images ( $ variation ) {
38
- if ( has_post_thumbnail ( $ variation ->get_id () ) ) {
39
- $ attachment_id = $ variation ->get_image_id ();
40
- } else {
41
- $ attachment_id = current ( $ variation ->get_gallery_image_ids () );
42
- }
43
-
38
+ $ attachment_id = $ variation ->get_image_id ();
44
39
$ attachment_post = get_post ( $ attachment_id );
45
40
if ( is_null ( $ attachment_post ) ) {
46
41
$ image = array ();
@@ -61,11 +56,365 @@ protected function get_images( $variation ) {
61
56
'src ' => current ( $ attachment ),
62
57
'name ' => get_the_title ( $ attachment_id ),
63
58
'alt ' => get_post_meta ( $ attachment_id , '_wp_attachment_image_alt ' , true ),
64
- 'position ' => (int ) $ position ,
65
59
);
66
60
}
67
61
68
62
return array ( $ image );
69
63
}
70
64
65
+ /**
66
+ * Get the Variation's schema, conforming to JSON Schema.
67
+ *
68
+ * @return array
69
+ */
70
+ public function get_item_schema () {
71
+ $ weight_unit = get_option ( 'woocommerce_weight_unit ' );
72
+ $ dimension_unit = get_option ( 'woocommerce_dimension_unit ' );
73
+ $ schema = array (
74
+ '$schema ' => 'http://json-schema.org/draft-04/schema# ' ,
75
+ 'title ' => $ this ->post_type ,
76
+ 'type ' => 'object ' ,
77
+ 'properties ' => array (
78
+ 'id ' => array (
79
+ 'description ' => __ ( 'Unique identifier for the resource. ' , 'woocommerce ' ),
80
+ 'type ' => 'integer ' ,
81
+ 'context ' => array ( 'view ' , 'edit ' ),
82
+ 'readonly ' => true ,
83
+ ),
84
+ 'date_created ' => array (
85
+ 'description ' => __ ( "The date the variation was created, in the site's timezone. " , 'woocommerce ' ),
86
+ 'type ' => 'date-time ' ,
87
+ 'context ' => array ( 'view ' , 'edit ' ),
88
+ 'readonly ' => true ,
89
+ ),
90
+ 'date_modified ' => array (
91
+ 'description ' => __ ( "The date the variation was last modified, in the site's timezone. " , 'woocommerce ' ),
92
+ 'type ' => 'date-time ' ,
93
+ 'context ' => array ( 'view ' , 'edit ' ),
94
+ 'readonly ' => true ,
95
+ ),
96
+ 'description ' => array (
97
+ 'description ' => __ ( 'Variation description. ' , 'woocommerce ' ),
98
+ 'type ' => 'string ' ,
99
+ 'context ' => array ( 'view ' , 'edit ' ),
100
+ ),
101
+ 'permalink ' => array (
102
+ 'description ' => __ ( 'Variation URL. ' , 'woocommerce ' ),
103
+ 'type ' => 'string ' ,
104
+ 'format ' => 'uri ' ,
105
+ 'context ' => array ( 'view ' , 'edit ' ),
106
+ 'readonly ' => true ,
107
+ ),
108
+ 'sku ' => array (
109
+ 'description ' => __ ( 'Unique identifier. ' , 'woocommerce ' ),
110
+ 'type ' => 'string ' ,
111
+ 'context ' => array ( 'view ' , 'edit ' ),
112
+ ),
113
+ 'price ' => array (
114
+ 'description ' => __ ( 'Current variation price. ' , 'woocommerce ' ),
115
+ 'type ' => 'string ' ,
116
+ 'context ' => array ( 'view ' , 'edit ' ),
117
+ 'readonly ' => true ,
118
+ ),
119
+ 'regular_price ' => array (
120
+ 'description ' => __ ( 'Variation regular price. ' , 'woocommerce ' ),
121
+ 'type ' => 'string ' ,
122
+ 'context ' => array ( 'view ' , 'edit ' ),
123
+ ),
124
+ 'sale_price ' => array (
125
+ 'description ' => __ ( 'Variation sale price. ' , 'woocommerce ' ),
126
+ 'type ' => 'string ' ,
127
+ 'context ' => array ( 'view ' , 'edit ' ),
128
+ ),
129
+ 'date_on_sale_from ' => array (
130
+ 'description ' => __ ( "Start date of sale price, in the site's timezone. " , 'woocommerce ' ),
131
+ 'type ' => 'date-time ' ,
132
+ 'context ' => array ( 'view ' , 'edit ' ),
133
+ ),
134
+ 'date_on_sale_from_gmt ' => array (
135
+ 'description ' => __ ( 'Start date of sale price, as GMT. ' , 'woocommerce ' ),
136
+ 'type ' => 'date-time ' ,
137
+ 'context ' => array ( 'view ' , 'edit ' ),
138
+ ),
139
+ 'date_on_sale_to ' => array (
140
+ 'description ' => __ ( "End date of sale price, in the site's timezone. " , 'woocommerce ' ),
141
+ 'type ' => 'date-time ' ,
142
+ 'context ' => array ( 'view ' , 'edit ' ),
143
+ ),
144
+ 'date_on_sale_to_gmt ' => array (
145
+ 'description ' => __ ( "End date of sale price, in the site's timezone. " , 'woocommerce ' ),
146
+ 'type ' => 'date-time ' ,
147
+ 'context ' => array ( 'view ' , 'edit ' ),
148
+ ),
149
+ 'on_sale ' => array (
150
+ 'description ' => __ ( 'Shows if the variation is on sale. ' , 'woocommerce ' ),
151
+ 'type ' => 'boolean ' ,
152
+ 'context ' => array ( 'view ' , 'edit ' ),
153
+ 'readonly ' => true ,
154
+ ),
155
+ 'visible ' => array (
156
+ 'description ' => __ ( "Define if the attribute is visible on the \"Additional information \" tab in the product's page. " , 'woocommerce ' ),
157
+ 'type ' => 'boolean ' ,
158
+ 'default ' => true ,
159
+ 'context ' => array ( 'view ' , 'edit ' ),
160
+ ),
161
+ 'purchasable ' => array (
162
+ 'description ' => __ ( 'Shows if the variation can be bought. ' , 'woocommerce ' ),
163
+ 'type ' => 'boolean ' ,
164
+ 'context ' => array ( 'view ' , 'edit ' ),
165
+ 'readonly ' => true ,
166
+ ),
167
+ 'virtual ' => array (
168
+ 'description ' => __ ( 'If the variation is virtual. ' , 'woocommerce ' ),
169
+ 'type ' => 'boolean ' ,
170
+ 'default ' => false ,
171
+ 'context ' => array ( 'view ' , 'edit ' ),
172
+ ),
173
+ 'downloadable ' => array (
174
+ 'description ' => __ ( 'If the variation is downloadable. ' , 'woocommerce ' ),
175
+ 'type ' => 'boolean ' ,
176
+ 'default ' => false ,
177
+ 'context ' => array ( 'view ' , 'edit ' ),
178
+ ),
179
+ 'downloads ' => array (
180
+ 'description ' => __ ( 'List of downloadable files. ' , 'woocommerce ' ),
181
+ 'type ' => 'array ' ,
182
+ 'context ' => array ( 'view ' , 'edit ' ),
183
+ 'items ' => array (
184
+ 'type ' => 'object ' ,
185
+ 'properties ' => array (
186
+ 'id ' => array (
187
+ 'description ' => __ ( 'File MD5 hash. ' , 'woocommerce ' ),
188
+ 'type ' => 'string ' ,
189
+ 'context ' => array ( 'view ' , 'edit ' ),
190
+ 'readonly ' => true ,
191
+ ),
192
+ 'name ' => array (
193
+ 'description ' => __ ( 'File name. ' , 'woocommerce ' ),
194
+ 'type ' => 'string ' ,
195
+ 'context ' => array ( 'view ' , 'edit ' ),
196
+ ),
197
+ 'file ' => array (
198
+ 'description ' => __ ( 'File URL. ' , 'woocommerce ' ),
199
+ 'type ' => 'string ' ,
200
+ 'context ' => array ( 'view ' , 'edit ' ),
201
+ ),
202
+ ),
203
+ ),
204
+ ),
205
+ 'download_limit ' => array (
206
+ 'description ' => __ ( 'Number of times downloadable files can be downloaded after purchase. ' , 'woocommerce ' ),
207
+ 'type ' => 'integer ' ,
208
+ 'default ' => -1 ,
209
+ 'context ' => array ( 'view ' , 'edit ' ),
210
+ ),
211
+ 'download_expiry ' => array (
212
+ 'description ' => __ ( 'Number of days until access to downloadable files expires. ' , 'woocommerce ' ),
213
+ 'type ' => 'integer ' ,
214
+ 'default ' => -1 ,
215
+ 'context ' => array ( 'view ' , 'edit ' ),
216
+ ),
217
+ 'tax_status ' => array (
218
+ 'description ' => __ ( 'Tax status. ' , 'woocommerce ' ),
219
+ 'type ' => 'string ' ,
220
+ 'default ' => 'taxable ' ,
221
+ 'enum ' => array ( 'taxable ' , 'shipping ' , 'none ' ),
222
+ 'context ' => array ( 'view ' , 'edit ' ),
223
+ ),
224
+ 'tax_class ' => array (
225
+ 'description ' => __ ( 'Tax class. ' , 'woocommerce ' ),
226
+ 'type ' => 'string ' ,
227
+ 'context ' => array ( 'view ' , 'edit ' ),
228
+ ),
229
+ 'manage_stock ' => array (
230
+ 'description ' => __ ( 'Stock management at variation level. ' , 'woocommerce ' ),
231
+ 'type ' => 'boolean ' ,
232
+ 'default ' => false ,
233
+ 'context ' => array ( 'view ' , 'edit ' ),
234
+ ),
235
+ 'stock_quantity ' => array (
236
+ 'description ' => __ ( 'Stock quantity. ' , 'woocommerce ' ),
237
+ 'type ' => 'integer ' ,
238
+ 'context ' => array ( 'view ' , 'edit ' ),
239
+ ),
240
+ 'in_stock ' => array (
241
+ 'description ' => __ ( 'Controls whether or not the variation is listed as "in stock" or "out of stock" on the frontend. ' , 'woocommerce ' ),
242
+ 'type ' => 'boolean ' ,
243
+ 'default ' => true ,
244
+ 'context ' => array ( 'view ' , 'edit ' ),
245
+ ),
246
+ 'backorders ' => array (
247
+ 'description ' => __ ( 'If managing stock, this controls if backorders are allowed. ' , 'woocommerce ' ),
248
+ 'type ' => 'string ' ,
249
+ 'default ' => 'no ' ,
250
+ 'enum ' => array ( 'no ' , 'notify ' , 'yes ' ),
251
+ 'context ' => array ( 'view ' , 'edit ' ),
252
+ ),
253
+ 'backorders_allowed ' => array (
254
+ 'description ' => __ ( 'Shows if backorders are allowed. ' , 'woocommerce ' ),
255
+ 'type ' => 'boolean ' ,
256
+ 'context ' => array ( 'view ' , 'edit ' ),
257
+ 'readonly ' => true ,
258
+ ),
259
+ 'backordered ' => array (
260
+ 'description ' => __ ( 'Shows if the variation is on backordered. ' , 'woocommerce ' ),
261
+ 'type ' => 'boolean ' ,
262
+ 'context ' => array ( 'view ' , 'edit ' ),
263
+ 'readonly ' => true ,
264
+ ),
265
+ 'weight ' => array (
266
+ /* translators: %s: weight unit */
267
+ 'description ' => sprintf ( __ ( 'Variation weight (%s). ' , 'woocommerce ' ), $ weight_unit ),
268
+ 'type ' => 'string ' ,
269
+ 'context ' => array ( 'view ' , 'edit ' ),
270
+ ),
271
+ 'dimensions ' => array (
272
+ 'description ' => __ ( 'Variation dimensions. ' , 'woocommerce ' ),
273
+ 'type ' => 'object ' ,
274
+ 'context ' => array ( 'view ' , 'edit ' ),
275
+ 'properties ' => array (
276
+ 'length ' => array (
277
+ /* translators: %s: dimension unit */
278
+ 'description ' => sprintf ( __ ( 'Variation length (%s). ' , 'woocommerce ' ), $ dimension_unit ),
279
+ 'type ' => 'string ' ,
280
+ 'context ' => array ( 'view ' , 'edit ' ),
281
+ ),
282
+ 'width ' => array (
283
+ /* translators: %s: dimension unit */
284
+ 'description ' => sprintf ( __ ( 'Variation width (%s). ' , 'woocommerce ' ), $ dimension_unit ),
285
+ 'type ' => 'string ' ,
286
+ 'context ' => array ( 'view ' , 'edit ' ),
287
+ ),
288
+ 'height ' => array (
289
+ /* translators: %s: dimension unit */
290
+ 'description ' => sprintf ( __ ( 'Variation height (%s). ' , 'woocommerce ' ), $ dimension_unit ),
291
+ 'type ' => 'string ' ,
292
+ 'context ' => array ( 'view ' , 'edit ' ),
293
+ ),
294
+ ),
295
+ ),
296
+ 'shipping_class ' => array (
297
+ 'description ' => __ ( 'Shipping class slug. ' , 'woocommerce ' ),
298
+ 'type ' => 'string ' ,
299
+ 'context ' => array ( 'view ' , 'edit ' ),
300
+ ),
301
+ 'shipping_class_id ' => array (
302
+ 'description ' => __ ( 'Shipping class ID. ' , 'woocommerce ' ),
303
+ 'type ' => 'string ' ,
304
+ 'context ' => array ( 'view ' , 'edit ' ),
305
+ 'readonly ' => true ,
306
+ ),
307
+ 'image ' => array (
308
+ 'description ' => __ ( 'Variation image data. ' , 'woocommerce ' ),
309
+ 'type ' => 'object ' ,
310
+ 'context ' => array ( 'view ' , 'edit ' ),
311
+ 'properties ' => array (
312
+ 'id ' => array (
313
+ 'description ' => __ ( 'Image ID. ' , 'woocommerce ' ),
314
+ 'type ' => 'integer ' ,
315
+ 'context ' => array ( 'view ' , 'edit ' ),
316
+ ),
317
+ 'date_created ' => array (
318
+ 'description ' => __ ( "The date the image was created, in the site's timezone. " , 'woocommerce ' ),
319
+ 'type ' => 'date-time ' ,
320
+ 'context ' => array ( 'view ' , 'edit ' ),
321
+ 'readonly ' => true ,
322
+ ),
323
+ 'date_created_gmt ' => array (
324
+ 'description ' => __ ( 'The date the image was created, as GMT. ' , 'woocommerce ' ),
325
+ 'type ' => 'date-time ' ,
326
+ 'context ' => array ( 'view ' , 'edit ' ),
327
+ 'readonly ' => true ,
328
+ ),
329
+ 'date_modified ' => array (
330
+ 'description ' => __ ( "The date the image was last modified, in the site's timezone. " , 'woocommerce ' ),
331
+ 'type ' => 'date-time ' ,
332
+ 'context ' => array ( 'view ' , 'edit ' ),
333
+ 'readonly ' => true ,
334
+ ),
335
+ 'date_modified_gmt ' => array (
336
+ 'description ' => __ ( 'The date the image was last modified, as GMT. ' , 'woocommerce ' ),
337
+ 'type ' => 'date-time ' ,
338
+ 'context ' => array ( 'view ' , 'edit ' ),
339
+ 'readonly ' => true ,
340
+ ),
341
+ 'src ' => array (
342
+ 'description ' => __ ( 'Image URL. ' , 'woocommerce ' ),
343
+ 'type ' => 'string ' ,
344
+ 'format ' => 'uri ' ,
345
+ 'context ' => array ( 'view ' , 'edit ' ),
346
+ ),
347
+ 'name ' => array (
348
+ 'description ' => __ ( 'Image name. ' , 'woocommerce ' ),
349
+ 'type ' => 'string ' ,
350
+ 'context ' => array ( 'view ' , 'edit ' ),
351
+ ),
352
+ 'alt ' => array (
353
+ 'description ' => __ ( 'Image alternative text. ' , 'woocommerce ' ),
354
+ 'type ' => 'string ' ,
355
+ 'context ' => array ( 'view ' , 'edit ' ),
356
+ ),
357
+ ),
358
+ ),
359
+ 'attributes ' => array (
360
+ 'description ' => __ ( 'List of attributes. ' , 'woocommerce ' ),
361
+ 'type ' => 'array ' ,
362
+ 'context ' => array ( 'view ' , 'edit ' ),
363
+ 'items ' => array (
364
+ 'type ' => 'object ' ,
365
+ 'properties ' => array (
366
+ 'id ' => array (
367
+ 'description ' => __ ( 'Attribute ID. ' , 'woocommerce ' ),
368
+ 'type ' => 'integer ' ,
369
+ 'context ' => array ( 'view ' , 'edit ' ),
370
+ ),
371
+ 'name ' => array (
372
+ 'description ' => __ ( 'Attribute name. ' , 'woocommerce ' ),
373
+ 'type ' => 'string ' ,
374
+ 'context ' => array ( 'view ' , 'edit ' ),
375
+ ),
376
+ 'option ' => array (
377
+ 'description ' => __ ( 'Selected attribute term name. ' , 'woocommerce ' ),
378
+ 'type ' => 'string ' ,
379
+ 'context ' => array ( 'view ' , 'edit ' ),
380
+ ),
381
+ ),
382
+ ),
383
+ ),
384
+ 'menu_order ' => array (
385
+ 'description ' => __ ( 'Menu order, used to custom sort products. ' , 'woocommerce ' ),
386
+ 'type ' => 'integer ' ,
387
+ 'context ' => array ( 'view ' , 'edit ' ),
388
+ ),
389
+ 'meta_data ' => array (
390
+ 'description ' => __ ( 'Meta data. ' , 'woocommerce ' ),
391
+ 'type ' => 'array ' ,
392
+ 'context ' => array ( 'view ' , 'edit ' ),
393
+ 'items ' => array (
394
+ 'type ' => 'object ' ,
395
+ 'properties ' => array (
396
+ 'id ' => array (
397
+ 'description ' => __ ( 'Meta ID. ' , 'woocommerce ' ),
398
+ 'type ' => 'integer ' ,
399
+ 'context ' => array ( 'view ' , 'edit ' ),
400
+ 'readonly ' => true ,
401
+ ),
402
+ 'key ' => array (
403
+ 'description ' => __ ( 'Meta key. ' , 'woocommerce ' ),
404
+ 'type ' => 'string ' ,
405
+ 'context ' => array ( 'view ' , 'edit ' ),
406
+ ),
407
+ 'value ' => array (
408
+ 'description ' => __ ( 'Meta value. ' , 'woocommerce ' ),
409
+ 'type ' => 'string ' ,
410
+ 'context ' => array ( 'view ' , 'edit ' ),
411
+ ),
412
+ ),
413
+ ),
414
+ ),
415
+ ),
416
+ );
417
+ return $ this ->add_additional_fields_schema ( $ schema );
418
+ }
419
+
71
420
}
0 commit comments