Skip to content
Gaurav TiwariChangelog

Plugin changelog

GT Link Manager

Manage branded redirects, affiliate links, and optional click analytics.

Latest
1.10.0
Releases
33
Updated
October 8, 2026
  1. Stable

    1.10.0

    Links and redirects are unchanged.

    Read full notes 4 changes
    • New AI agent support through Site Agent, a free plugin that connects agents such as Claude, ChatGPT and Cursor to your site. With Site Agent 0.4 or later, a connected agent gets the GT Link Manager skill automatically: it can find, create and update links, set country rules, organize categories and read analytics, using the same checks as the REST API.
    • New gtlm_agent() for integrations. It returns every link with the branded short link as url and the destination as target_url, the same shape as link lists. Permanent deletion and analytics changes stay in the dashboard.
    • New an AI agents page in the GT Links menu shows what a connected agent can do and how to connect one.
    • Improved settings are grouped into cards.
  2. Stable

    1.9.1

    Fixed: after an automatic update from 1.7 or earlier, every short link could return 404 until someone opened the dashboard. Database updates now run on the first request after an update.

    Read full notes 7 changes
    • Fixed after an automatic update from 1.7 or earlier, every short link could return 404 until someone opened the dashboard. Database updates now run on the first request after an update.
    • Fixed Quick Edit could rewrite a regex pattern or direct path as if it were a slug. Changing only the destination of ^old/(.*)$ saved the pattern as old, which then matched every URL containing "old". Renaming a link also changed its slug, and saving with Advanced redirects off turned direct and regex links into standard ones. Existing links now keep their slug, path or pattern.
    • Fixed with a persistent object cache, one failed database lookup could keep a short link returning 404 until it was edited.
    • Privacy: analytics keeps minute-level detail only as long as individual click records (seven days by default), then reduces each day to daily totals, existing data included. Country-rule outcomes are recorded only when countries are on, and empty or scripted user agents are no longer counted.
    • Fixed analytics stopped collecting at 100 MB and blamed stale reports. Collection no longer stops for size; past a storage warning level you set, Delete old data removes old days and frees the space. CSV export now works on long ranges and exports daily totals; its time column is now date.
    • New Top links shows each link's destination URL.
    • Improved the links list works on phones, rows are shorter, and the admin has clearer icons, status notices and an Edit Link title.
  3. Stable

    1.9.0

    Full changelog

    Read full notes 5 changes
    • Add opt-in Advanced Analytics with WordPress-time trends, referring-page and link reports, instant breakdown tabs, and CSV exports.
    • Keep analytics lightweight with no visitor scripts, cookies or beacons, bounded background processing, and configurable retention including Forever reports.
    • Simplify settings, improve accessibility and diagnostics, and add a copyable AI setup prompt.
    • Fix direct/regex REST paths, CSV roundtrips, redirect matching, and click-counter metadata.
    • Harden protected WordPress routes, CSV upload storage, and spreadsheet exports.
  4. Stable

    1.8.1

    Adds a hover-and-click copy button to the Branded URL column and the plugin's own icon in the admin menu, plus an expanded readme and FAQ. No database changes.

    Read full notes 6 changes

    = 1.8.0 = = 1.8.1 = Adds a hover-and-click copy button to the Branded URL column and the plugin's own icon in the admin menu, plus an expanded readme and FAQ. No database changes.

    • What's Changed
    • New a copy button on the Branded URL column. It appears when you hover the row or focus it with the keyboard, copies the full branded link, and confirms with an inline Copied badge that clears itself.
    • New the plugin's own icon now appears in the admin menu, replacing the generic WordPress link dashicon. It is painted as a mask filled with the menu's own text colour, so it matches the icons beside it in every state and every admin colour scheme, staying light on dark sidebars and dark on light ones.
    • Updated refreshed the WordPress.org plugin icon.
    • Commits
    • Release 1.8.1: copy button, brand menu icon, expanded readme (ead0ff0)
  5. Stable

    1.8.0

    Tested with WordPress 7.1. Fixes a soft 404 that made every dead, trashed, or deactivated short link return the site's front page at HTTP 200, and fixes space-separated rel values being silently dropped. Adds optional click counting (off by…

    Read full notes 18 changes

    = 1.7.1 = = 1.8.0 = Tested with WordPress 7.1. Fixes a soft 404 that made every dead, trashed, or deactivated short link return the site's front page at HTTP 200, and fixes space-separated rel values being silently dropped. Adds optional click counting (off by default), Undo for trash and status changes, optional automatic Trash cleanup (off for existing sites, so nothing in your Trash is deleted by updating), and an accessibility and native-UI pass on the admin screens. Adds one column to the links table on upgrade; existing links are untouched.

    • What's Changed
    • Fixed the links table collapsed narrow columns when many were shown at once. With every column visible, Mode and Clicks were squeezed to a few pixels and their values wrapped one character per line. Every column now has a minimum width, the wide ones wrap instead of being clipped, and the table scrolls sideways on its own rather than stretching the admin page.
    • New Optional click counting, off by default. Turn it on under Settings and each link gets a running total of how many times it has been followed, shown as a sortable Clicks column and included in CSV export. It stores one number per link and nothing else -- no IP address, user agent, referrer, or timestamp -- and the count is written after the redirect has already been sent, so the redirect itself is not slowed down. The plugin's suggested privacy-policy text updates itself to match whichever setting you choose. Use gtlm_count_click to skip clicks you do not want counted.
    • Fixed a deleted, trashed, or deactivated short link returned HTTP 200 with the site's front page instead of a 404. The prefix rewrite rule matches the whole namespace, so an unresolved slug fell through to the home page, and search engines could index every dead link as duplicate front-page content. Unresolved prefixed links now return a real 404 rendered by the theme's own template. Direct and regex mode still fall through untouched, and the gtlm_404_on_missing_link filter restores the old behaviour.
    • Fixed rel values separated by spaces were silently discarded. The plugin writes space-separated rel into Link headers and core Button blocks, but only accepted commas on input, so round-tripping a value emptied it. Commas, spaces, and arrays are all accepted now, and the allowed-token validation is unchanged.
    • Fixed the Active, Inactive, and Trash views were implemented but never rendered, leaving them reachable only by typing the URL by hand. They now appear above the links table.
    • Fixed bulk actions ran while the page rendered, which gave no confirmation message and re-ran the action on a browser refresh. They now run before output and redirect to a clean URL with a result message.
    • New Undo. Trashing, restoring, activating, and deactivating a link now offer a one-click Undo in the success notice, for single links and bulk selections alike.
    • New Trash retention. Links left in the Trash can be permanently deleted after a configurable number of days, set under Settings. New installs start at 30 days. Existing sites are left at 0 (keep forever) on upgrade, so nothing already sitting in your Trash is deleted because you updated; switch it on yourself when you want it.
    • New Empty Trash button on the Trash view.
    • Improved the admin screens now inherit the WordPress admin surface instead of painting over it. Custom admin colour schemes, high-contrast mode, and reduced-motion preferences are all respected.
    • Improved accessibility. Row checkboxes and every filter dropdown have proper labels, keyboard focus is visible, and the notice area sits where WordPress expects it.
    • Improved long URLs no longer break across three lines in the links table. The Branded URL column shows the readable path, with the full URL on hover and in the Copy URL action.
    • Improved a fresh install now records its schema version during activation instead of re-running the migration on the first admin page load.
    • Compatibility Tested against WordPress 7.1. Verified on a WordPress 7.1 and PHP 8.4 install: redirects, geolocation targeting, the REST API, CSV import and export, the links list table, and both block editor inserters all behave as before, with no deprecation notices raised.
    • Compatibility Confirmed the GT Link format and the core Button control still work inside the iframed block editor canvas, including search, insertion, and rel handling.
    • Commits
    • Release 1.8.0: WordPress 7.1 support, redirect fixes, trash undo, click counting (b120a8c)
  6. Stable

    1.7.1

    Fixes the GT Link inserter for the core Button block while preserving the Button block's native link settings.

    Read full notes 5 changes

    = 1.7.0 = = 1.7.1 = Fixes the GT Link inserter for the core Button block while preserving the Button block's native link settings.

    • What's Changed
    • Fixed The GT Link toolbar now works with the core Button block by updating the Button's native URL and rel attributes.
    • Improved Rich text and Button controls now share the same GT Link search popover, normalize rel attributes, and preserve noopener for buttons that open in a new tab.
    • Commits
    • Fix Core Button link inserter (f9bbe5a)
  7. Stable

    1.7.0

    Adds geolocation targeting: route each link by visitor country using the header your CDN already sends — no GeoIP database, no external API, no added latency. Two columns are added to the links table automatically on upgrade; existing links…

    Read full notes 23 changes

    = 1.6.1 = = 1.7.0 = Adds geolocation targeting: route each link by visitor country using the header your CDN already sends — no GeoIP database, no external API, no added latency. Two columns are added to the links table automatically on upgrade; existing links are untouched and keep redirecting exactly as before. Enable it under GT Links → Settings → Geolocation Targeting.

    • What's Changed
    • New Geolocation targeting. Any link can route visitors to a different destination based on their country, with rules evaluated in order and the first country match winning.
    • New Country detection with zero dependencies. The country is read from request variables your CDN or web server already provides — Cloudflare (CF-IPCountry), CloudFront, Vercel, Google App Engine, nginx GeoIP2, Apache mod_geoip, mod_maxminddb, or a custom header you name. No GeoIP database file, no third-party API, no outbound request.
    • New EU country group expands to all 27 member states in a single rule; extendable via gtlm_geo_country_groups.
    • New Per-rule status codes, and a "show a 404" fallback for visitors matching no rule.
    • New Geolocation settings section with a live "Detected Now" readout showing which country and source resolved for the current request — the fastest way to confirm your CDN is forwarding a country header.
    • New "Check Detection" button. Lists every country header present on the request with its raw value, and runs a loopback self-test — it sends the site a request carrying a country header and reports what the plugin detected at the other end. That proves detection works even on a local or staging install with no CDN in front, where "no country on this request" is correct rather than a fault. Also validates a country code you type before you use it in a rule.
    • New The detection readout distinguishes "nothing is proxying this site, so no country is expected" from "your CDN is in front but sent no country header" — only the second is a misconfiguration, and it now says how to fix it.
    • New Rule builder in the link editor. Numbered rows show match precedence, rules can be reordered, one-click picks cover common markets (US + CA, EU, UK, India, AU + NZ), the long country list is filterable, selections show as removable chips, and the "Everyone else" fallback reads as the final row. It warns when a country is listed twice (only the highest rule can ever match) or when a rule has countries but no URL.
    • New Rule preview. Pick a country and see exactly which rule wins and where it sends — evaluated in the browser against your unsaved edits, with no request made.
    • New Privacy disclosure. The plugin registers a suggested privacy-policy section under Settings → Privacy → Policy Guide, and states inline that country detection reads only a CDN-provided header — never the visitor's IP address, never an external service, and the country is never stored or logged.
    • Fixed a partial REST update (PATCH) of one field silently reset every field that was not included, because each write argument declared a schema default that WP_REST_Request materialises into the request. Sending only geo_rules would reset redirect_type to 301 — which quietly breaks geo targeting — and blank tags, notes, and rel. Omitted fields now keep their stored values. Create defaults are unchanged.
    • New Optional X-GTLM-Country debug response header showing the detected country, its source, and whether a rule matched.
    • New Geo rules are exposed in the REST API on /links (create, read, update) with a self-describing schema, so links can be geo-targeted programmatically. Posting geo_rules without geo_mode opts the link in automatically.
    • New Geo rules round-trip through CSV import and export; a malformed rules cell is dropped without failing the row.
    • New Geo column in the links list table, and geolocation status in Diagnostics.
    • Performance geolocation costs nothing on links that do not use it — the check is a single array read, and country detection is never invoked unless a matched link opts in. Detection and settings are resolved once per request.
    • Note: geo-targeted links should use 302, not 301. A 301 is cached by the browser permanently, which pins a visitor to whichever country they were in on their first click. The link editor warns when a geo link is set to 301.
    • Note: a country header can be forged on requests that reach your site without passing through your CDN, so the 404 fallback is not a security control. Behind Cloudflare, CF-IPCountry is rewritten at the edge and cannot be spoofed; the "Cloudflare only" detection method is the strictest setting.
    • Commits
    • Deploy the bare version to WordPress.org, not the tag name (03e7b9f)
    • Add geolocation targeting, bump to 1.7.0 (d45326c)
    • Add Playground blueprint for wp.org Live Preview (6ea77f0)
  8. Stable

    1.6.1

    Fixes nonce mismatch bug affecting trash/restore/delete actions, hardens regex pattern validation, adds REST API descriptions and category caching.

    Read full notes 10 changes

    = 1.6.0 = = 1.6.1 = Fixes nonce mismatch bug affecting trash/restore/delete actions, hardens regex pattern validation, adds REST API descriptions and category caching.

    • What's Changed
    • Fixed nonce mismatch bug — trash, restore, and permanent delete actions were failing due to inconsistent nonce prefixes.
    • Fixed potential ReDoS vulnerability — removed error suppression on regex pattern matching, added pattern length validation.
    • Standardized all nonce prefixes to gtlm_ across admin actions and list table.
    • Added REST API route descriptions to all endpoints for better discoverability.
    • Added object caching for admin category dropdown with proper invalidation on create, update, and delete.
    • Updated readme with free training course, developer reference, REST API guide, and new FAQ entries.
    • Commits
    • Add 1.6.1 changelog and upgrade notice to readme (fc0c2af)
    • 1.6.1 (c6e0f85)
  9. Stable

    1.6.0

    Adds direct (prefix-free) and regex (pattern-based) redirect modes. Enable in Settings > Advanced Redirects. Fully backwards compatible.

    Read full notes 13 changes

    = 1.5.3 = = 1.6.0 = Adds direct (prefix-free) and regex (pattern-based) redirect modes. Enable in Settings > Advanced Redirects. Fully backwards compatible.

    • What's Changed
    • Added advanced redirects: Direct (prefix-free) and Regex (pattern-based) link modes.
    • Direct links redirect without the prefix — e.g., yoursite.com/my-page instead of yoursite.com/go/my-page.
    • Regex links match request paths against patterns with capture group substitution in destination URLs.
    • New "Enable Advanced Redirects" toggle in Settings (off by default) to opt in.
    • Link edit form shows mode selector (Standard / Direct / Regex) with contextual fields.
    • Conflict detection warns when direct link paths match existing WordPress posts or pages.
    • Regex patterns are validated on save; invalid patterns are rejected.
    • List table shows link mode with filter support.
    • REST API accepts and returns link_mode, regex_replacement, and priority fields.
    • New database columns: link_mode, regex_replacement, priority — fully backwards compatible.
    • Commits
    • Add advanced redirects: direct (prefix-free) and regex link modes, bump to 1.6.0 (fc691d9)
  10. Stable

    1.5.3

    What's Changed

    Read full notes 4 changes
    • What's Changed
    • Fixed plugin zip size bloat — excluded .wordpress-org assets directory from distribution package.
    • Commits
    • Exclude .wordpress-org from dist zip, bump to 1.5.3 (9d8135b)
  11. Stable

    1.5.2

    Data is now preserved on uninstall by default. Enable "Delete Data on Uninstall" in Settings to remove all data.

    Read full notes 6 changes

    = 1.5.1 = = 1.5.2 = Data is now preserved on uninstall by default. Enable "Delete Data on Uninstall" in Settings to remove all data.

    • What's Changed
    • Added "Delete Data on Uninstall" setting — data is now preserved by default when the plugin is deleted.
    • Uninstall only removes tables and options if the user explicitly opts in via Settings.
    • Commits
    • Add opt-in data deletion on uninstall, bump to 1.5.2 (87f9b60)
    • added screenshots (6df05b4)
  12. Stable

    1.5.1

    First release of GT Link Manager v1.5.1.

    Read full notes 1 change
    • Initial Release: First release of GT Link Manager v1.5.1.
  13. Stable

    1.4.0

    Renamed internal code prefix from gt_ to gtlm_ (4+ characters) per WordPress.org guidelines.

    Read full notes 7 changes
    • Renamed internal code prefix from gt_ to gtlm_ (4+ characters) per WordPress.org guidelines.
    • Fixed nonce verification order in CSV import handler — nonce is now checked before reading POST data.
    • Fixed SQL injection vector — $orderby now uses %i identifier placeholder in prepared queries.
    • Added Source Code section to readme for compiled block editor assets.
    • Added card-based UI styling to all admin pages (edit link, categories, settings, import/export).
    • Settings page reorganized into General, Tools, and Diagnostics cards.
    • Clean uninstall now removes both old (gt_) and new (gtlm_) prefix options and tables.
  14. Stable

    1.3.1

    Block editor: aligned GT Link popover anchoring with core rich text behavior using selection-based anchor.

    Read full notes 1 change
    • Block editor: aligned GT Link popover anchoring with core rich text behavior using selection-based anchor.
  15. Stable

    1.3.0

    Refactored admin into separate actions and rendering classes for maintainability.

    Read full notes 11 changes
    • Refactored admin into separate actions and rendering classes for maintainability.
    • Added Pretty Links CSV import preset alongside Generic and LinkCentral.
    • Improved input sanitization on redirect URI parsing.
    • Added PHPCS configuration and Composer dev tooling.
    • Added uninstall.php for clean plugin removal (drops tables and options).
    • Improved build.sh with .distignore support and critical file verification.
    • Improved release workflow with version verification, checksums, and distribution validation.
    • Block editor popover anchor now uses bounding rect snapshot for reliable positioning.
    • Button primary color now follows WordPress admin theme color.
    • Lowered PHP requirement from 8.2 to 8.0.
    • Tested up to WordPress 6.9.
  16. Stable

    1.2.3

    Fixed release packaging bug that accidentally removed blocks/link-inserter/build/* from zip assets.

    Read full notes 2 changes
    • Fixed release packaging bug that accidentally removed blocks/link-inserter/build/* from zip assets.
    • GitHub release workflow now compiles block editor assets before zipping and verifies build files exist.
  17. Stable

    1.2.2

    Fixed block editor link inserter not appearing on WordPress 6.8+.

    Read full notes 4 changes
    • Fixed block editor link inserter not appearing on WordPress 6.8+.
    • Removed deprecated useAnchor hook that crashed the toolbar button on render.
    • Eliminated react-jsx-runtime dependency that prevented the script from loading on some WordPress versions.
    • Popover now anchors to the toolbar button for reliable positioning.
  18. Stable

    1.2.0

    Fixed critical bug: links disappeared after 1.1.9 update because new DB columns were not added on plugin update (only on fresh activation).

    Read full notes 4 changes
    • Fixed critical bug: links disappeared after 1.1.9 update because new DB columns were not added on plugin update (only on fresh activation).
    • Added automatic DB migration that runs on update to add missing columns and backfill existing rows.
    • Fixed WordPress admin sidebar menu getting unintended card styles on the Settings page.
    • Improved Settings page: Flush Permalinks and Run Diagnostics buttons are now inline, diagnostics output uses a clean table layout with status badges.
  19. Stable

    1.1.9

    Added link activate/deactivate toggle. Inactive links stop redirecting but remain in the database.

    Read full notes 7 changes
    • Added link activate/deactivate toggle. Inactive links stop redirecting but remain in the database.
    • Delete now moves links to trash instead of permanent deletion. Links can be restored from trash.
    • Trash view with restore and permanent delete actions.
    • New bulk actions: Activate, Deactivate, Move to Trash, Restore, Delete Permanently.
    • REST API: DELETE defaults to trash (use ?force=true for permanent). New /restore and /toggle-active endpoints.
    • Status column and views (All / Active / Inactive / Trash) in the links list table.
    • New is_active and trashed_at columns added to the links table on upgrade.
  20. Stable

    1.1.8

    Maintenance release.

    Read full notes 1 change
    • Maintenance release.
  21. Stable

    1.1.7

    Block editor: Fixed editor scroll jump when opening GT Link popover from the toolbar.

    Read full notes 2 changes
    • Block editor: Fixed editor scroll jump when opening GT Link popover from the toolbar.
    • Block editor: Improved search input focus behavior so opening popover does not move viewport.
  22. Stable

    1.1.6

    REST API: Added full pagination (page, per_page, category_id, orderby, order) to GET /links endpoint.

    Read full notes 5 changes
    • REST API: Added full pagination (page, per_page, category_id, orderby, order) to GET /links endpoint.
    • REST API: Added args schema validation to all write endpoints (links, categories, bulk-category).
    • Security Replaced innerHTML with DOM methods in admin quick edit to prevent XSS.
    • DB: Added rel whitelist validation on filter queries.
    • Build: build.sh now compiles block editor assets before packaging.
  23. Stable

    1.1.5

    Maintenance release.

    Read full notes 1 change
    • Maintenance release.
  24. Stable

    1.1.4

    Anchor popover to selected text using useAnchor from @wordpress/rich-text.

    Read full notes 1 change
    • Anchor popover to selected text using useAnchor from @wordpress/rich-text.
  25. Stable

    1.1.3

    Fixed format registration conflict with core/underline on WP 6.9+ (both used bare span tag).

    Read full notes 2 changes
    • Fixed format registration conflict with core/underline on WP 6.9+ (both used bare span tag).
    • Added unique className to avoid tagName collision.
  26. Stable

    1.1.2

    Switch to RichTextToolbarButton for standard format toolbar integration.

    Read full notes 1 change
    • Switch to RichTextToolbarButton for standard format toolbar integration.
  27. Stable

    1.1.1

    Force-inject format into RichText allowedFormats for reliable toolbar display.

    Read full notes 1 change
    • Force-inject format into RichText allowedFormats for reliable toolbar display.
  28. Stable

    1.1.0

    Rebuilt block editor link inserter with @wordpress/scripts build pipeline.

    Read full notes 3 changes
    • Rebuilt block editor link inserter with @wordpress/scripts build pipeline.
    • Fixed toolbar button not appearing in block editor.
    • Proper dependency resolution via index.asset.php.
  29. Stable

    1.0.4

    Fixed toolbar button registration in block editor for GT Link inserter.

    Read full notes 3 changes
    • Fixed toolbar button registration in block editor for GT Link inserter.
    • Added selected-text autofill in GT Link inserter search field.
    • Improved redirect detection for WordPress installs in subdirectories.
  30. Stable

    1.0.3

    Enhance block editor integration with additional dependencies and improved format registration

    Read full notes 1 change
    • Enhance block editor integration with additional dependencies and improved format registration
  31. Stable

    1.0.2

    Minor internal hardening and cleanup.

    Read full notes 1 change
    • Minor internal hardening and cleanup.
  32. Stable

    1.0.1

    Fixed uninstall to preserve links and settings data across reinstalls.

    Read full notes 1 change
    • Fixed uninstall to preserve links and settings data across reinstalls.
  33. Stable

    1.0.0

    Initial release.

    Read full notes 1 change
    • Initial release.