Releases: gioxx/wp-smart-tags
Releases · gioxx/wp-smart-tags
Release list
v0.23.3
- Fixed the "All tags" table staying empty after an Ajax action (bulk delete, or lock/hide with "Hide locked tags" on) removed every row on the current page: pagination and item counts went stale until a manual refresh or page change. Added
reloadIfTableEmpty()inassets/admin.js, which auto-reloads the page once nowpto-tag-row-*row is left after a delete or lock-triggered hide. - WordPress.org Plugin Check cleanup ahead of the directory submission: bumped
readme.txt's "Tested up to" to 7.1, dropped theDomain Pathheader (no/languagesfolder ships, and translations load automatically for WP.org-hosted plugins), tightened the nonce-verificationphpcs:disableinclass-wpto-admin-page.php's bulk-action dispatch to also cover the.Recommendedsniff, fixed a mismatchedphpcs:ignoresniff code inuninstall.php, and added aphpcs:disable/enablearound the intentionalmeta_queryusage inclass-wpto-tag-stats-table.php::prepare_items(). - Added the WordPress.org-required third-party-service disclosure ahead of directory submission: a "Third-party service" paragraph in
readme.txt's Description explaining what's sent to the Anthropic Claude API, when, and linking to Anthropic's Privacy Policy and Terms of Service, plus a matching<p class="description">note next to the Anthropic API Key field inclass-wpto-settings.php's Settings page. - Corrected stale "included Italian translation" claims in
readme.txt(feature list),README.md, andREADME.it.md— no.mo/.pofiles ship with the plugin anymore since 0.22.0; WordPress.org requires directory-submitted plugins to be translated via translate.wordpress.org instead of bundling translation files.
For the full version history, see CHANGELOG.md.
v0.23.2
- Fixed locked tags being unable to enter the merge selection at all, even as the merge target (which always survives a merge — only source tags get deleted). Removed the lock filtering from
add_to_merge_basket()andget_merge_basket_terms()inincludes/class-wpto-admin-page.php, fromprocess_add_tags_by_name()(dropping its "Skipped locked tag(s)" notice), and removedWPTO_Merge_Handler::apply()'s rejection of a locked target. Locked tags remain fully protected as a merge source:apply()still skips them there instead of deleting them.
For the full version history, see CHANGELOG.md.
v0.23.1
- Fixed the "All tags" bulk actions (Lock/Unlock/Delete) showing WordPress core's "Please select a bulk action to perform." alert even though the action had actually run. The Ajax submit handler in
assets/admin.jswas resetting the action<select>s back to-1synchronously, before WP core's own submit-time bulk-action validation (bound to the same form) had a chance to read the selected value; deferred the reset viasetTimeoutso it happens after the current submit event has fully finished.
For the full version history, see CHANGELOG.md.
v0.23.0
- Added a "Hide locked tags" checkbox to the "All tags" table (below the Quick sort links), checked by default, so locked tags stay out of the way while working the list. Persisted per-user like the usage-bucket filter (
WPTO_Admin_Page::get_hide_locked_tags()); filters via ameta_queryonwpto_lockedin bothwp_count_terms()andget_terms()inWPTO_Tag_Stats_Table::prepare_items(). - Fixed the "All tags" table losing an active search (and sort/bucket filter) when paging past page 1. The
#wpto-tags-filterform posted viamethod="post", sos/orderby/etc. never made it into the URL thatWP_List_Table's pagination links are built from; switched the form tomethod="get"and updated the bulk-action handlers (maybe_process_stats_tab_actions(),process_bulk_delete(),process_bulk_toggle_lock(), theadd_to_mergebranch inrender_stats_tab()) to readtag_id[]/action/action2from$_REQUESTinstead of$_POSTto match. - Converted single-row lock toggle, single-row delete, and the "Lock"/"Unlock"/"Delete" bulk actions on the "All tags" table to Ajax (new
wp_ajax_wpto_toggle_lock,wp_ajax_wpto_bulk_lock,wp_ajax_wpto_delete_tagshandlers), so those no longer reload the page and drop the current search/sort/pagination state. Rows update or fade out in place; the "Hide locked tags" checkbox is respected when a row gets locked via Ajax. The full-page-reload routes (process_toggle_lock(),process_bulk_delete(),process_bulk_toggle_lock()) are kept as a no-JS fallback. The "Add to merge selection" bulk action is intentionally left as a normal (non-Ajax) submit, since it needs to redraw the merge basket section below the table anyway.
For the full version history, see CHANGELOG.md.
v0.22.2
- Removed the duplicate lock dashicon rendered under the checkbox on locked rows (
column_cb()inincludes/class-wpto-tag-stats-table.php); the checkbox alone is enough since the "Lock" column already shows state. The "Lock" column icon now also colors itself (red closed lock when locked, gray open lock when unlocked via new.wpto-toggle-lock--locked/--unlockedCSS classes) instead of relying solely on icon shape.
For the full version history, see CHANGELOG.md.
v0.22.1
- Added "Lock"/"Unlock" bulk actions to the "All tags" table's Bulk actions dropdown. Locked tags are checkbox-selectable again (previously hidden entirely) so they can be picked for a bulk unlock; destructive bulk actions (delete, add to merge) still drop locked ids server-side via
WPTO_Tag_Lock::filter_unlocked(). - Fixed
process_add_tags_by_name()and the bulk "add to merge selection" action counting locked tags as added to the merge basket, whenadd_to_merge_basket()was actually silently filtering them out. Locked tags are now excluded from the "added" count up front and surfaced in a separate "Skipped locked tag(s)" notice.
For the full version history, see CHANGELOG.md.
v0.22.0
- Added a lock toggle to the "All tags" table (new "Lock" column): a locked tag can't be selected via checkbox, can't be added to the merge basket (manually or by an approved AI suggestion), and can't be deleted, until unlocked again. Backed by term meta (
wpto_locked), cleaned up on uninstall when "Remove all plugin settings and export data" is enabled. - Labeled the "AI Analysis" tab and its headings as "(experimental)" to set expectations that AI-suggested merges are a newer, less battle-tested feature than the manual tools.
- Dropped the bundled
languages/*.po/.mo/.potfiles from the repository (regenerate locally as needed) and excluded them via.gitignore, matching the WordPress.org review guidance to rely on translate.wordpress.org for hosted translations instead of bundling them.
For the full version history, see CHANGELOG.md.
v0.21.2
- Added the
Release Asset: trueplugin header so Git Updater installs the zip attached to the GitHub Release instead of the rawmainbranch zip.
For the full version history, see CHANGELOG.md.
v0.21.1
- Silenced the remaining WordPress Plugin Check warnings on
$wpdb->insert()/update()/delete()calls inincludes/class-wpto-suggestions-repo.php(create_batch,mark_batch_done,mark_batch_failed,retry_batch,cancel_pending_batches,clear_for_new_analysis,insert_suggestions,set_suggestion_status,mark_applied): they write to the plugin's own custom tables through the safe wpdb API, with no core alternative for non-WP tables.
For the full version history, see CHANGELOG.md.
v0.21.0
- Fixed WordPress Plugin Check findings on
includes/class-wpto-suggestions-repo.php,includes/class-wpto-unused-tags.php, anduninstall.php: the existingphpcs:ignore WordPress.DB.PreparedSQL.InterpolatedTableNamecomments referenced a sniff code that doesn't exist, so none of them were actually suppressing anything. Replaced with the correct codes (DirectQuery,NoCaching,InterpolatedNotPrepared,PluginCheck.Security.DirectDB.UnescapedDBParameter, etc.) and a justification, since every affected query targets the plugin's own custom tables via a static, non-user-controlled name. - Added missing
translators:comments for the two merge-count_n()strings inincludes/class-wpto-admin-page.php, and explicitly cast their count argument before output. - Silenced nonce-verification warnings on read-only admin dispatch/listing code paths (
maybe_process_stats_tab_actions(), the tag stats table's search/sort) that already verify the nonce inside the handler they call, or don't mutate state. - Shortened the readme short description to fit WordPress.org's 150-character limit.
For the full version history, see CHANGELOG.md.