=== 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.)