1.2.0
Optional admin screens. They ship with the library but load only if you ask:
add_filter( 'user_tags_enable_admin', '__return_true' );Users → Tags for creating and editing tags with CSV import and export, a column and filter links on the users list, bulk assign and remove, and checkboxes on the user profile. Nothing appears — and nothing is even read from disk — until the filter says so.
They live in this package rather than a separate one on purpose. Two bundleable packages with independent version numbers produce a compatibility matrix: a site could run the screens from one release against the data layer of another, because two plugins bundled different pairs. One package cannot drift out of step with itself.
The menu always sits under Users.
Translations. languages/ carries the .pot and a Spanish translation. The library loads them itself on init, preferring wp-content/languages/plugins/ so a site override or the wordpress.org platform wins over the bundled copy.
Breaking: the text domain is now user-tags-lib. It has to match a wordpress.org slug for that platform to have anything to translate, and user-tags is already taken there. The entry file also carries plugin headers now, so it can be activated on its own — which is the only reason Action Scheduler's own strings ever reach a site.
If you translate this library's strings yourself, move from user-tags to user-tags-lib. Nothing else changed.
187 tests.