=== W3S API Extension for Woocommerce ===
Contributors: w3specialists
Tags: woocommerce, api, extension, categories
Requires at least: 6.0
Tested up to: 6.8
Requires PHP: 7.4
License: GPLv3
License URI: https://www.gnu.org/licenses/gpl-3.0.html
Stable tag: 1.0.1

Enhances your store’s REST API by adding powerful, flexible endpoints. Stay tuned more Endpoints are coming!

== Description ==
Enhances your store’s REST API by adding powerful, flexible endpoints.
Stay tuned more are coming!

**Add or Remove a Single Category**

Easily append or remove one category at a time—by numeric ID or human-friendly slug—using simple POST/PUT/PATCH or DELETE requests to
<code>/wp-json/wc/v3/products/{product_id}/categories/{identifier}</code>

**Batch Manage Multiple Categories**

In a single call, add or remove multiple categories at once via JSON payloads to
<code>/wp-json/wc/v3/products/{product_id}/categories</code>
Supply an array of IDs or slugs under the “categories” key to update your product’s category list in bulk.

**Automatic Slug Resolution**
Pass slugs like “summer-collection” and the plugin will resolve them to the correct WooCommerce term IDs on the fly—no extra lookups required.

**Non-Destructive Updates**
Neither endpoint touches other product data. Categories are merged or pruned transparently without overwriting prices, stock, attributes, or any other fields.

Built-In Validation & Security

Sanitization of all inputs (IDs and slugs) to guard against bad data.

Permission checks ensure only users with the edit_products capability (Shop Manager, Admin) can modify categories.

Clear, standardized error codes (w3s_api_extension_invalid_product and w3s_api_extension_invalid_product_category) for consistent API responses.

W3S API Extension for WooCommerce installs alongside the core WooCommerce REST API, requires no additional configuration, and works out of the box. 

== Endpoints Documentation ==

**Product Categories**

<ul>
	<li>
		Add a single category
		<ul>
			<li><strong>Type:</strong> HTTP request</li>
			<li><strong>Endpoint:</strong> <code>/wp-json/wc/v3/products/{product_id}/categories/{identifier}</code></li>
			<li><strong>Methods:</strong> POST, PUT, PATCH</li>
			<li><strong>Examples:</strong> 
				<code>curl -X PUT https://example.com/wp-json/wc/v3/products/125/categories/18 \
					-u consumer_key:consumer_secret</code>
				<code>curl -X PUT https://example.com/wp-json/wc/v3/products/125/categories/my-category \
					-u consumer_key:consumer_secret</code>
			</li>
		</ul>
	</li>
	<li>
		Remove a single category
		<ul>
			<li><strong>Type:</strong> HTTP request</li>
			<li><strong>Endpoint:</strong> <code>/wp-json/wc/v3/products/{product_id}/categories/{identifier}</code></li>
			<li><strong>Methods:</strong> DELETE</li>
			<li><strong>Examples:</strong> 
				<code>curl -X DELETE https://example.com/wp-json/wc/v3/products/125/categories/18 \
					-u consumer_key:consumer_secret</code>
				<code>curl -X DELETE https://example.com/wp-json/wc/v3/products/125/categories/my-category \
					-u consumer_key:consumer_secret</code>
			</li>
		</ul>
	</li>
	<li>
		Batch add categories
		<ul>
			<li><strong>Type:</strong> HTTP request</li>
			<li><strong>Endpoint:</strong> <code>/wp-json/wc/v3/products/{product_id}/categories</code></li>
			<li><strong>Methods:</strong> POST, PUT, PATCH</li>
			<li><strong>Example:</strong> 
				<code>curl -X PUT https://example.com/wp-json/wc/v3/products/125/categories \
					-u consumer_key:consumer_secret \
					-H "Content-Type: application/json" \
					-d '{"categories": [1,"my-category",3,"my-category-1"]}'</code>
			</li>
		</ul>
	</li>
	<li>
		Batch delete categories
		<ul>
			<li><strong>Type:</strong> HTTP request</li>
			<li><strong>Endpoint:</strong> <code>/wp-json/wc/v3/products/{product_id}/categories</code></li>
			<li><strong>Methods:</strong> DELETE</li>
			<li><strong>Example:</strong> 
				<code>curl -X DELETE https://example.com/wp-json/wc/v3/products/125/categories \
					-u consumer_key:consumer_secret \
					-H "Content-Type: application/json" \
					-d '{"categories": [1,"my-category",3,"my-category-1"]}'</code>
			</li>
		</ul>
	</li>
</ul>

**Extra notes**
<ul>
 <li> The single category endpoint doesn't allow slug with characters anything other than latin & numbers [a-z0-9] </li>
 <li> Strings that include only numbers will be parsed as IDs and not as Slugs</li>
</ul>

== Installation ==
1. Upload the `w3s-api-extension` folder to the `/wp-content/plugins/` directory.
2. Activate the plugin through the 'Plugins' menu in WordPress.
3. OPTIONAL: Rewrite rules are flushed automatically on plugin activation. If you want, you can also flush them manually.

== Changelog ==
= 1.0.1 =
* Fixed: readme file modifications

= 1.0.0 =
* Initial release