=== Simple Category List ===
Contributors: nilesh
Tags: woocommerce, categories, shortcode, taxonomy, posts
Requires at least: 5.8
Tested up to: 6.8
Stable tag: 1.5
Requires PHP: 8.0
License: GPLv2 or later
Donate link: https://www.paypal.com/ncp/payment/5PPDH7K9MZSNG
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Support URI: hhttps://www.linkedin.com/in/nziniwal/

WooCommerce and post taxonomy lists via shortcode. Multiple presets, design controls, custom table storage. Managed under Category lists in admin.

== Description ==

**Simple Category List** is built for production sites: multiple presets, a clear admin UI, transient-backed term queries, and optional per-shortcode overrides.

**Good for:** WooCommerce product categories and tags, blog categories, custom post types, any public taxonomy (e.g. `product_cat`, `category`, custom taxonomies), hierarchical or flat term lists, and theme builders that support shortcodes.

*WordPress.org allows only five plugin tags; related terms above help people find this page in search.*

**Features**

* **Multiple lists** — each row has a numeric **id**, a URL **slug**, and JSON settings (taxonomy, exclude list, default title, design).
* **Shortcodes** — `[category_list id="2"]`, `[category_list preset="my-slug"]`, or `[category_list]` (first list). Other attributes override saved defaults.
* **Front-end design** — heading level, colors, spacing, list markers via CSS custom properties on the wrapper.
* **Top-level admin menu** “Category lists” (dashicon) with **All lists** and **Add new**.
* **Migration** — legacy `nzp_scl_config` / `nzp_option_name` data is migrated when possible.

**Bootstrap files**

* Root **`index.php`** — WordPress plugin header, constants, `register_activation_hook`, and `require` of `includes/bootstrap.php`.
* **`includes/bootstrap.php`** — PSR-style autoload, text domain, `Plugin` bootstrap. Not loadable on its own (guards require WordPress + `NZP_CATEGORY_LIST_LOADED`).

== Installation ==

1. Upload the `categorylist` folder to `/wp-content/plugins/` (or ZIP via **Plugins → Add New → Upload**).
2. Activate **Simple Category List**.
3. If you upgraded from a build that used `category_list.php` as the main file, **deactivate and activate** the plugin once so WordPress loads `index.php`.
4. Go to **Category lists**, create lists, copy shortcodes.

**Translations:** place `wp-categorylist-show-{locale}.mo` files in the `languages/` folder (same folder name as the Text Domain). A blank `languages/index.php` ships to block direct directory access.

== Frequently Asked Questions ==

= Where is data stored? =

Table `{prefix}nzp_scl_presets` (columns: id, name, slug, payload JSON, sort_order). Legacy `nzp_scl_config` is migrated and removed when present.

= How does the shortcode choose a list? =

* `id` — database id of the list  
* `preset` — slug of the list  
* Neither — first list by sort order / id  

= How do I add a Documentation link on the Plugins screen? =

`add_filter( 'nzp_scl_docs_url', function() { return 'https://example.com/docs'; } );`

== Screenshots ==

1. **Category lists** — table of lists and shortcodes.
2. **Add / Edit list** — shortcode defaults and design.

== Support ==

=== 💬 Need Help? ===
If you have any issues, we’re here for you.

🔹 WordPress Support Forum: https://wordpress.org/support/plugin/categorylist/  
🔹 Direct Support: https://www.linkedin.com/in/nziniwal/

---

=== 💖 Support This Plugin ===
If you find this plugin useful, consider supporting development:

👉 Donate here: https://www.paypal.com/ncp/payment/5PPDH7K9MZSNG  

Your support helps us improve and add new features!

== Changelog ==

= 2.1.3 =
* **Security:** autoload path containment, preset JSON size cap (save + load), admin save uses `check_admin_referer`, delete handler verifies nonce after resolving id, admin assets only for `manage_options`, no-op if plugin bootstrap is included twice.

= 2.1.2 =
* `languages/index.php` placeholder for safe empty `languages/` directory.
* **Plugins screen:** optional **Documentation** link via filter `nzp_scl_docs_url` (plugin row meta).

= 2.1.1 =
* **Single entry file:** root `index.php` only (removed `category_list.php` and `nzp-simple-category-list.php`). Runtime lives in `includes/bootstrap.php`.
* **Plugins screen:** “Manage lists” and related action links when configured.
* Plugin headers: `Requires at least`, `Requires PHP`, `License URI`.
* Readme: installation, file layout.

= 2.1.0 =
* Multiple presets, `nzp_scl_presets` table, top-level admin menu, `id` / `preset` shortcode attributes.

= 2.0.0 =
* Custom table storage, OOP layout, design tokens.

= 1.6.1 =
* Modular includes, transient cache fixes.

== Upgrade Notice ==

= 2.1.3 =
Hardening release (no database migration). Safe to update from 2.1.x.

= 2.1.2 =
Maintenance: `languages/` placeholder file, optional documentation URL filter. No database changes. (If you still use the old `category_list.php` bootstrap, re-activate the plugin once.)
