{"id":312711,"date":"2026-05-14T20:59:23","date_gmt":"2026-05-14T20:59:23","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/astroway\/"},"modified":"2026-08-03T12:53:24","modified_gmt":"2026-08-03T12:53:24","slug":"astroway","status":"publish","type":"plugin","link":"https:\/\/sw.wordpress.org\/plugins\/astroway\/","author":23499184,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.0.2","requires":"5.0","requires_php":"7.4","requires_plugins":null,"header_name":"AstroWay \u2013 Astrology & Horoscopes","header_author":"AstroWay","header_description":"Natal charts, synastry, transits, Tarot, Numerology, Human Design, AI horoscopes \u2014 shortcodes + Gutenberg blocks. Powered by api.astroway.info.","assets_banners_color":"201d20","last_updated":"2026-08-03 12:53:24","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/astroway\/astroway-wp-plugin","header_author_uri":"https:\/\/astroway.info","rating":0,"author_block_rating":0,"active_installs":0,"downloads":1249,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.10.7":{"tag":"0.10.7","author":"astrowayteam","date":"2026-07-29 23:50:47"},"0.2.3":{"tag":"0.2.3","author":"astrowayteam","date":"2026-05-14 20:59:06"},"0.3.0":{"tag":"0.3.0","author":"astrowayteam","date":"2026-05-15 00:08:14"},"0.4.0":{"tag":"0.4.0","author":"astrowayteam","date":"2026-05-15 08:36:31"},"0.5.0":{"tag":"0.5.0","author":"astrowayteam","date":"2026-05-15 17:26:30"},"0.5.1":{"tag":"0.5.1","author":"astrowayteam","date":"2026-05-19 22:19:57"},"0.5.2":{"tag":"0.5.2","author":"astrowayteam","date":"2026-05-21 22:46:53"},"0.5.3":{"tag":"0.5.3","author":"astrowayteam","date":"2026-05-25 12:58:57"},"0.5.4":{"tag":"0.5.4","author":"astrowayteam","date":"2026-05-28 13:45:31"},"0.5.5":{"tag":"0.5.5","author":"astrowayteam","date":"2026-05-29 22:10:29"},"0.6.0":{"tag":"0.6.0","author":"astrowayteam","date":"2026-05-29 22:28:58"},"0.6.1":{"tag":"0.6.1","author":"astrowayteam","date":"2026-05-29 22:30:00"},"0.6.2":{"tag":"0.6.2","author":"astrowayteam","date":"2026-05-29 22:31:02"},"0.6.3":{"tag":"0.6.3","author":"astrowayteam","date":"2026-05-29 22:32:09"},"0.6.4":{"tag":"0.6.4","author":"astrowayteam","date":"2026-05-29 22:33:21"},"0.6.5":{"tag":"0.6.5","author":"astrowayteam","date":"2026-06-01 15:52:35"},"0.7.0":{"tag":"0.7.0","author":"astrowayteam","date":"2026-06-08 14:03:35"},"0.7.1":{"tag":"0.7.1","author":"astrowayteam","date":"2026-06-11 13:56:16"},"0.7.2":{"tag":"0.7.2","author":"astrowayteam","date":"2026-06-16 10:36:14"},"0.7.3":{"tag":"0.7.3","author":"astrowayteam","date":"2026-06-16 21:27:50"},"0.7.4":{"tag":"0.7.4","author":"astrowayteam","date":"2026-06-18 12:49:22"},"0.7.5":{"tag":"0.7.5","author":"astrowayteam","date":"2026-06-22 15:20:39"},"0.8.0":{"tag":"0.8.0","author":"astrowayteam","date":"2026-06-29 14:01:20"},"0.8.1":{"tag":"0.8.1","author":"astrowayteam","date":"2026-07-03 21:08:01"},"0.8.2":{"tag":"0.8.2","author":"astrowayteam","date":"2026-07-06 13:41:19"},"0.8.3":{"tag":"0.8.3","author":"astrowayteam","date":"2026-07-13 12:28:32"},"0.9.0":{"tag":"0.9.0","author":"astrowayteam","date":"2026-07-20 12:13:25"},"0.9.1":{"tag":"0.9.1","author":"astrowayteam","date":"2026-07-23 11:47:41"},"0.9.2":{"tag":"0.9.2","author":"astrowayteam","date":"2026-07-27 12:53:26"},"1.0.0":{"tag":"1.0.0","author":"astrowayteam","date":"2026-08-03 12:53:24"}},"upgrade_notice":{"1.0.0":"<p>Seven widgets now render into your page as indexable text instead of loading in a frame, and their markup changed accordingly. If you wrote custom CSS against the old frame markup, review it after upgrading, or set Settings \u2192 AstroWay \u2192 Render mode to &quot;In an iframe&quot; to keep the previous output.<\/p>","0.3.0":"<p>Adds a live Status panel on the API Key admin page (plan \/ credits \/ period \/ domain) and a <code>lang<\/code> attribute on all shortcodes and Gutenberg blocks for 21 api-supported locales. Drop-in upgrade.<\/p>","0.2.3":"<p>Admin UI polish, unified hero, restored sidebar, city search on the Shortcodes page, 20 bundled translations. Drop-in upgrade.<\/p>","0.2.2":"<p>Admin split into 3 submenu pages (API Key \/ Settings \/ Shortcodes). Drop-in upgrade.<\/p>","0.2.1":"<p>Settings page moves to a top-level admin menu with a brand icon. Drop-in upgrade.<\/p>","0.2.0":"<p>Adds Settings page for API key configuration. Drop-in upgrade from 0.1.0, anonymous mode shortcodes continue to work.<\/p>","0.1.0":"<p>First functional release. 5 shortcodes + 5 Gutenberg blocks work without an API key in anonymous mode (30 requests\/hour per IP).<\/p>","0.1.0-alpha.1":"<p>Pre-release scaffold. Not for production use.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3532486,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3532486,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3532486,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3532486,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"astroway\/daily-horoscope":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"astroway\/daily-horoscope","title":"AstroWay: Daily Horoscope","category":"widgets","description":"Daily horoscope text for a zodiac sign.","textdomain":"astroway","icon":"calendar-alt","supports":{"html":false,"align":["wide","center"],"customClassName":true},"attributes":{"sign":{"type":"string","default":""},"lang":{"type":"string","default":""}},"editorScript":"astroway-blocks-editor"},"astroway\/daily-tarot":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"astroway\/daily-tarot","title":"AstroWay: Daily Tarot","category":"widgets","description":"Single-card daily Tarot draw with interpretation.","textdomain":"astroway","icon":"image-flip-horizontal","supports":{"html":false,"align":["center"],"customClassName":true},"attributes":{"deck":{"type":"string","default":"rider-waite","enum":["rider-waite","marseille","lenormand"]},"lang":{"type":"string","default":""}},"editorScript":"astroway-blocks-editor"},"astroway\/synastry":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"astroway\/synastry","title":"AstroWay: Synastry Compatibility","category":"widgets","description":"Synastry compatibility score and top inter-aspects for two birth charts, served by api.astroway.info as a responsive iframe.","textdomain":"astroway","icon":"heart","supports":{"html":false,"align":["wide","center"],"customClassName":true},"attributes":{"date_a":{"type":"string","default":""},"time_a":{"type":"string","default":""},"lat_a":{"type":"string","default":""},"lon_a":{"type":"string","default":""},"tz_a":{"type":"string","default":""},"date_b":{"type":"string","default":""},"time_b":{"type":"string","default":""},"lat_b":{"type":"string","default":""},"lon_b":{"type":"string","default":""},"tz_b":{"type":"string","default":""},"theme":{"type":"string","default":""},"lang":{"type":"string","default":""}},"editorScript":"astroway-blocks-editor"},"astroway\/numerology":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"astroway\/numerology","title":"AstroWay: Numerology","category":"widgets","description":"Numerology core numbers (Life Path, Expression, Soul Urge, Personality) served by api.astroway.info as a responsive iframe.","textdomain":"astroway","icon":"editor-ol","supports":{"html":false,"align":["wide","center"],"customClassName":true},"attributes":{"name":{"type":"string","default":""},"date":{"type":"string","default":""},"system":{"type":"string","default":"pythagorean"},"theme":{"type":"string","default":""},"lang":{"type":"string","default":""}},"editorScript":"astroway-blocks-editor"},"astroway\/panchang":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"astroway\/panchang","title":"AstroWay: Daily Panchang","category":"widgets","description":"Daily Panchang (tithi, nakshatra, yoga, karana, vara, rahu-kaal) for a date and location, served by api.astroway.info as a responsive iframe.","textdomain":"astroway","icon":"calendar-alt","supports":{"html":false,"align":["wide","center"],"customClassName":true},"attributes":{"date":{"type":"string","default":""},"lat":{"type":"string","default":""},"lon":{"type":"string","default":""},"tz":{"type":"string","default":""},"theme":{"type":"string","default":""},"lang":{"type":"string","default":""}},"editorScript":"astroway-blocks-editor"},"astroway\/planet-of-day":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"astroway\/planet-of-day","title":"AstroWay: Planet of the Day","category":"widgets","description":"Traditional planetary ruler of the weekday, with its glyph and themes, rendered into the page.","textdomain":"astroway","icon":"star-filled","supports":{"html":false,"align":["wide","center"],"customClassName":true},"attributes":{"date":{"type":"string","default":""},"lang":{"type":"string","default":""}},"editorScript":"astroway-blocks-editor"},"astroway\/natal-chart":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"astroway\/natal-chart","title":"AstroWay: Natal Chart","category":"widgets","description":"Natal chart wheel served by api.astroway.info as a responsive iframe.","textdomain":"astroway","icon":"star-filled","supports":{"html":false,"align":["wide","full","center"],"customClassName":true},"attributes":{"date":{"type":"string","default":""},"time":{"type":"string","default":""},"lat":{"type":"string","default":""},"lon":{"type":"string","default":""},"name":{"type":"string","default":""},"tz":{"type":"string","default":""},"lang":{"type":"string","default":""}},"editorScript":"astroway-blocks-editor"},"astroway\/transit":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"astroway\/transit","title":"AstroWay: Transit Sky","category":"widgets","description":"Snapshot of the transiting planets' signs and degrees for a date, served by api.astroway.info as a responsive iframe.","textdomain":"astroway","icon":"visibility","supports":{"html":false,"align":["wide","center"],"customClassName":true},"attributes":{"date":{"type":"string","default":""},"theme":{"type":"string","default":""},"lang":{"type":"string","default":""}},"editorScript":"astroway-blocks-editor"},"astroway\/transit-timeline":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"astroway\/transit-timeline","title":"AstroWay: Moon Transit Timeline","category":"widgets","description":"The next seven days of Moon ingresses, served by api.astroway.info as a responsive iframe.","textdomain":"astroway","icon":"clock","supports":{"html":false,"align":["wide","center"],"customClassName":true},"attributes":{"date":{"type":"string","default":""},"theme":{"type":"string","default":""},"lang":{"type":"string","default":""}},"editorScript":"astroway-blocks-editor"},"astroway\/monthly-forecast":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"astroway\/monthly-forecast","title":"AstroWay: Monthly Forecast","category":"widgets","description":"Four weeks ahead for one sign, each week with its own theme, served as a responsive iframe.","textdomain":"astroway","icon":"chart-line","supports":{"html":false,"align":["wide","center"],"customClassName":true},"attributes":{"sign":{"type":"string","default":""},"date":{"type":"string","default":""},"theme":{"type":"string","default":""},"lang":{"type":"string","default":""}},"editorScript":"astroway-blocks-editor"},"astroway\/monthly-horoscope":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"astroway\/monthly-horoscope","title":"AstroWay: Monthly Horoscope","category":"widgets","description":"Horoscope for the current month, anchored to the 1st, rendered into the page as text.","textdomain":"astroway","icon":"calendar","supports":{"html":false,"align":["wide","center"],"customClassName":true},"attributes":{"sign":{"type":"string","default":""},"date":{"type":"string","default":""},"lang":{"type":"string","default":""}},"editorScript":"astroway-blocks-editor"},"astroway\/bodygraph":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"astroway\/bodygraph","title":"AstroWay: Human Design Bodygraph","category":"widgets","description":"Human Design bodygraph with type, profile, and gates.","textdomain":"astroway","icon":"networking","supports":{"html":false,"align":["wide","center"],"customClassName":true},"attributes":{"date":{"type":"string","default":""},"time":{"type":"string","default":""},"lat":{"type":"string","default":""},"lon":{"type":"string","default":""},"name":{"type":"string","default":""},"tz":{"type":"string","default":""},"lang":{"type":"string","default":""}},"editorScript":"astroway-blocks-editor"},"astroway\/kundli":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"astroway\/kundli","title":"AstroWay: Vedic Kundli","category":"widgets","description":"Vedic North-Indian kundli (D1) chart served by api.astroway.info as a responsive iframe.","textdomain":"astroway","icon":"star-filled","supports":{"html":false,"align":["wide","full","center"],"customClassName":true},"attributes":{"date":{"type":"string","default":""},"time":{"type":"string","default":""},"lat":{"type":"string","default":""},"lon":{"type":"string","default":""},"tz":{"type":"string","default":""},"theme":{"type":"string","default":""},"lang":{"type":"string","default":""}},"editorScript":"astroway-blocks-editor"},"astroway\/mini-chart":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"astroway\/mini-chart","title":"AstroWay: Mini Birth Chart","category":"widgets","description":"The natal wheel drawn small, for a sidebar, served by api.astroway.info as a responsive iframe.","textdomain":"astroway","icon":"chart-pie","supports":{"html":false,"align":["wide","center"],"customClassName":true},"attributes":{"date":{"type":"string","default":""},"time":{"type":"string","default":""},"lat":{"type":"string","default":""},"lon":{"type":"string","default":""},"tz":{"type":"string","default":""},"theme":{"type":"string","default":""},"lang":{"type":"string","default":""}},"editorScript":"astroway-blocks-editor"},"astroway\/moon-phase":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"astroway\/moon-phase","title":"AstroWay: Moon Phase","category":"widgets","description":"Current moon phase with illumination percentage.","textdomain":"astroway","icon":"marker","supports":{"html":false,"align":["center"],"customClassName":true},"attributes":{"date":{"type":"string","default":""},"lang":{"type":"string","default":""}},"editorScript":"astroway-blocks-editor"},"astroway\/weekly-horoscope":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"astroway\/weekly-horoscope","title":"AstroWay: Weekly Horoscope","category":"widgets","description":"Horoscope for the current week, anchored to Monday, rendered into the page as text.","textdomain":"astroway","icon":"calendar-alt","supports":{"html":false,"align":["wide","center"],"customClassName":true},"attributes":{"sign":{"type":"string","default":""},"date":{"type":"string","default":""},"lang":{"type":"string","default":""}},"editorScript":"astroway-blocks-editor"}},"tagged_versions":["0.10.7","0.2.3","0.3.0","0.4.0","0.5.0","0.5.1","0.5.2","0.5.3","0.5.4","0.5.5","0.6.0","0.6.1","0.6.2","0.6.3","0.6.4","0.6.5","0.7.0","0.7.1","0.7.2","0.7.3","0.7.4","0.7.5","0.8.0","0.8.1","0.8.2","0.8.3","0.9.0","0.9.1","0.9.2","1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3574123,"resolution":"1","location":"assets","locale":"","width":1280,"height":1952},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3574123,"resolution":"2","location":"assets","locale":"","width":1280,"height":1357},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3574123,"resolution":"3","location":"assets","locale":"","width":1280,"height":2674},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3574123,"resolution":"4","location":"assets","locale":"","width":1280,"height":800},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3574123,"resolution":"5","location":"assets","locale":"","width":1280,"height":800}},"screenshots":{"1":"A daily horoscope rendered straight into the page. The text is part of your HTML, so search engines index it and screen readers announce it, and it takes the type and colours of your own theme. No frame and no JavaScript involved.","2":"A birth chart with the reading beside the wheel: every planet with its sign, degree, house and retrograde marker, the Ascendant, the Midheaven and the major aspects. All of it is text on your page rather than a picture.","3":"The weekly horoscope keeps its shape. The API answers in Markdown, and the day-by-day notes and life areas arrive as real lists rather than a wall of prose.","4":"The same three cards on a light background and on a dark one. Nothing was configured between the two: the cards borrow the colour of the text around them.","5":"Every widget is also a block. What the editor previews is the finished card, not a placeholder, and the zodiac sign and language are ordinary Inspector controls.","6":"Settings \u2192 AstroWay \u2192 Shortcodes. Every shortcode with its parameters and a copy button, plus a city search that fills in coordinates and timezone for you."}},"plugin_section":[],"plugin_tags":[8886,265405,8889,262985,24224],"plugin_category":[],"plugin_contributors":[262987],"plugin_business_model":[],"class_list":["post-312711","plugin","type-plugin","status-publish","hentry","plugin_tags-astrology","plugin_tags-birth-chart","plugin_tags-horoscope","plugin_tags-natal-chart","plugin_tags-tarot","plugin_contributors-astrowayteam","plugin_committers-astrowayteam"],"banners":{"banner":"https:\/\/ps.w.org\/astroway\/assets\/banner-772x250.png?rev=3532486","banner_2x":"https:\/\/ps.w.org\/astroway\/assets\/banner-1544x500.png?rev=3532486","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/astroway\/assets\/icon-128x128.png?rev=3532486","icon_2x":"https:\/\/ps.w.org\/astroway\/assets\/icon-256x256.png?rev=3532486","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/astroway\/assets\/screenshot-1.png?rev=3574123","caption":"A daily horoscope rendered straight into the page. The text is part of your HTML, so search engines index it and screen readers announce it, and it takes the type and colours of your own theme. No frame and no JavaScript involved."},{"src":"https:\/\/ps.w.org\/astroway\/assets\/screenshot-2.png?rev=3574123","caption":"A birth chart with the reading beside the wheel: every planet with its sign, degree, house and retrograde marker, the Ascendant, the Midheaven and the major aspects. All of it is text on your page rather than a picture."},{"src":"https:\/\/ps.w.org\/astroway\/assets\/screenshot-3.png?rev=3574123","caption":"The weekly horoscope keeps its shape. The API answers in Markdown, and the day-by-day notes and life areas arrive as real lists rather than a wall of prose."},{"src":"https:\/\/ps.w.org\/astroway\/assets\/screenshot-4.png?rev=3574123","caption":"The same three cards on a light background and on a dark one. Nothing was configured between the two: the cards borrow the colour of the text around them."},{"src":"https:\/\/ps.w.org\/astroway\/assets\/screenshot-5.png?rev=3574123","caption":"Every widget is also a block. What the editor previews is the finished card, not a placeholder, and the zodiac sign and language are ordinary Inspector controls."}],"raw_content":"<!--section=description-->\n<p>Paste one shortcode into a page and the horoscope is on it: real text, in your theme's own fonts and colours, inside the HTML that search engines read. No frame, no JavaScript, no account, no API key, no credit card.<\/p>\n\n<h4>Three steps to the first widget<\/h4>\n\n<ol>\n<li>Install and activate. There is nothing to configure and nothing to sign up for.<\/li>\n<li>Paste this into any post or page: <code>[astroway_daily_horoscope sign=\"leo\"]<\/code><\/li>\n<li>Open the page. The reading is there, styled like the rest of your content.<\/li>\n<\/ol>\n\n<p>The moon phase takes no parameters at all, <code>[astroway_moon_phase]<\/code>. A birth chart takes a date, a time and a place:<\/p>\n\n<pre><code>[astroway_natal date=\"1990-05-15\" time=\"14:30\" lat=\"50.45\" lon=\"30.52\" tz=\"Europe\/Kyiv\"]\n<\/code><\/pre>\n\n<p>AstroWay \u2192 Shortcodes in your admin lists every shortcode with its parameters and a copy button, next to a city search that fills in coordinates and timezone for you. Every one of them is a Gutenberg block as well: type <code>\/astroway<\/code> in the editor and the preview shows the finished card, not a placeholder.<\/p>\n\n<h4>What renders into the page<\/h4>\n\n<p>Seven widgets are rendered by your own server directly into the page: daily, weekly and monthly horoscopes, moon phase, Tarot card of the day (Rider-Waite deck), planet of the day, and the natal chart. Their text is part of your HTML, so search engines index it, screen readers announce it, and it inherits your theme's fonts and colours instead of sitting in a frame that ignores them. The one exception is the natal chart's wheel, which stays a drawing produced by the API and therefore keeps a palette of its own; <code>theme=\"light\"<\/code> or <code>theme=\"console\"<\/code> on the shortcode matches it to your design. Each answer is cached until the underlying data actually changes, so a page carrying all twelve signs spends twelve requests a day rather than twelve an hour. This runs on the anonymous per-site allowance of 300 requests an hour, with no key and no account.<\/p>\n\n<h4>What still loads in a frame<\/h4>\n\n<p>Widgets that have no page-side template yet, and any widget whose data cannot be fetched at that moment, fall back to an embedded frame loaded by the visitor's own browser (30 requests\/hour per visitor IP). Every widget the plugin ships works this way without a key: nothing here is reserved for a paid plan. An API key is for calling api.astroway.info yourself, where the free tier gives 10,000 calls a month and paid plans raise the limits further.<\/p>\n\n<p>Under the hood the widgets are powered by api.astroway.info, with 700+ endpoints covering Western, Vedic, Hellenistic, Chinese and Mayan astrology, Tarot (Rider-Waite, Marseille, Lenormand), Numerology (Pythagorean, Chaldean, Kabbalistic, Tamil), Human Design and AI horoscopes.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to <strong>api.astroway.info<\/strong>, the AstroWay Calculation API operated by the AstroWay Team, to render astrology widgets and tarot readings. No external request is made until a widget is actually rendered on a page where one of the plugin's shortcodes or Gutenberg blocks is used.<\/p>\n\n<p><strong>What is sent:<\/strong><\/p>\n\n<ul>\n<li>When a widget your server renders into the page is refreshed (daily, weekly and monthly horoscope, moon phase, daily tarot, planet of the day, natal chart): the parameters provided in the shortcode (zodiac sign, or date, time, latitude and longitude) plus your site's own address, sent so the request is counted against your site's allowance. The request is made by your server, not by the visitor's browser, so <strong>the visitor's IP address is not sent at all<\/strong>, and it is only made when the cached answer has expired.<\/li>\n<li>When a widget falls back to an embedded frame (bodygraph, synastry, kundli, panchang, transit, numerology, the Marseille and Lenormand tarot decks, and any widget whose data could not be fetched): the visitor's browser loads that frame directly from api.astroway.info, so the parameters in the shortcode and the visitor's IP address reach the service, the latter for anonymous rate-limiting. Nothing about that visitor passes through your server.<\/li>\n<li>When the site administrator clicks \"Verify Key\" or \"Test Connection\" in the Settings screen: the configured API key and a small diagnostics payload.<\/li>\n<\/ul>\n\n<p><strong>When this happens:<\/strong><\/p>\n\n<ul>\n<li>On frontend page render (only on pages where an AstroWay shortcode or block is present).<\/li>\n<li>On explicit admin action (Verify, Test Connection, Purge Cache).<\/li>\n<\/ul>\n\n<p><strong>No data is sent on plugin activation, deactivation, or admin pages without explicit user action.<\/strong><\/p>\n\n<ul>\n<li>Service URL: <code>https:\/\/api.astroway.info\/v1\/<\/code><\/li>\n<li>Terms of Service: https:\/\/api.astroway.info\/terms<\/li>\n<li>Privacy Policy: https:\/\/api.astroway.info\/privacy<\/li>\n<\/ul>\n\n<h3>Privacy<\/h3>\n\n<p>This plugin stores the following on the WordPress site:<\/p>\n\n<ul>\n<li>The site administrator's API key (if entered), stored in the <code>wp_options<\/code> table under <code>astroway_settings<\/code>. Visible only to users with <code>manage_options<\/code> capability.<\/li>\n<li>WP transient cache of API responses (prefix <code>astroway_v1_<\/code>) to reduce repeat external calls. Cache contents are chart\/horoscope\/tarot output, no visitor PII beyond what was submitted via shortcode arguments. Purged via Settings \u2192 AstroWay \u2192 Purge Cache.<\/li>\n<\/ul>\n\n<p><strong>This plugin does not set any cookies on visitor browsers, does not use third-party tracking, and does not transmit visitor data to anyone other than api.astroway.info (see External services above).<\/strong><\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin via Plugins \u2192 Add New, or unzip into <code>\/wp-content\/plugins\/<\/code>, then activate it through the Plugins menu.<\/li>\n<li>Paste a shortcode into any post or page: <code>[astroway_daily_horoscope sign=\"leo\"]<\/code>, or type <code>\/astroway<\/code> in the block editor.<\/li>\n<li>Open the page. Nothing else is required: no account, no API key, no configuration.<\/li>\n<\/ol>\n\n<p>Optional: AstroWay \u2192 API Key, to paste a key from api.astroway.info. Every widget works without one; a key is what you use when you call the API yourself.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20astroway%20free%3F%20are%20there%20any%20hidden%20costs%3F\"><h3>Is AstroWay free? Are there any hidden costs?<\/h3><\/dt>\n<dd><p>Yes. The plugin is free and open source, and the core widgets work with no account, no API key, and no credit card. The seven widgets your server renders into the page draw on the anonymous per-site allowance of 300 requests an hour, and caching keeps normal traffic far below it. Widgets that still load in a frame use the visitor's own allowance of 30 requests an hour per IP. No widget in the plugin is reserved for a paid plan. A free API key (still no card) gives you 10,000 calls a month against api.astroway.info, and paid plans raise that further; both are about calling the API yourself, not about what these shortcodes render.<\/p><\/dd>\n<dt id=\"how%20do%20i%20add%20a%20horoscope%20or%20birth%20chart%20to%20wordpress%3F\"><h3>How do I add a horoscope or birth chart to WordPress?<\/h3><\/dt>\n<dd><p>Drop a shortcode into any page or post, for example <code>[astroway_natal date=\"1990-05-15\" time=\"14:30\" lat=\"50.45\" lon=\"30.52\"]<\/code> for a natal (birth) chart, or <code>[astroway_daily_horoscope sign=\"leo\"]<\/code> for a daily horoscope. All 16 are Gutenberg blocks as well: type <code>\/astroway<\/code> in the editor and pick one. Settings \u2192 AstroWay \u2192 Shortcodes lists every shortcode with its parameters, a copy button and a search box.<\/p><\/dd>\n<dt id=\"do%20i%20need%20an%20api%20key%3F\"><h3>Do I need an API key?<\/h3><\/dt>\n<dd><p>No. The plugin works without a key. Page-rendered widgets then run on the anonymous per-site allowance of 300 requests an hour, and widgets that fall back to a frame run on the visitor's own 30 requests an hour per IP, which is enough for an ordinary site. If you do save a key, your server offers it when it fetches a widget, so those calls are counted against your plan instead of the shared anonymous allowance. Frames never carry it: that request is made by the visitor's browser. Get a free key at api.astroway.info.<\/p><\/dd>\n<dt id=\"will%20the%20widgets%20show%20up%20in%20google%3F\"><h3>Will the widgets show up in Google?<\/h3><\/dt>\n<dd><p>The seven page-rendered widgets, yes. Your server fetches the text and prints it into the page before the browser ever sees it, so a crawler reads it as ordinary page content and it counts toward the page. Widgets that fall back to an embedded frame do not: a frame is a separate document at another address, and a search engine credits what it finds there to that document, not to your page. Settings \u2192 AstroWay \u2192 Render mode shows which mode is in use, and you can force frames everywhere if you prefer the old behaviour.<\/p><\/dd>\n<dt id=\"what%20data%20is%20sent%20to%20api.astroway.info%3F\"><h3>What data is sent to api.astroway.info?<\/h3><\/dt>\n<dd><p>Birth data (date, time, city, coordinates) for chart calculation. No data is stored on your site beyond standard WP caching.<\/p><\/dd>\n<dt id=\"can%20i%20use%20this%20on%20multiple%20sites%3F\"><h3>Can I use this on multiple sites?<\/h3><\/dt>\n<dd><p>Yes for the free anonymous tier. Paid API keys are bound to a single domain by default; you can change the bound domain self-service from the API dashboard at api.astroway.info\/dashboard.<\/p><\/dd>\n<dt id=\"is%20my%20visitors%27%20data%20stored%20anywhere%3F\"><h3>Is my visitors' data stored anywhere?<\/h3><\/dt>\n<dd><p>No personal data is stored on api.astroway.info. Birth data (date, time, city, lat\/lon) is processed in-memory for chart calculation and the result is returned. The plugin caches results locally on your WordPress site (WP transients) to reduce repeat API calls; the cache contains chart output only, no PII beyond what was submitted via shortcode arguments.<\/p><\/dd>\n<dt id=\"how%20do%20i%20report%20a%20bug%20or%20request%20a%20feature%3F\"><h3>How do I report a bug or request a feature?<\/h3><\/dt>\n<dd><p>For plugin issues: file an issue at https:\/\/github.com\/astroway\/astroway-wp-plugin\/issues. For API or billing questions: contact support via your dashboard at api.astroway.info\/dashboard.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>New: seven widgets are now rendered by your server into the page instead of being loaded in an embedded frame: daily, weekly and monthly horoscope, moon phase, Tarot card of the day (Rider-Waite), planet of the day, and the natal chart. Their text becomes part of your HTML, so search engines index it and screen readers announce it. Until now every widget lived in a frame, which is a separate document, and none of that content counted toward your page.<\/li>\n<li>New: the widgets inherit your theme. They are styled with currentColor rather than a palette of their own, so they read correctly in light and dark themes with no configuration on either side, and they collapse to a single column on narrow screens.<\/li>\n<li>New: three shortcodes that had templates but no way to reach them: [astroway_weekly_horoscope], [astroway_monthly_horoscope] and [astroway_planet_of_day].<\/li>\n<li>New: the natal chart card carries planet placements with sign, degree, house and retrograde marker, the Ascendant, the Midheaven and the major aspects, alongside the wheel it always drew. A failed request falls back to the bare wheel, which is what the widget showed before.<\/li>\n<li>New: <code>[astroway_natal]<\/code> accepts <code>theme<\/code>, which was previously reachable on other widgets but not this one. The wheel is an image drawn by the API and cannot read the page it lands on, so a dark wheel could end up inside a light card with no way to say otherwise. Values are <code>dark<\/code> (unchanged default), <code>light<\/code> and <code>console<\/code>.<\/li>\n<li>New: \"Render mode\" is back in Settings and this time something reads it. \"On this page\" is the default; \"In an iframe\" puts every widget that has a frame equivalent back into one. The weekly and monthly horoscopes are page-render only, because the API has no embed route behind them.<\/li>\n<li>Change: <strong>the markup of those seven widgets has changed.<\/strong> They are now wrapped in astroway-horoscope-card, astroway-moon-card, astroway-tarot-card, astroway-planet-card and astroway-natal-card elements rather than a frame. Custom CSS written against the old frame markup needs updating, or set Render mode to \"In an iframe\" to keep the old output.<\/li>\n<li>Change: page-rendered widgets are counted against your site's allowance of 300 requests an hour rather than each visitor's 30, because the request now comes from your server. Answers are cached until the data itself changes: a daily horoscope until midnight UTC, a weekly one until Monday, a monthly one until the first of the month, a chart for a month. A page carrying all twelve signs spends twelve requests a day, not twelve an hour.<\/li>\n<li>Change: failures are cached too, for 60 seconds, so an exhausted allowance is given a chance to recover instead of being hit again on every page load.<\/li>\n<li>Fix: the weekly and monthly endpoints return Markdown, and the previous build would have printed the asterisks literally. A small safe subset is now parsed, with escaping applied before any tag is inserted.<\/li>\n<li>Fix: readings in Ukrainian, Russian and other Cyrillic languages were cut in the middle of words. The text was split on line breaks with a pattern that, outside UTF-8 mode, also treats the second byte of the letter \"\u0445\" as a line break, so \"\u043d\u0435\u0431\u0435\u0441\u043d\u0438\u0445 \u0442\u0456\u043b\" came out as \"\u043d\u0435\u0431\u0435\u0441\u043d\u0438\" followed by a line break and \" \u0442\u0456\u043b\". Every pattern that touches the API's text now runs in UTF-8 mode.<\/li>\n<li>Fix: a bulleted list that the API puts directly after a sentence, with no blank line between them, is now a list. It used to be printed as one run-on paragraph with the hyphens still in it.<\/li>\n<li>Fix: two shortcodes on consecutive lines were wrapped in a single paragraph by WordPress, and a card cannot live inside a paragraph: the browser closed it early, leaving an empty bordered box with the widget's text spilled out below it. Paragraphs made up entirely of AstroWay shortcodes are now unwrapped. A sentence written around a widget is left as the author wrote it.<\/li>\n<li>Fix: a site whose API key was on a plan this build did not have in its list saw the upgrade prompt in place of every widget, including the ones that need no key at all. The plan above Pro bought less than no plan. A plan name the plugin does not recognise is now read as newer than this release rather than lower than anonymous.<\/li>\n<li>Fix: the rate-limit reading shown in the admin notice came from a separate probe request against the wrong bucket. Every render already returns the quota headers, so the notice now reports the bucket the widgets actually spend from.<\/li>\n<li>Fix: the moon phase name and the planet of the day printed the API's English identifier on every non-English site, because the JSON endpoints used to answer in English whatever language was asked for, unlike the embedded frames. The API now returns a translation of its own for those fields and the card prefers it, which is what makes <code>lang=\"uk\"<\/code> on an English site come out Ukrainian throughout; a translation the plugin carries covers anything the API has not translated, including chart placements and answers cached before this release. Tarot card names and the planet's theme words are open-ended lists and remain English until the API translates them.<\/li>\n<li>Change: when a key is saved in Settings, your server now offers it on the calls it makes to render a widget, so they are counted against your plan instead of the anonymous per-site allowance. Frames are unaffected: that request is made by the visitor's browser, and putting a key in a URL that lands in your page's markup is not something the plugin will do.<\/li>\n<li>Fix: five places in the admin screens still quoted the old limit of \"30 requests\/hour per visitor IP\", and the rate-limit notice went further and promised that visitors were unaffected. With server-side rendering they are: the widgets fall back to a frame when the site's allowance runs out. All five now describe both buckets.<\/li>\n<li>New: the plugin's first admin screen is now \"Getting started\" rather than \"API Key\". It opens with three steps and a copyable shortcode, because nothing in the plugin needs a key; the key form is still on the same page, below them.<\/li>\n<li>New: three shortcodes for embed routes the API has had all along and the plugin never exposed: [astroway_mini_chart] (the natal wheel drawn small, for a sidebar), [astroway_monthly_forecast] (four weeks ahead for one sign) and [astroway_transit_timeline] (the next seven days of Moon ingresses).<\/li>\n<li>New: six Gutenberg blocks, so all 16 widgets are now both a shortcode and a block: Weekly Horoscope, Monthly Horoscope, Planet of the Day, Mini Birth Chart, Monthly Forecast and Moon Transit Timeline. The first three render into the page; the readme used to say they were \"shortcodes for now\".<\/li>\n<li>New: the shortcode reference lists all 16 shortcodes and has a search box. Kundli, Transit Sky, Panchang, Numerology and Synastry worked all along but appeared nowhere in the admin, so the only way to find them was the source. Their block names are corrected too: the reference named blocks that do not exist under those names in the inserter.<\/li>\n<li>Fix: the \"What you get\" comparison on the API Key page claimed a paid plan unlocks native rendering, Tarot, Human Design, Synastry and Numerology, and removes the watermark. None of that is true of the plugin: every shortcode works on the anonymous tier, page rendering is not gated, and the key never reaches the frame, so it cannot remove a watermark. The table now compares what a key actually changes, and says plainly that the widgets on your pages are unaffected by it.<\/li>\n<li>i18n: 63 new strings (signs, planets, aspects, houses, moon phases, settings) translated into all 20 bundled locales. Zodiac names got a second pass: the generic translator had left \"Leo\" in English in eleven of them and had rendered \"Cancer\" as the illness in Czech, Japanese, Korean, Turkish, Romanian, Indonesian and Dutch.<\/li>\n<li>i18n: 70 more strings for the new screens, and every remaining em-dash removed from translatable text (19 strings, including the ten synastry field labels in the block editor).<\/li>\n<\/ul>\n\n<h4>0.10.7<\/h4>\n\n<ul>\n<li>Fix: widgets no longer disappear from your pages. The plugin probed its own server's rate limit and, when that quota ran out, rendered nothing at all, even though each visitor has a separate quota. Rendering no longer depends on that probe, and the probe now runs only where its reading is meaningful: the admin notice.<\/li>\n<li>Fix: [astroway_today_in_sky] and [astroway_fortune_cookie] are deprecated. The api routes they call were never implemented, so both rendered an empty frame. Pages containing them stay intact and administrators see a short note; the shortcodes will return when the routes exist.<\/li>\n<li>Fix: the activation, review and rate-limit notices appeared on every admin page, including other plugins' settings screens, while being hidden on our own. Both halves fixed: they show up on AstroWay screens only, and they are visible there.<\/li>\n<li>Fix: the \"Render mode\" and \"Spend cap\" settings were saved but never read by anything. Both panels are removed until they actually do something.<\/li>\n<li>Change: wp.org builds no longer bundle an update checker, per directory rules. Updates come from wordpress.org as before.<\/li>\n<li>New: five Gutenberg blocks with matching shortcodes, each rendering an anonymous embed: Vedic Kundli, Transit Sky, Daily Panchang, Numerology and Synastry. The plugin now ships ten blocks.<\/li>\n<li>Fix: Natal Chart and Bodygraph sent longitude as lon (the api reads lng) and the timezone as a name rather than a numeric offset, so charts were built for longitude 0 and UTC. House cusps and the Ascendant are now correct. No content edits needed.<\/li>\n<li>Fix: verifying a rejected API key showed an empty success panel instead of the rejection reason.<\/li>\n<li>New: optional \"Widget disclaimer\" setting, off by default, appends a short informational line to embedded widgets.<\/li>\n<li>New: the admin menu carries the AstroWay owl mark.<\/li>\n<li>Note: the review prompt and the rate-limit notice announced in 0.5.6 were missing from the published builds until now. They ship with this release.<\/li>\n<\/ul>\n\n<h4>0.10.6<\/h4>\n\n<ul>\n<li>New: \"Widget disclaimer\" setting (Settings \u2192 AstroWay). Off by default. When enabled, embedded widgets show a short \"informational, not professional advice\" line in their footer, useful when your jurisdiction or compliance policy requires it. The wording is rendered and localized by api.astroway.info.<\/li>\n<li>Fix: the \"Spend cap\" field on the Settings page no longer renders as an oversized box (it had inherited a flex value meant for horizontal layouts).<\/li>\n<\/ul>\n\n<h4>0.10.5<\/h4>\n\n<ul>\n<li>Branding: the admin menu icon and the review-prompt now use the AstroWay owl mark instead of a generic star.<\/li>\n<li>Fix: verifying a rejected API key now shows a clear error message instead of an empty green panel (the panel only appeared blank because the request still reported success on a 401).<\/li>\n<\/ul>\n\n<h4>0.10.4<\/h4>\n\n<ul>\n<li>New: 5 Gutenberg blocks + matching shortcodes, Vedic Kundli, Transit Sky, Daily Panchang, Numerology, and Synastry compatibility. Each wraps a \/v1\/embed\/* endpoint as an anonymous-friendly responsive iframe. Plugin now ships 10 blocks.<\/li>\n<li>New: dark \/ light \/ console theme selector on the new widgets.<\/li>\n<li>Fix: Natal Chart and Bodygraph now send longitude as <code>lng<\/code> and the timezone as a numeric UTC offset. The api had been receiving longitude 0 and UTC, so house cusps and the Ascendant were computed for the wrong location\/time, charts are now correct. Existing blocks need no changes; just upgrade.<\/li>\n<\/ul>\n\n<h4>0.10.3<\/h4>\n\n<ul>\n<li>Two final Elementor widgets: AstroWay Today in Sky (with SWITCHER controls for Sun\/Moon, Mercury retrograde, planetary hour, location fields conditional) + AstroWay Fortune Cookie (optional sign dropdown).<\/li>\n<li>Closes Elementor wrapper stack (v0.10.0-v0.10.3). Plugin now ships 7 Elementor widgets covering all 7 core shortcodes.<\/li>\n<\/ul>\n\n<h4>0.10.2<\/h4>\n\n<ul>\n<li>Two more Elementor widgets: AstroWay Human Design Bodygraph + AstroWay Daily Tarot (with deck dropdown, Rider-Waite\/Marseille\/Lenormand).<\/li>\n<\/ul>\n\n<h4>0.10.1<\/h4>\n\n<ul>\n<li>Two more Elementor widgets: AstroWay Daily Horoscope (sign dropdown) + AstroWay Moon Phase (date + lang). Same render-via-shortcode pattern as v0.10.0.<\/li>\n<\/ul>\n\n<h4>0.10.0<\/h4>\n\n<ul>\n<li>New AstroWay category in Elementor widget panel. First widget: AstroWay Natal Chart, which wraps the [astroway_natal] shortcode with Inspector controls for date\/time\/lat\/lon\/tz\/lang. Loads only when Elementor plugin is active.<\/li>\n<li>First piece of Elementor integration stack (v0.10.0-v0.10.3). Standalone <code>astroway-elementor<\/code> addon plugin (planned ~Aug 2026) will provide advanced controls + animations.<\/li>\n<\/ul>\n\n<h4>0.9.4<\/h4>\n\n<ul>\n<li>New shortcode <code>[astroway_fortune_cookie]<\/code> shows a daily AI-generated cosmic quote via \/v1\/embed\/fortune-cookie. Anonymous-accessible, sign-aware (optional <code>sign<\/code> param).<\/li>\n<li>Closes Today in Sky stack (v0.9.0-v0.9.4).<\/li>\n<\/ul>\n\n<h4>0.9.3<\/h4>\n\n<ul>\n<li><code>[astroway_today_in_sky]<\/code> accepts <code>show_planetary_hour<\/code> (default <code>0<\/code>) + <code>lat<\/code>, <code>lon<\/code>, <code>tz<\/code> parameters. When enabled, the widget pulls today's planetary hour mapping for the supplied location.<\/li>\n<\/ul>\n\n<h4>0.9.2<\/h4>\n\n<ul>\n<li><code>[astroway_today_in_sky]<\/code> accepts <code>show_retrograde<\/code> parameter (default <code>1<\/code>), toggles the Mercury retrograde indicator section. SEO-friendly viral content for retrograde periods.<\/li>\n<\/ul>\n\n<h4>0.9.1<\/h4>\n\n<ul>\n<li><code>[astroway_today_in_sky]<\/code> accepts <code>show_signs<\/code> parameter (default <code>1<\/code>): toggles the Sun\/Moon zodiac positions block. New <code>sanitize_bool_flag()<\/code> helper added as public static for addon reuse.<\/li>\n<\/ul>\n\n<h4>0.9.0<\/h4>\n\n<ul>\n<li>New shortcode <code>[astroway_today_in_sky]<\/code> renders the day's celestial overview via \/v1\/embed\/today-in-sky. Anonymous-accessible (IP-rate-limited iframe).<\/li>\n<li>New widget config in RendererDecisions registry; new feature key in Tier::matrix. Sub-features (sun\/moon positions, retrogrades, planetary hour, Fortune Cookie) land in v0.9.1-v0.9.4.<\/li>\n<\/ul>\n\n<h4>0.8.3<\/h4>\n\n<ul>\n<li>New Settings panel \"Domain binding\": shows current domain attached to the key + input to request rebinding via POST \/v1\/auth\/keys\/domain-change. Manual fallback link to api dashboard if the endpoint returns an error.<\/li>\n<li>Closes admin enhancements stack (v0.8.0-v0.8.3).<\/li>\n<\/ul>\n\n<h4>0.8.2<\/h4>\n\n<ul>\n<li>New Settings panel \"Feature matrix\": visual grid of features \u00d7 tiers with checkmarks. Highlights the current tier's column. Reads from <code>Tier::matrix()<\/code> so addon-registered features appear automatically.<\/li>\n<\/ul>\n\n<h4>0.8.1<\/h4>\n\n<ul>\n<li>New Settings panel \"Spend cap\": local mirror of the monthly USD ceiling configurable at api.astroway.info\/dashboard\/billing. Stored as integer 0..100000 in OPTION_KEY['spend_cap_usd'].<\/li>\n<\/ul>\n\n<h4>0.8.0<\/h4>\n\n<ul>\n<li>New Settings panel \"Render mode\" with radio toggle: Auto (default) \/ Force iframe \/ Force client. Stored in OPTION_KEY['render_mode']. RendererDecisions wiring lands when native client widgets ship in v1.1+.<\/li>\n<li>First piece of admin enhancements stack (v0.8.0-v0.8.3).<\/li>\n<\/ul>\n\n<h4>0.7.4<\/h4>\n\n<ul>\n<li>New <code>Tier::render_upgrade_cta( $feature )<\/code> returns a styled CTA panel with feature label + upgrade button linking to api.astroway.info\/dashboard\/upgrade. Filterable via <code>astroway_upgrade_cta_html<\/code> for theme\/addon customization.<\/li>\n<li>Block + shortcode guards (v0.7.2\/v0.7.3) refactored to call the helper. Closes the v0.7.x tier-gating stack and pre-v1.0 blocker B3.<\/li>\n<\/ul>\n\n<h4>0.7.3<\/h4>\n\n<ul>\n<li>Per-shortcode tier guards: each core <code>astroway_*<\/code> shortcode is now wrapped with <code>Tier::can( $feature )<\/code>. Locked shortcodes render an inline \"Pro feature\" CTA. Behavior matches v0.7.2 block-side gating, v1 shortcodes remain anonymous-accessible.<\/li>\n<\/ul>\n\n<h4>0.7.2<\/h4>\n\n<ul>\n<li>Per-block tier guards: each registered Gutenberg block is now wrapped with <code>Tier::can( $feature )<\/code>. Locked blocks render an inline \"Pro feature\" CTA instead of the widget. All v1 blocks remain accessible to anonymous users (matrix default); guards activate for v1.x+ Pro blocks.<\/li>\n<\/ul>\n\n<h4>0.7.1<\/h4>\n\n<ul>\n<li>New <code>Tier::can( string $feature ): bool<\/code> checks whether current tier can access a feature.<\/li>\n<li>New <code>Tier::matrix(): array<\/code> returns feature \u2192 allowed tiers map, filterable via <code>astroway_tier_matrix<\/code> so addons can declare their own features.<\/li>\n<li>Default matrix: v1 widgets (natal, daily_horoscope, moon_phase, bodygraph, daily_tarot) anonymous-OK; synastry\/solar_return\/lunar_return\/progressions\/native_render paid-only; ai_chat\/transit_alerts pro+.<\/li>\n<\/ul>\n\n<h4>0.7.0<\/h4>\n\n<ul>\n<li>New utility class <code>AstroWay\\WPPlugin\\Tier<\/code> with <code>Tier::current()<\/code> resolving the user's plan from cached \/v1\/auth\/keys\/me response (30 min TTL). Returns anonymous\/free\/indie\/starter\/pro\/business\/internal.<\/li>\n<li>AddonAPI::current_tier() refactored as facade delegating to Tier::current(). First piece of tier-gating subsystem (v0.7.x).<\/li>\n<\/ul>\n\n<h4>0.6.5<\/h4>\n\n<ul>\n<li>New developer guide <code>docs\/addon-development.md<\/code> documents the v0.6.x Addon Hooks API + AddonAPI reference + minimal working example.<\/li>\n<li>New example addon scaffold <code>docs\/example-addon\/<\/code> shows shortcode registration + tier check + widget declaration.<\/li>\n<li>Closes the Addon Hooks API atomic stack v0.6.0-v0.6.5. Track 3 addon plugins can now develop against a stable surface.<\/li>\n<\/ul>\n\n<h4>0.6.4<\/h4>\n\n<ul>\n<li>New public class <code>AstroWay\\WPPlugin\\AddonAPI<\/code>: BC-locked stable surface for addon developers. Methods: <code>register_widget()<\/code>, <code>current_tier()<\/code>, <code>api_base()<\/code>, <code>has_key()<\/code>, <code>cache_key()<\/code>. Internal classes (RendererDecisions, ApiClient, Cache, Admin) remain unstable.<\/li>\n<\/ul>\n\n<h4>0.6.3<\/h4>\n\n<ul>\n<li>New filter: <code>astroway_widgets<\/code> lets addons append entries to the widget registry without touching core. Useful for new shortcodes\/blocks that map to api <code>\/v1\/embed\/*<\/code> endpoints.<\/li>\n<\/ul>\n\n<h4>0.6.2<\/h4>\n\n<ul>\n<li>New action: <code>astroway_register_blocks<\/code> fires at end of Blocks::register_assets_and_blocks(). Addons hook here to call register_block_type() for their own astroway\/* Gutenberg blocks.<\/li>\n<\/ul>\n\n<h4>0.6.1<\/h4>\n\n<ul>\n<li>New action: <code>astroway_register_shortcodes<\/code> fires at end of Shortcodes::register(). Addons hook here to call add_shortcode() for their own astroway_* shortcodes.<\/li>\n<\/ul>\n\n<h4>0.6.0<\/h4>\n\n<ul>\n<li>New action: <code>astroway_init<\/code> fires early in plugin boot, signalling addons that core classes are loaded and they can hook into upcoming registration actions.<\/li>\n<li>First atomic piece of the Addon Hooks API (v0.6.0-v0.6.5). Unlocks third-party addon ecosystem.<\/li>\n<\/ul>\n\n<h4>0.5.5<\/h4>\n\n<ul>\n<li>Admin: new \"Update channel\" panel on the API Key page shows current channel (A\/B), whether PUC library is loaded, whether an API key is set, and last update check timestamp.<\/li>\n<li>Closes the Channel B atomic stack v0.5.0-v0.5.5. Plugin meets the v1.0 \"Channel B custom updater\" stability gate condition.<\/li>\n<\/ul>\n\n<h4>0.5.4<\/h4>\n\n<ul>\n<li>Channel B update checks now send <code>Cache-Control: no-cache<\/code> + <code>Pragma: no-cache<\/code> headers, ensuring fresh response from <code>astroway.info<\/code> even if a transit cache sits between WP and the server.<\/li>\n<li>\"View details\" modal verified to render correctly with PUC defaults: pulls changelog\/sections from <code>update.json<\/code>.<\/li>\n<\/ul>\n\n<h4>0.5.3<\/h4>\n\n<ul>\n<li>Channel B custom updater wired via plugin-update-checker: registers against https:\/\/astroway.info\/wp-plugin\/update.json with the saved API key carried as ?key= query arg.<\/li>\n<li>When PUC is absent or the server endpoint is unreachable, wp.org Channel A continues to deliver updates as before.<\/li>\n<\/ul>\n\n<h4>0.5.2<\/h4>\n\n<ul>\n<li>Bundled <code>YahnisElsts\/plugin-update-checker<\/code> v5.6 library at <code>includes\/lib\/plugin-update-checker\/<\/code>, autoloaded via <code>load-v5p6.php<\/code>. Foundation for v0.5.3 Channel B update hook.<\/li>\n<li>No new user-visible behavior. PUC is loaded but no update checker instance is created yet.<\/li>\n<\/ul>\n\n<h4>0.5.1<\/h4>\n\n<ul>\n<li>Channel B download endpoint live at astroway.info\/wp-plugin\/download\/{version}\/, 302-redirects paid-tier keys to versioned ZIP on GitHub Releases.<\/li>\n<li>update.json now returns full <code>download_url<\/code> field for paid tiers.<\/li>\n<li>No user-visible plugin code change. Plugin-side update hooks land in v0.5.3.<\/li>\n<\/ul>\n\n<h4>0.5.0<\/h4>\n\n<ul>\n<li>Channel B server endpoint deployed at astroway.info\/wp-plugin\/update.json, paid-tier auto-update infrastructure (first of 6 atomic pieces, v0.5.0-v0.5.5).<\/li>\n<li>No user-visible plugin code change. Plugin-side updater hooks land in v0.5.3.<\/li>\n<\/ul>\n\n<h4>0.4.0<\/h4>\n\n<ul>\n<li>CI\/Tests infrastructure: PHPUnit unit tests + WPCS lint via GitHub Actions matrix (PHP 8.1-8.4 full test, 7.4\/8.0 syntax compat)<\/li>\n<li>Refactor: input sanitization extracted as public statics on Shortcodes class (no behavior change, enables addon reuse)<\/li>\n<li>No user-visible changes: pure foundation for upcoming addon ecosystem (v0.6.0)<\/li>\n<\/ul>\n\n<h4>0.3.0<\/h4>\n\n<ul>\n<li>New: live Status panel on the API Key admin landing, plan \/ credits \/ period \/ domain pulled from \/v1\/auth\/keys\/me (30 min transient cache)<\/li>\n<li>New: <code>lang<\/code> attribute on all 5 shortcodes (e.g. <code>[astroway_natal date=\"...\" lang=\"ru\"]<\/code>), 21 api-supported locales<\/li>\n<li>New: Language Inspector dropdown on all 5 Gutenberg blocks, uk, en, de, ru, pl, es, pt, fr, it, nl, cs, ro, hu, el, tr, ar, hi, ja, ko, vi, id<\/li>\n<li>Default lang resolves to the WP site locale; invalid codes silently fall back, no user-facing error<\/li>\n<li>Status panel handles all 5 states: valid \/ suspended \/ revoked \/ invalid_key \/ api_down with per-state color accent<\/li>\n<li>Requires api.astroway.info v2.33.0+ for \/v1\/auth\/keys\/me; falls back to legacy \/v1\/keys\/usage with \"Limited data\" notice on older self-hosted api<\/li>\n<li>No regressions on v0.2.3: existing shortcodes\/blocks without <code>lang=<\/code> render in site default exactly as before<\/li>\n<\/ul>\n\n<h4>0.2.3<\/h4>\n\n<ul>\n<li>All 3 subpages share one hero (brand + status badge + CTAs); only title and tagline vary per page<\/li>\n<li>Right sidebar restored (Resources + System + quote) in a 1fr + 280px grid<\/li>\n<li>Buttons read as buttons in both light panels and the dark hero (ghost variant + on-dark override)<\/li>\n<li>Shortcode reference cards gain proper panel-body inset<\/li>\n<li>New: city \u2192 lat\/lon\/IANA-tz helper on the Shortcodes page (server-side proxy to app.astroway.info atlas + click-to-copy snippet)<\/li>\n<li>Type tokens drop bundled webfont declarations: pure ui-sans-serif\/system-ui stack, multi-script coverage via OS fonts<\/li>\n<li>20 bundled translations: uk, de_DE, ru_RU, pl_PL, es_ES, pt_BR, hi_IN, fr_FR, ko_KR, it_IT, ja, id_ID, tr_TR, nl_NL, ro_RO, cs_CZ, vi, ar (RTL), el, hu_HU<\/li>\n<li>Translation filenames corrected to {textdomain}-{locale}.mo + explicit load_plugin_textdomain call<\/li>\n<\/ul>\n\n<h4>0.2.2<\/h4>\n\n<ul>\n<li>Admin UI split into 3 submenu pages: API Key (default landing), Settings, Shortcodes<\/li>\n<li>API Key landing rebuilt with 3-tier comparison (Anonymous \/ Free key \/ Paid), state badge, key form, prominent CTAs<\/li>\n<li>Settings page focused on diagnostics: Connection ping, Cache stats + purge, System info with Copy diagnostic button<\/li>\n<li>Shortcodes page rebuilt as expanded reference cards (description + copyable code + params table + Gutenberg block hint per shortcode)<\/li>\n<li>JS split per-page (api-key \/ settings \/ shortcodes), reducing payload on each admin screen<\/li>\n<\/ul>\n\n<h4>0.2.1<\/h4>\n\n<ul>\n<li>Settings page promoted to a top-level admin menu item with a custom brand icon (star inside orbit ring, single-path SVG)<\/li>\n<li>Activation notice rebranded with a cosmic-gradient mark, two CTAs (Get free API key \/ Open Settings), and persistent dismiss (fix for a latent bug where the dismiss action did not survive page reloads)<\/li>\n<li>Settings page fully redesigned with an observatory aesthetic: hero with owl-moon logo, four numbered panels (API key \/ Connection \/ Cache \/ Shortcodes), right-side Resources \/ System \/ quote aside, paper-warm cards with gold hairlines<\/li>\n<li>Shortcode rows copy-to-clipboard on click<\/li>\n<li>ASTROWAY_WP_PLUGIN_VERSION constant auto-derived from the plugin header via get_file_data, single source of truth, simpler release pipeline<\/li>\n<\/ul>\n\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>Settings page under Settings \u2192 AstroWay (API key input, Verify Key, Test Connection, Cache controls, shortcode reference, Diagnostics)<\/li>\n<li>API key field accepts both sandbox (aw_test_<em>) and live (aw_live_<\/em>) keys<\/li>\n<li>All keyed requests now carry X-Api-Key + X-AstroWay-Site-URL headers (lazy domain bind support)<\/li>\n<li>Plugin row links: Settings + Get API Key (with ?source=wp_plugin)<\/li>\n<li>Activation notice CTA URL includes ?source=wp_plugin for referrer-source tracking<\/li>\n<li>New transient cache layer (prefix astroway_v1_) with purge button + stats<\/li>\n<li>Verify Key gracefully falls back to \/v1\/keys\/usage until api ships \/v1\/auth\/keys\/me (Block A)<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>MVP: 5 iframe shortcodes via \/v1\/embed\/* (works without API key, 30\/hr per IP)<\/li>\n<li>5 Gutenberg blocks with ServerSideRender<\/li>\n<li>Vanilla CSS theme-overridable via CSS vars (--astroway-*)<\/li>\n<li>i18n .pot + EN\/UK\/DE\/PL base translations<\/li>\n<li>Graceful 429 handler with 'Get free API key' admin notice<\/li>\n<\/ul>\n\n<h4>0.1.0-alpha.1<\/h4>\n\n<ul>\n<li>Initial scaffold (pre-release). Plugin header + PSR-4 autoload + activation hooks. No shortcodes yet, first functional release planned as 0.1.0.<\/li>\n<\/ul>","raw_excerpt":"Put horoscopes and birth charts on your pages as real text search engines can read. Shortcodes and blocks, no account and no API key needed.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/sw.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/312711","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sw.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/sw.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/sw.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=312711"}],"author":[{"embeddable":true,"href":"https:\/\/sw.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/astrowayteam"}],"wp:attachment":[{"href":"https:\/\/sw.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=312711"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/sw.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=312711"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/sw.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=312711"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/sw.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=312711"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/sw.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=312711"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/sw.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=312711"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}