=== MarkupLoom – JSON-LD Manager ===
Contributors: saubhikm
Tags: json-ld, schema, structured-data, woocommerce, seo
Requires at least: 6.4
Tested up to: 7.1
Requires PHP: 7.4
Stable tag: 1.0.0
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Create and manage JSON-LD structured data for WordPress Pages, Posts, and WooCommerce Products.

== Description ==

MarkupLoom provides a focused interface for adding structured data to individual WordPress content items.

Multiple schemas can be assigned to the same Page, Post, or WooCommerce Product. Enabled individual schemas are combined into a JSON-LD @graph.

The plugin also provides a global schema manager for site-wide rules.

== Features ==

* Multiple schemas per Page, Post, and WooCommerce Product.
* Checkbox-based Post Type selection for global schemas.
* Individual schema controls inside the WordPress editor.
* JSON-LD @graph output for multiple individual schemas.
* Product schema support for WooCommerce.
* Custom JSON-LD support.
* Dynamic placeholders for common WordPress values.
* Global schema rules for the entire site, homepage, singular content, or selected post types.
* Schema type allow-list.
* Nonce and capability checks.
* Safe JSON-LD encoding to prevent script-tag breakout.

== Supported Schema Types ==

Pages:

* WebPage
* AboutPage
* ContactPage
* FAQPage
* LocalBusiness
* BreadcrumbList
* Organization
* Custom

Posts:

* Article
* BlogPosting
* NewsArticle
* FAQPage
* HowTo
* BreadcrumbList
* WebPage
* Organization
* Custom

Products:

* Product
* BreadcrumbList
* FAQPage
* WebPage
* Organization
* Custom

== Installation ==

1. Upload the `markuploom-json-ld` plugin folder to `/wp-content/plugins/`, or upload the ZIP through Plugins → Add New Plugin.
2. Activate MarkupLoom.
3. Edit a Page, Post, or WooCommerce Product to configure individual schemas.
4. Use MarkupLoom in the WordPress admin menu for global schema rules.

== Custom JSON-LD ==

Custom JSON-LD must be valid JSON.

Supported placeholders:

* `{{title}}`
* `{{url}}`
* `{{description}}`
* `{{image}}`
* `{{author}}`
* `{{datePublished}}`
* `{{dateModified}}`

Example:

{
  "@context": "https://schema.org",
  "@type": "WebPage",
  "name": {{title}},
  "url": {{url}},
  "description": {{description}}
}

Quoted full-value placeholders are also supported.

== Multiple Schemas ==

A single content item may contain multiple schemas, such as:

* Product
* BreadcrumbList
* FAQPage

Enabled individual schemas are emitted together in a JSON-LD `@graph`.

== WooCommerce ==

When WooCommerce is active, Product schema can use:

* Product name
* Description
* URL
* SKU
* Product image
* Price
* Currency
* Stock availability
* Brand
* GTIN
* MPN

== Security ==

MarkupLoom validates custom JSON before storing it and re-encodes schema data with `wp_json_encode()` and JSON hexadecimal encoding flags before placing it inside a JSON-LD script element.

Administrator-only configuration is protected by WordPress capability and nonce checks.

== Compatibility ==

* WordPress 6.4 or later.
* PHP 7.4 or later.
* WooCommerce is optional.

== Changelog ==

= 1.0.0 =
* Initial MarkupLoom release.
* Added global schema manager.
* Added multiple individual schemas for Pages, Posts, and WooCommerce Products.
* Added JSON-LD graph output.
* Added WooCommerce Product schema support.
* Added custom JSON-LD and placeholders.
* Added secure JSON-LD output.
* Replaced global schema Post Type multi-select with checkbox selection.