{"id":341198,"date":"2026-07-16T21:12:18","date_gmt":"2026-07-16T21:12:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/hxsr-smart-redirecter\/"},"modified":"2026-07-18T07:04:10","modified_gmt":"2026-07-18T07:04:10","slug":"hxsr-smart-redirecter","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/hxsr-smart-redirecter\/","author":23511001,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.2.0","stable_tag":"0.2.0","tested":"7.0.2","requires":"6.3","requires_php":"7.4","requires_plugins":null,"header_name":"HXSR \u2014 Smart Redirecter","header_author":"Youhei Okubo","header_description":"Code-First Smart Redirect Manager. Define custom slug-based short links with scheduled redirects, usage memos, access counting, QR code generation, and Markdown export.","assets_banners_color":"e3f1f4","last_updated":"2026-07-18 07:04:10","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/okuboyouhei\/hxsr-smart-redirecter","header_author_uri":"https:\/\/profiles.wordpress.org\/youheiokubo\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":75,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.1.13":{"tag":"0.1.13","author":"youheiokubo","date":"2026-07-16 21:11:54"},"0.2.0":{"tag":"0.2.0","author":"youheiokubo","date":"2026-07-18 07:04:10"}},"upgrade_notice":{"0.1.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3610736,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3610736,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3610736,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3610736,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.1.13","0.2.0"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Link management list","2":"Edit modal with QR preview and schedule","3":"Settings (prefix configuration)"}},"plugin_section":[],"plugin_tags":[17938,1373,727,271949,137],"plugin_category":[],"plugin_contributors":[266517],"plugin_business_model":[],"class_list":["post-341198","plugin","type-plugin","status-publish","hentry","plugin_tags-link-management","plugin_tags-qr-code","plugin_tags-redirect","plugin_tags-scheduled-redirect","plugin_tags-short-url","plugin_contributors-youheiokubo","plugin_committers-youheiokubo"],"banners":{"banner":"https:\/\/ps.w.org\/hxsr-smart-redirecter\/assets\/banner-772x250.png?rev=3610736","banner_2x":"https:\/\/ps.w.org\/hxsr-smart-redirecter\/assets\/banner-1544x500.png?rev=3610736","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/hxsr-smart-redirecter\/assets\/icon-128x128.png?rev=3610736","icon_2x":"https:\/\/ps.w.org\/hxsr-smart-redirecter\/assets\/icon-256x256.png?rev=3610736","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>HXSR (Smart Redirecter) is part of the <a href=\"https:\/\/github.com\/okuboyouhei\">HX Series<\/a> \u2014 a collection of AI-ready, buildless WordPress plugins following the WAHX stack philosophy.<\/p>\n\n<p><strong>Core features:<\/strong><\/p>\n\n<ul>\n<li><strong>Custom short links<\/strong> \u2014 Define your own slugs: <code>example.com\/go\/summer-sale<\/code><\/li>\n<li><strong>Custom prefix<\/strong> \u2014 Change <code>\/go\/<\/code> to anything you like (<code>\/r\/<\/code>, <code>\/link\/<\/code>, etc.)<\/li>\n<li><strong>Scheduled redirects<\/strong> \u2014 Set a date\/time to automatically switch the redirect destination<\/li>\n<li><strong>Chained schedules<\/strong> \u2014 Add multiple scheduled redirects in sequence<\/li>\n<li><strong>Usage memos<\/strong> \u2014 Note where each link is used (flyers, banners, email campaigns, etc.)<\/li>\n<li><strong>Access counting<\/strong> \u2014 Track total hits per link (no IP logging, privacy-safe)<\/li>\n<li><strong>QR code generation<\/strong> \u2014 Download as PNG, with or without a serial number<\/li>\n<li><strong>Post \/ Page targets<\/strong> \u2014 Redirect to a post or page by ID; the URL is resolved at runtime via <code>get_permalink()<\/code>, so links keep working across staging and production environments with different domains<\/li>\n<li><strong>Media Library integration<\/strong> \u2014 Redirect to Media Library items by attachment ID (great for PDFs and images), resolved at runtime via <code>wp_get_attachment_url()<\/code><\/li>\n<li><strong>Markdown export<\/strong> \u2014 Export any link's info as a <code>.md<\/code> file; auto-connects to HXMD if active (HX Bridge pattern)<\/li>\n<li><strong>302 redirects<\/strong> \u2014 Always temporary, cache-safe, correct for scheduled switching<\/li>\n<\/ul>\n\n<p><strong>AI-friendly documentation<\/strong> is bundled in the plugin zip (<code>CLAUDE.md<\/code>, <code>ai-reference.md<\/code>, <code>llms.txt<\/code>) \u2014 designed for use with Claude Code and other AI coding agents.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin uses the <strong>QR Server API<\/strong> (api.qrserver.com, operated by goQR.me) to generate QR code images.<\/p>\n\n<ul>\n<li><strong>What data is sent:<\/strong> the short link URL (e.g. <code>https:\/\/example.com\/go\/summer-sale\/<\/code>) is sent to api.qrserver.com when an administrator previews or downloads a QR code in the admin screen. No visitor data, personal data, or site credentials are ever sent.<\/li>\n<li><strong>When:<\/strong> only on explicit admin actions (QR preview \/ PNG download). Site visitors never trigger any external request.<\/li>\n<li><strong>Service terms:<\/strong> https:\/\/goqr.me\/api\/ and privacy policy: https:\/\/goqr.me\/privacy-safety-security\/<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/<\/code> or install via the WordPress admin.<\/li>\n<li>Activate the plugin.<\/li>\n<li>Go to <strong>Settings \u2192 HXSR<\/strong> to configure your prefix and add links.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"why%20302%20and%20not%20301%3F\"><h3>Why 302 and not 301?<\/h3><\/dt>\n<dd><p>HXSR is designed for scheduled and changeable redirects. 301 redirects are cached by browsers and would prevent scheduled switching from working reliably. 302 is always the correct choice here.<\/p><\/dd>\n<dt id=\"does%20this%20log%20visitor%20ips%3F\"><h3>Does this log visitor IPs?<\/h3><\/dt>\n<dd><p>No. HXSR only counts total accesses per link (a simple integer increment). No IP addresses, user agents, or timestamps are stored. Visitors never trigger any external request either \u2014 the QR Server API (see External services) is only called from the admin screen.<\/p><\/dd>\n<dt id=\"does%20clicking%20my%20own%20short%20links%20count%20toward%20the%20total%3F\"><h3>Does clicking my own short links count toward the total?<\/h3><\/dt>\n<dd><p>No. If you're logged in as an administrator (<code>manage_options<\/code>), visiting a short link still redirects you normally but does not increment the counter \u2014 only visits from logged-out visitors are counted. You can also manually reset any link's count to 0 from the links list.<\/p><\/dd>\n<dt id=\"what%20is%20the%20serial%20number%20on%20qr%20codes%3F\"><h3>What is the serial number on QR codes?<\/h3><\/dt>\n<dd><p>An optional 6-digit identifier (e.g. <code>SN:000042<\/code>) printed below the QR code image. Useful for tracking which physical printout or flyer a scan came from.<\/p><\/dd>\n<dt id=\"what%20is%20the%20hx%20bridge%20pattern%3F\"><h3>What is the HX Bridge pattern?<\/h3><\/dt>\n<dd><p>If the HXMD plugin is active, HXSR will automatically save link data as a Markdown log via HXMD. If HXMD is not installed, HXSR still works perfectly and offers standalone <code>.md<\/code> download.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>New: categories for links. Assign multiple free-form categories (tag style) to each short link and filter the list by clicking one. Useful for grouping by campaign, client, or print medium<\/li>\n<li>New: categories are included in search and in the Markdown export<\/li>\n<li>Note: this release adds a <code>categories<\/code> column to the links table; the schema updates automatically on upgrade<\/li>\n<\/ul>\n\n<h4>0.1.13<\/h4>\n\n<ul>\n<li>Fix: restored the \"Plugin URI\" header now that the GitHub repository (https:\/\/github.com\/okuboyouhei\/hxsr-smart-redirecter) is public<\/li>\n<\/ul>\n\n<h4>0.1.12<\/h4>\n\n<ul>\n<li>Fix: removed the \"Plugin URI\" header (repository not yet public; the field is optional and was flagged as a dead link during WordPress.org review)<\/li>\n<li>Fix: corrected the goQR.me privacy policy URL in the \"External services\" section (was pointing to a 404)<\/li>\n<\/ul>\n\n<h4>0.1.11<\/h4>\n\n<ul>\n<li>New: live duplicate-slug check while typing \u2014 shows a warning under the Slug field and disables Save, instead of waiting for a failed save to report it (no scrolling needed, since the Slug field is always at the top of the modal)<\/li>\n<\/ul>\n\n<h4>0.1.10<\/h4>\n\n<ul>\n<li>Fix: on WP_DEBUG_DISPLAY-enabled sites, a duplicate-slug save could leak a raw database error page into the AJAX response, breaking JSON parsing so the error silently failed to display. Expected constraint-violation errors are now suppressed at the query level.<\/li>\n<li>Fix: save error message now names the conflicting slug specifically<\/li>\n<li>Change: the in-modal error box now scrolls into view automatically, so it's visible even if you had scrolled down while filling the form (e.g. adding a schedule)<\/li>\n<\/ul>\n\n<h4>0.1.9<\/h4>\n\n<ul>\n<li>New: reset access count to 0 from the links list (small reset icon next to the count)<\/li>\n<li>Change: logged-in administrators (manage_options) no longer increment the access count when visiting a short link themselves \u2014 only real visitor traffic is counted<\/li>\n<\/ul>\n\n<h4>0.1.8<\/h4>\n\n<ul>\n<li>Refactor: removed all inline style=\"\" attributes from the admin template (21 occurrences) and moved them into CSS classes. Previous layout fixes had inconsistent effect because inline styles on individual elements were competing with the stylesheet; the admin UI now fully follows the --hxsr-* token system.<\/li>\n<\/ul>\n\n<h4>0.1.7<\/h4>\n\n<ul>\n<li>Style: fixed list row layout \u2014 serial number and memo icon now sit on one line instead of wrapping separately<\/li>\n<li>Style: Delete button now matches the other pill buttons instead of looking like plain text<\/li>\n<li>Style: Add Schedule fields top-align consistently across URL \/ Post-Page \/ Media (was bottom-aligned, which broke when field heights differed)<\/li>\n<\/ul>\n\n<h4>0.1.6<\/h4>\n\n<ul>\n<li>New: search by QR serial number \u2014 \"SN:000001\", \"000001\", or the plain ID all resolve to the link<\/li>\n<li>New: serial number shown in the links list (under the short URL)<\/li>\n<\/ul>\n\n<h4>0.1.5<\/h4>\n\n<ul>\n<li>Change: Markdown export now opens a copy-to-clipboard viewer instead of downloading a file (downloads could stall as .crdownload)<\/li>\n<li>Fix: icon\/text alignment in pill buttons<\/li>\n<\/ul>\n\n<h4>0.1.4<\/h4>\n\n<ul>\n<li>Fix: serial number on QR downloads was invisible (GD colors were allocated on the source palette image \u2014 black bar with black text)<\/li>\n<li>Fix: save errors were hidden behind the modal \u2014 errors now show inside the modal<\/li>\n<li>New: search box on the links list (matches slug, redirect URL, and memo; uses plugin-prefixed <code>hxsr_s<\/code> param)<\/li>\n<li>Style: Add Schedule form realigned (labels above fields, baseline-aligned row)<\/li>\n<\/ul>\n\n<h4>0.1.3<\/h4>\n\n<ul>\n<li>Style: admin UI redesigned with the HX Series token system (HXRV-style CSS custom properties, indigo brand color)<\/li>\n<li>Style: segmented control for redirect type, dashicons instead of emoji, x-cloak to prevent modal flash<\/li>\n<\/ul>\n\n<h4>0.1.2<\/h4>\n\n<ul>\n<li>Fix: fatal error when rendering the link list after saving a link (leftover variable from template refactor)<\/li>\n<\/ul>\n\n<h4>0.1.1<\/h4>\n\n<ul>\n<li>Fix: admin screen was blank \u2014 Alpine.js initialized before the component was defined (script loading order)<\/li>\n<li>Change: moved to a top-level admin menu (dashicons-randomize)<\/li>\n<li>Change: removed unused bundled htmx (admin uses fetch, visitors load zero JS)<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<\/ul>","raw_excerpt":"Code-First Smart Redirect Manager. Custom short links with scheduled redirects, QR codes, usage memos, and Markdown export.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/341198","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=341198"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/youheiokubo"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=341198"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=341198"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=341198"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=341198"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=341198"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=341198"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}