Skip to content

Commit 37352b2

Browse files
authored
Merge pull request #9 from PolyPlugins/version/1.0.9
Version/1.0.9
2 parents 25d9608 + d294a9a commit 37352b2

3 files changed

Lines changed: 145 additions & 21 deletions

File tree

README.MD

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,17 @@ Yes, the plugin supports uploading images to the WordPress media library via the
6565

6666
## Changelog
6767

68+
### 1.0.9
69+
* Added: [Get All Product IDs](https://www.polyplugins.com/docs/content-api/api/get-all-product-ids/) endpoint
70+
* Added: Attribute manage_stock to results of [Get Product](https://www.polyplugins.com/docs/content-api/api/get-product/) endpoint
71+
* Added: Attribute attributes to results of [Get Product](https://www.polyplugins.com/docs/content-api/api/get-product/) endpoint
72+
* Added: Attribute yoast to results of [Get Product](https://www.polyplugins.com/docs/content-api/api/get-product/) endpoint
73+
* Added: Attribute manage_stock to [Update Product](https://www.polyplugins.com/docs/content-api/api/update-product/) endpoint
74+
* Added: Attribute manage_stock to [Create Product](https://www.polyplugins.com/docs/content-api/api/create-product/) endpoint
75+
* Added: Security enhancements
76+
* Updated: [Update Product](https://www.polyplugins.com/docs/content-api/api/update-product/) endpoint to not require quantity
77+
* Bugfix: Taxonomy handling for [Get Attributes](https://www.polyplugins.com/docs/content-api/api/get-attributes/) endpoint
78+
6879
### 1.0.8
6980
* Updated: [Update Product](https://www.polyplugins.com/docs/content-api/api/update-product/) endpoint to handle updating sku when product id is provided.
7081

content-api.php

Lines changed: 122 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* Plugin Name: Content API
55
* Plugin URI: https://www.polyplugins.com/contact/
66
* Description: Adds various endpoints to create content
7-
* Version: 1.0.8
7+
* Version: 1.0.9
88
* Requires at least: 6.5
99
* Requires PHP: 7.4
1010
* Author: Poly Plugins
@@ -88,6 +88,12 @@ public function register_endpoints() {
8888
'permission_callback' => array($this, 'has_permission'), // Add your permission callback for security
8989
));
9090

91+
register_rest_route('content-api/v1', '/product-ids/', array(
92+
'methods' => 'GET',
93+
'callback' => array($this, 'get_all_product_ids'),
94+
'permission_callback' => array($this, 'has_permission'), // Add your permission callback for security
95+
));
96+
9197
register_rest_route('content-api/v1', '/product-categories/', array(
9298
'methods' => 'GET',
9399
'callback' => array($this, 'get_all_product_categories'),
@@ -345,11 +351,13 @@ public function create_post(WP_REST_Request $request) {
345351
*/
346352
public function get_product(WP_REST_Request $request) {
347353
$this->options = get_option('content_api_options_polyplugins');
354+
348355

349-
$product_id = $request->get_param('product_id');
350-
$sku = $request->get_param('sku');
351-
$missing_description = $request->get_param('missing_description') ? true : false;
352-
$missing_description_limit = $request->get_param('missing_description_limit') ? absint($request->get_param('missing_description_limit')) : 100;
356+
$fields = $request->get_params();
357+
$product_id = isset($fields['product_id']) && is_numeric($fields['product_id']) ? absint($fields['product_id']) : '';
358+
$sku = isset($fields['sku']) ? sanitize_text_field($fields['sku']) : '';
359+
$missing_description = isset($fields['missing_description']) ? true : false;
360+
$missing_description_limit = isset($fields['missing_description_limit']) ? absint($fields['missing_description_limit']) : 100;
353361

354362
if ($missing_description) {
355363

@@ -367,7 +375,7 @@ public function get_product(WP_REST_Request $request) {
367375
if (!empty($sku)) {
368376
$products[] = array(
369377
'product_id' => $product_id,
370-
'sku' => $sku
378+
'sku' => sanitize_text_field($sku)
371379
);
372380
}
373381
}
@@ -404,8 +412,7 @@ public function get_product(WP_REST_Request $request) {
404412
} else {
405413
return new WP_Error('product_not_found', 'Product not found with provided SKU', array('status' => 404));
406414
}
407-
}
408-
elseif ($product_id) {
415+
} elseif ($product_id) {
409416
$product = wc_get_product($product_id);
410417
}
411418

@@ -416,6 +423,7 @@ public function get_product(WP_REST_Request $request) {
416423
// Prepare product data response
417424
$product_id = $product->get_id();
418425
$name = $product->get_name();
426+
$status = $product->get_status();
419427
$slug = $product->get_slug();
420428
$description = $product->get_description();
421429
$short_description = $product->get_short_description();
@@ -427,12 +435,46 @@ public function get_product(WP_REST_Request $request) {
427435
$upc = $product->get_meta('_global_unique_id');
428436
$weight = $product->get_weight();
429437
$stock_status = $product->get_stock_status();
438+
$manage_stock = $product->get_manage_stock();
430439
$stock_quantity = $product->get_stock_quantity();
431440
$tags = wp_get_post_terms($product->get_id(), 'product_tag', array('fields' => 'names'));
432441
$categories = wp_get_post_terms($product->get_id(), 'product_cat', array('fields' => 'names'));
442+
$attributes = array();
443+
$raw_attributes = $product->get_attributes();
444+
$images = array();
445+
$gallery_ids = $product->get_gallery_image_ids();
446+
$yoast = array(
447+
"title" => sanitize_text_field($product->get_meta('_yoast_wpseo_title')),
448+
"description" => sanitize_text_field($product->get_meta('_yoast_wpseo_metadesc')),
449+
"premium" => array(
450+
"social_appearance" => array(
451+
"title" => sanitize_text_field($product->get_meta('_yoast_wpseo_opengraph-title')),
452+
"description" => sanitize_text_field($product->get_meta('_yoast_wpseo_opengraph-description')),
453+
"image" => sanitize_url($product->get_meta('_yoast_wpseo_opengraph-image')),
454+
),
455+
"x" => array(
456+
"title" => sanitize_text_field($product->get_meta('_yoast_wpseo_twitter-title')),
457+
"description" => sanitize_text_field($product->get_meta('_yoast_wpseo_twitter-description')),
458+
"image" => sanitize_url($product->get_meta('_yoast_wpseo_twitter-image')),
459+
)
460+
)
461+
);
462+
463+
foreach ($raw_attributes as $raw_attribute) {
464+
if ($raw_attribute->is_taxonomy()) {
465+
$terms = wp_get_post_terms($product->get_id(), $raw_attribute->get_name(), array('fields' => 'names'));
433466

434-
$images = array();
435-
$gallery_ids = $product->get_gallery_image_ids();
467+
$attributes[] = array(
468+
'name' => $raw_attribute->get_name(),
469+
'value' => $terms,
470+
);
471+
} else {
472+
$attributes[] = array(
473+
'name' => $raw_attribute->get_name(),
474+
'value' => $raw_attribute->get_options(),
475+
);
476+
}
477+
}
436478

437479
foreach ($gallery_ids as $id) {
438480
$image = wp_get_attachment_image_src($id, 'full');
@@ -452,6 +494,7 @@ public function get_product(WP_REST_Request $request) {
452494
$response_data = array(
453495
'product_id' => $product_id ? absint($product_id) : 0,
454496
'name' => $name ? sanitize_text_field($name) : '',
497+
'status' => $status ? sanitize_text_field($status) : '',
455498
'slug' => $slug ? sanitize_title($slug) : '',
456499
'description' => $description ? wp_kses_post($description) : '',
457500
'short_description' => $short_description ? wp_kses_post($short_description) : '',
@@ -462,12 +505,15 @@ public function get_product(WP_REST_Request $request) {
462505
'sku' => $sku ? sanitize_text_field($sku) : '',
463506
'upc' => $upc ? sanitize_text_field($upc) : '',
464507
'weight' => $weight ? floatval($weight) : '',
465-
'stock_status' => $stock_status ? sanitize_text_field($product->get_stock_status()) : '',
508+
'stock_status' => $stock_status ? sanitize_text_field($stock_status) : '',
509+
'manage_stock' => $manage_stock ? sanitize_text_field($manage_stock) : '',
466510
'stock_quantity' => $stock_quantity ? absint($product->get_stock_quantity()) : 0,
467511
'tags' => $tags ? array_map('sanitize_text_field', $tags) : array(),
468512
'categories' => $categories ? array_map('sanitize_text_field', $categories) : array(),
513+
'attributes' => $attributes,
469514
'images' => $images ? array_map('esc_url_raw', $images) : array(),
470515
'featured_image' => $featured_image ? esc_url_raw($featured_image) : '',
516+
'yoast' => $yoast,
471517
);
472518

473519
return new WP_REST_Response($response_data, 200);
@@ -497,7 +543,7 @@ public function update_product(WP_REST_Request $request) {
497543
$upc = isset($fields['upc']) ? sanitize_text_field($fields['upc']) : '';
498544
$weight = isset($fields['weight']) ? floatval($fields['weight']) : '';
499545
$stock_status = isset($fields['stock_status']) ? sanitize_text_field($fields['stock_status']) : '';
500-
$stock_quantity = isset($fields['stock_quantity']) ? intval($fields['stock_quantity']) : '';
546+
$manage_stock = isset($fields['manage_stock']) ? sanitize_text_field($fields['manage_stock']) : '';
501547
$tags = isset($fields['tags']) && is_array($fields['tags']) ? array_map('sanitize_text_field', $fields['tags']) : array();
502548
$categories = isset($fields['categories']) && is_array($fields['categories']) ? array_map('sanitize_text_field', $fields['categories']) : array();
503549
$featured_image = isset($fields['featured_image']) ? sanitize_url($fields['featured_image']) : '';
@@ -536,6 +582,8 @@ public function update_product(WP_REST_Request $request) {
536582
if (!isset($product) || !$product) {
537583
return new WP_Error('product_not_found', 'Product not found', array('status' => 404));
538584
}
585+
586+
$stock_quantity = isset($fields['stock_quantity']) ? intval($fields['stock_quantity']) : false;
539587

540588
if ($slug) {
541589
// Check if slug is empty after sanitization
@@ -607,7 +655,13 @@ public function update_product(WP_REST_Request $request) {
607655
$product->set_stock_status($stock_status);
608656
}
609657

610-
if ($stock_quantity >= 0) {
658+
if ($manage_stock == 'true') {
659+
$product->set_manage_stock(true);
660+
} elseif ($manage_stock == 'false') {
661+
$product->set_manage_stock(false);
662+
}
663+
664+
if ($stock_quantity >= 0 && $stock_quantity !== false) {
611665
$product->set_manage_stock(true);
612666
$product->set_stock_quantity($stock_quantity);
613667
}
@@ -720,6 +774,7 @@ public function create_product(WP_REST_Request $request) {
720774
$upc = isset($fields['upc']) ? sanitize_text_field($fields['upc']) : '';
721775
$weight = isset($fields['weight']) ? floatval($fields['weight']) : '';
722776
$stock_status = isset($fields['stock_status']) ? sanitize_text_field($fields['stock_status']) : '';
777+
$manage_stock = isset($fields['manage_stock']) ? sanitize_text_field($fields['manage_stock']) : '';
723778
$stock_quantity = isset($fields['stock_quantity']) ? intval($fields['stock_quantity']) : '';
724779
$tags = isset($fields['tags']) && is_array($fields['tags']) ? array_map('sanitize_text_field', $fields['tags']) : array();
725780
$categories = isset($fields['categories']) && is_array($fields['categories']) ? array_map('sanitize_text_field', $fields['categories']) : array();
@@ -806,7 +861,13 @@ public function create_product(WP_REST_Request $request) {
806861
$product->set_stock_status($stock_status);
807862
}
808863

809-
if ($stock_quantity >= 0) {
864+
if ($manage_stock == 'true') {
865+
$product->set_manage_stock(true);
866+
} elseif ($manage_stock == 'false') {
867+
$product->set_manage_stock(false);
868+
}
869+
870+
if ($stock_quantity >= 0 && $stock_quantity !== false) {
810871
$product->set_manage_stock(true);
811872
$product->set_stock_quantity($stock_quantity);
812873
}
@@ -898,6 +959,36 @@ public function create_product(WP_REST_Request $request) {
898959
), 200);
899960
}
900961

962+
/**
963+
* Get all product categories
964+
*
965+
* @param mixed $request
966+
* @return void
967+
*/
968+
public function get_all_product_ids(WP_REST_Request $request) {
969+
$this->options = get_option('content_api_options_polyplugins');
970+
971+
$fields = $request->get_params();
972+
$limit = isset($fields['limit']) && is_numeric($fields['limit']) ? intval($fields['limit']) : -1;
973+
$status = isset($fields['status']) ? sanitize_text_field($fields['status']) : '';
974+
975+
$args = array(
976+
'limit' => $limit,
977+
'return' => 'ids'
978+
);
979+
980+
if ($status) {
981+
$args['status'] = $status;
982+
}
983+
984+
$products_ids = wc_get_products($args);
985+
986+
return new WP_REST_Response(array(
987+
'success' => true,
988+
'product_ids' => $products_ids
989+
), 200);
990+
}
991+
901992
/**
902993
* Get all product categories
903994
*
@@ -1858,11 +1949,21 @@ public function get_attributes(WP_REST_Request $request)
18581949
$attributes = $product_obj->get_attributes();
18591950

18601951
$formatted_attributes = array();
1952+
18611953
foreach ($attributes as $attribute) {
1862-
$formatted_attributes[] = array(
1863-
'name' => $attribute->get_name(),
1864-
'value' => $attribute->get_options(),
1865-
);
1954+
if ($attribute->is_taxonomy()) {
1955+
$terms = wp_get_post_terms($product_id, $attribute->get_name(), array('fields' => 'names'));
1956+
1957+
$formatted_attributes[] = array(
1958+
'name' => $attribute->get_name(),
1959+
'value' => $terms,
1960+
);
1961+
} else {
1962+
$formatted_attributes[] = array(
1963+
'name' => $attribute->get_name(),
1964+
'value' => $attribute->get_options(),
1965+
);
1966+
}
18661967
}
18671968

18681969
$product_data[] = array(
@@ -1891,8 +1992,9 @@ public function get_product_attributes(WP_REST_Request $request)
18911992
{
18921993
$this->options = get_option('content_api_options_polyplugins');
18931994

1894-
$product_id = $request->get_param('product_id');
1895-
$sku = $request->get_param('sku');
1995+
$fields = $request->get_params();
1996+
$product_id = isset($fields['product_id']) && is_numeric($fields['product_id']) ? absint($fields['product_id']) : '';
1997+
$sku = isset($fields['sku']) ? sanitize_text_field($fields['sku']) : '';
18961998

18971999
if (!$product_id && !$sku) {
18982000
return new WP_Error('missing_identifier', 'Product ID or SKU is required', array('status' => 400));

readme.txt

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
Contributors: polyplugins
33
Tags: content api, rest api, content, creative, api
44
Tested up to: 6.8
5-
Stable tag: 1.0.8
5+
Stable tag: 1.0.9
66
Requires PHP: 7.4
77
License: GPLv3
88
License URI: https://www.gnu.org/licenses/gpl-3.0.html
@@ -84,6 +84,17 @@ Yes, the plugin supports uploading images to the WordPress media library via the
8484

8585
== Changelog ==
8686

87+
= 1.0.9 =
88+
* Added: [Get All Product IDs](https://www.polyplugins.com/docs/content-api/api/get-all-product-ids/) endpoint
89+
* Added: Attribute manage_stock to results of [Get Product](https://www.polyplugins.com/docs/content-api/api/get-product/) endpoint
90+
* Added: Attribute attributes to results of [Get Product](https://www.polyplugins.com/docs/content-api/api/get-product/) endpoint
91+
* Added: Attribute yoast to results of [Get Product](https://www.polyplugins.com/docs/content-api/api/get-product/) endpoint
92+
* Added: Attribute manage_stock to [Update Product](https://www.polyplugins.com/docs/content-api/api/update-product/) endpoint
93+
* Added: Attribute manage_stock to [Create Product](https://www.polyplugins.com/docs/content-api/api/create-product/) endpoint
94+
* Added: Security enhancements
95+
* Updated: [Update Product](https://www.polyplugins.com/docs/content-api/api/update-product/) endpoint to not require quantity
96+
* Bugfix: Taxonomy handling for [Get Attributes](https://www.polyplugins.com/docs/content-api/api/get-attributes/) endpoint
97+
8798
= 1.0.8 =
8899
* Updated: [Update Product](https://www.polyplugins.com/docs/content-api/api/update-product/) endpoint to handle updating sku when product id is provided.
89100

0 commit comments

Comments
 (0)