=== ToSlug ===
Contributors: laobuluo
Tags: slug, permalink, url, random, md5
Requires at least: 5.0
Tested up to: 7.1
Stable tag: 1.2.1
Requires PHP: 7.4
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Automatically generate random or MD5-style WordPress post URL slugs.

== Description ==

ToSlug is a WordPress plugin that automatically generates URL slugs for posts. It can create random alphanumeric or MD5-based slugs to help obscure predictable permalink patterns.

= Features =

* Automatically generate a random or MD5 slug when a new post is first saved
* Configurable slug length (8-32 characters)
* Optional setting to regenerate slugs on every post update
* Choose which public post types are supported (Post, Page, and custom post types; attachments are excluded)
* Track managed posts with post meta so existing content is not rewritten by accident
* Sample slug preview on the settings page
* Batched bulk processing with an ID cursor for larger sites
* Cleans up options and managed-post markers on uninstall

= Links =

* Plugin homepage: https://www.lezaiyun.com/toslug.html

== Installation ==

1. Download the plugin zip file.
2. In WordPress admin, go to Plugins → Add New.
3. Click Upload Plugin.
4. Select the zip file and install it.
5. Activate the plugin.

== Frequently Asked Questions ==

= Will changing URL slugs affect SEO? =

Yes, it can. Changing an existing post slug changes its public URL. Back up your database before using “Reset existing slugs” or bulk-processing all posts.

= Which post types are supported? =

Post, Page, and other public custom post types can be selected on the settings page. Attachment is not listed.

= If “Reset existing slugs” is disabled, will old posts be changed? =

No. The plugin only generates slugs for new posts, or posts that are still auto-drafts / have an empty slug. Existing content keeps its slug during normal edits.

== Changelog ==

= 1.2.1 =
* Load admin JavaScript and CSS via wp_enqueue_script / wp_enqueue_style
* Remove inline script and style attributes from the settings page

= 1.2.0 =
* Fix: New posts with a title-based slug were not always replaced
* Refactor: Use wp_insert_post_data instead of a recursive wp_unique_post_slug filter and a second save_post update
* Add: _toslug_generated meta to distinguish new posts from legacy content
* Add: Slug preview on the settings page and a confirm dialog for bulk “process all”
* Coding standards: Escaping, wp_safe_redirect, Domain Path, uninstall.php
* Improve: Bulk processing uses an ID cursor; remove unnecessary rewrite flush and full cache flush
* Exclude the attachment post type

= 1.1.1 =
* Bump version to 1.1.1
* Add slug length setting (8-32)
* Add supported post types setting (Post / Page / CPT)
* Align automatic generation and bulk processing for multiple post types

= 1.1.0 =
* Bump version to 1.1.0
* Improve random slug generation with a more reliable entropy source
* Add unified uniqueness handling via wp_unique_post_slug
* Fix possible recursive save_post updates
* Add sanitize callbacks and whitelist validation for settings
* Improve bulk processing validation and failure reporting
* Process bulk updates in batches for large sites
* Standardize text domain to toslug

== Upgrade Notice ==

= 1.2.1 =
Admin assets now load through WordPress enqueue APIs to meet plugin directory requirements.

= 1.2.0 =
Important fix for new-post slug generation and WordPress coding-standard improvements. After upgrading, review your ToSlug settings.
