Cortaito

Description

Cortaito lets you create short links directly from your WordPress dashboard, track every click and see where your visitors come from — without sending data to any third-party shortening service.

Features:

  • Create short links with auto-generated or custom codes
  • Click statistics: country, city, device, browser and referrer
  • Optional link expiration date
  • Works on your main domain via /go/CODE — no extra subdomain needed
  • Optional custom subdomain (e.g. go.yourdomain.com) configurable from the Settings page
  • Geolocation via ip-api.com (can be disabled from Settings)
  • Clean uninstall: removes all tables and options

External services:

When geolocation is enabled (on by default), the visitor’s IP address is sent to ip-api.com to retrieve country and city data. No other personal information is transmitted. You can disable this at any time from Cortaito Settings.

  • ip-api.com service: https://ip-api.com
  • ip-api.com privacy policy: https://ip-api.com/docs/legal

Screenshots

Installation

  1. Upload the cortaito folder to /wp-content/plugins/.
  2. Activate the plugin through the Plugins menu.
  3. Go to Cortaito New link to create your first short link.
  4. (Optional) Go to Cortaito Settings to configure a custom subdomain.

FAQ

Do I need a subdomain to use Cortaito?

No. By default, short links use the /go/CODE path on your main domain (e.g. https://yourdomain.com/go/abc123). A custom subdomain is optional.

How do I set up a custom subdomain?

Go to Cortaito Settings, enter your subdomain (e.g. go.yourdomain.com), save, and then point that subdomain to your server via a DNS A or CNAME record. The plugin will guide you through the .htaccess update.

Can I disable geolocation?

Yes. Go to Cortaito Settings and uncheck Enable geolocation for click tracking. You can also use the cortaito_enable_geolocation filter in your theme or a custom plugin.

Is click data stored locally?

Yes. All click data is stored in your WordPress database. The only external request made (when geolocation is enabled) is to ip-api.com to look up the visitor’s country and city.

What happens when I delete the plugin?

All plugin data (tables, options) is removed automatically on deletion.

Reviews

There are no reviews for this plugin.

Contributors & Developers

“Cortaito” is open source software. The following people have contributed to this plugin.

Contributors

Translate “Cortaito” into your language.

Interested in development?

Browse the code, check out the SVN repository, or subscribe to the development log by RSS.

Changelog

1.7.3

  • Improved: Removed every remaining inline style="" attribute from the admin screens (settings, links list, stats and new-link form); all rules now live in assets/css/admin.css, which is already enqueued via wp_enqueue_style().
  • Fixed (accessibility): The hidden page <h1> on each admin screen now uses WordPress core’s .screen-reader-text class instead of style="display:none", so it stays available to screen readers instead of being hidden from everyone.

1.7.2

  • Fixed: Removed the duplicate “Tested up to” header from the plugin’s main PHP file; it is now declared only in readme.txt, as required by the Plugin Directory guidelines.
  • Fixed: The consent/redirect notice page no longer prints a raw <style> block; its CSS is now registered and enqueued via wp_register_style() / wp_add_inline_style().
  • Changed: The admin menu item no longer uses a crowded top-level position (20); it now sits near the bottom of the admin menu, below the core WordPress items.
  • Removed: Compiled .po/.mo translation files are no longer bundled in the plugin package, since translations are managed automatically through translate.wordpress.org. The .pot template remains for reference.

1.7.1

  • Fixed: Deactivating the plugin no longer leaves a stray empty # BEGIN Cortaito / # END Cortaito block in .htaccess when the subdomain rule was never enabled.
  • Fixed: The .htaccess block is now fully removed (markers included) on deactivation and on uninstall, instead of being left behind empty. Any duplicate leftover blocks from previous versions are also cleaned up automatically.
  • Added: uninstall.php now removes the .htaccess block too, as a safety net for when the plugin is deleted without being deactivated first.

1.7.0

  • Fixed: “Tested up to” now reflects an actual released WordPress version.
  • Fixed: Admin CSS/JS moved from inline <style>/<script> output to properly registered files via wp_enqueue_style()/wp_enqueue_script().
  • Improved: Completed full i18n coverage — every remaining hardcoded admin string (menu labels, headings, table columns, form labels, notices) is now translatable.
  • Added: English (en_US) translation included in /languages, since the plugin’s source strings are written in Spanish.
  • Added: Explicit load_plugin_textdomain() call so translations load correctly outside of WordPress.org hosting.

1.6.1

  • Fixed: .htaccess block status badge now correctly reflects real file content for any domain.
  • Fixed: Admin notices no longer appear inside the plugin header card.
  • Fixed: Text Domain updated to match plugin slug (cortaito-url-shortener).
  • Improved: Admin UI visual consistency aligned with Niquelao Image Optimizer.
  • Improved: uninstall.php now removes all plugin options on deletion.

1.5

  • Links now work on any domain via /go/CODE path — no hardcoded domain.
  • Added Settings page: configurable subdomain and geolocation toggle.
  • Geolocation now uses HTTPS and can be disabled; documented as external service.
  • Replaced str_shuffle() with random_bytes() for secure code generation.
  • Full i18n support: all strings wrapped in translation functions (Text Domain: cortaito).
  • Added uninstall.php for clean removal.
  • Added wp_cache_get/set on DB queries.
  • Fixed: str_shuffle deprecated in PHP 8.3.

1.4

  • Added link expiration date support.
  • Improved click tracking with referrer and browser detection.

1.3

  • Added geolocation via ip-api.com.
  • Added device detection (Mobile / Tablet / Desktop).

1.2

  • Added click statistics page per link.
  • Improved admin UI with copy-to-clipboard button.

1.1

  • Added .htaccess management for subdomain routing.
  • dbDelta() used for table creation and upgrades.

1.0

  • Initial release.