{"id":11868,"date":"2026-09-19T04:06:18","date_gmt":"2026-09-18T20:06:18","guid":{"rendered":"https:\/\/aeosub.com\/mhm-currency-switcher\/"},"modified":"2026-09-19T04:06:18","modified_gmt":"2026-09-18T20:06:18","slug":"mhm-currency-switcher","status":"publish","type":"post","link":"https:\/\/aeosub.com\/zh\/mhm-currency-switcher\/","title":{"rendered":"MHM Currency Switcher"},"content":{"rendered":"<div class=\"post-img\" style=\"margin-bottom: 25px\"><img decoding=\"async\" src=\"https:\/\/ps.w.org\/mhm-currency-switcher\/assets\/banner-1544x500.png?rev=3672756\" alt=\"MHM Currency Switcher\" loading=\"lazy\" style=\"width: 100%;height: auto;border-radius: 12px\"><\/div>\n<div class=\"plugin-expert-review\" style=\"border: 1px solid #e2e8f0;border-left: 4px solid #4a3bca;border-radius: 10px;padding: 20px;margin-bottom: 25px;background: #fff;font-family: -apple-system, system-ui, sans-serif\">\n<div style=\"font-weight: bold;font-size: 1.1em;color: #4a3bca;margin-bottom: 10px\">LethaldiranMX Insight<\/div>\n<div style=\"color: #4a5568;font-size: 14px;line-height: 1.6\">\n<div>\n<p>MHM Currency Switcher addresses a critical pain point for international WooCommerce stores by decoupling front-end currency display from back-end transactional processing. Its architectural highlight is a dedicated cache compatibility mode that leverages client-side REST requests to dynamically update prices, preventing the common caching issue where one user&#8217;s currency selection is served to another. By keeping cart and checkout calculations strictly server-side while offering flexible display options like Elementor widgets and geolocation, it provides a robust framework for localized pricing without sacrificing site performance.<\/p>\n<p><strong>Best Fit &amp; Operational Role:<\/strong> This plugin is an excellent fit for scaling WooCommerce merchants targeting global markets who rely heavily on page caching layers\u2014such as Varnish, Cloudflare, or server-level Nginx caching\u2014and need to display localized pricing without breaking their cache hit rates. It integrates cleanly into modern WordPress stacks utilizing High-Performance Order Storage (HPOS) and Elementor, solving the operational challenge of displaying real-time exchange rates while maintaining transactional integrity during checkout.<\/p>\n<p><strong>Potential Limitations &amp; Pitfalls:<\/strong> The primary operational trade-off lies in the cache compatibility mode: because anonymous product and archive pages are initially rendered in the base currency and updated via a client-side REST request, users may experience a brief visual price transition as prices convert on page load. Additionally, relying on an external service (ExchangeRate-API) for automatic rate updates introduces an external dependency that requires monitoring, and disabling the cache compatibility mode altogether can lead to severe caching conflicts on highly optimized hosting environments.<\/p>\n<\/div>\n<\/div><\/div>\n<div class=\"plugin-info-card\" style=\"border: 1px solid #e2e8f0;border-radius: 10px;overflow: hidden;margin-bottom: 30px;font-family: -apple-system, system-ui, sans-serif;background: #fff\">\n<div style=\"padding: 20px;border-bottom: 1px solid #edf2f7;background: #fafafa;display: flex;align-items: flex-start\">\n                <img decoding=\"async\" src=\"https:\/\/ps.w.org\/mhm-currency-switcher\/assets\/icon-256x256.png?rev=3672756\" alt=\"MHM Currency Switcher icon\" loading=\"lazy\" style=\"width: 45px;height: 45px;border-radius: 8px;margin-right: 15px\"> <\/p>\n<div style=\"flex: 1;line-height: 1.2\">\n<div style=\"font-weight: bold;font-size: 1.1em;color: #1a202c\">Plugin Specification<\/div>\n<p>                    <small style=\"color: #718096\">WordPress.org Official Data<\/small>\n                <\/div>\n<\/p><\/div>\n<table style=\"width: 100%;border-collapse: collapse;font-size: 14px\">\n<tr style=\"border-bottom: 1px solid #edf2f7\">\n<th style=\"padding: 12px 20px;text-align: left;width: 35%;color: #4a5568;background: #fcfcfc\">Developer<\/th>\n<td style=\"padding: 12px 20px;font-weight: 500\"><a href=\"https:\/\/profiles.wordpress.org\/maxhandmade\/\" target=\"_blank\" rel=\"noopener\">MHM Development Team<\/a><\/td>\n<\/tr>\n<tr style=\"border-bottom: 1px solid #edf2f7\">\n<th style=\"padding: 12px 20px;text-align: left;color: #4a5568;background: #fcfcfc\">Version<\/th>\n<td style=\"padding: 12px 20px\">v2.2.1<\/td>\n<\/tr>\n<tr style=\"border-bottom: 1px solid #edf2f7\">\n<th style=\"padding: 12px 20px;text-align: left;color: #4a5568;background: #fcfcfc\">Active Installs<\/th>\n<td style=\"padding: 12px 20px\">10 +<\/td>\n<\/tr>\n<tr style=\"border-bottom: 1px solid #edf2f7\">\n<th style=\"padding: 12px 20px;text-align: left;color: #4a5568;background: #fcfcfc\">Requires \/ Tested<\/th>\n<td style=\"padding: 12px 20px\">6.6 \/ 7.1.1<\/td>\n<\/tr>\n<tr style=\"border-bottom: 1px solid #edf2f7\">\n<th style=\"padding: 12px 20px;text-align: left;color: #4a5568;background: #fcfcfc\">Last Updated<\/th>\n<td style=\"padding: 12px 20px\">2026-09-18 8:04pm GMT<\/td>\n<\/tr>\n<tr>\n<th style=\"padding: 12px 20px;text-align: left;color: #4a5568;background: #fcfcfc\">Official Link<\/th>\n<td style=\"padding: 12px 20px\"><a href=\"https:\/\/wordpress.org\/plugins\/mhm-currency-switcher\/\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"text-decoration: none;color: #4a3bca;font-weight: bold\">View Details -&gt;<\/a><\/td>\n<\/tr>\n<\/table><\/div>\n<div class=\"plugin-short-desc\" style=\"margin: 20px 0;padding: 12px 15px;background: #f9fafb;border-left: 4px solid #4a3bca;border-radius: 6px;font-style: italic;color: #4a5568\">Multi-currency support for WooCommerce. Let your customers browse, shop, and checkout in their preferred currency with real-time exchange rates.<\/div>\n<p>MHM Currency Switcher adds multi-currency support to your WooCommerce store. Customers can browse products, add items to their cart, and complete checkout in their preferred currency with real-time exchange rates.<\/p>\n<p><strong>Key Features<\/strong><\/p>\n<ul>\n<li>Add multiple currencies with real-time exchange rates<\/li>\n<li>Cache compatibility mode \u2014 works behind a page cache without serving one visitor&#8217;s currency to everybody<\/li>\n<li>Currency switcher via shortcode \u2014 usable in a text widget, nav menu, or Elementor<\/li>\n<li>Product page price display widget with country flags<\/li>\n<li>Navigation menu integration \u2014 add switcher to any WordPress menu<\/li>\n<li>Automatic exchange rate fetching (ExchangeRate-API)<\/li>\n<li>Fee &amp; rounding configuration per currency<\/li>\n<li>Cookie-based currency persistence<\/li>\n<li>WooCommerce HPOS compatible<\/li>\n<li>Elementor widgets included<\/li>\n<li>Every currency WooCommerce offers<\/li>\n<li>Scheduled automatic exchange rate updates<\/li>\n<li>Geolocation-based currency detection<\/li>\n<li>Fixed prices per product<\/li>\n<li>&#8220;How to use&#8221; tab in the settings screen, naming every way the switcher can be placed<\/li>\n<\/ul>\n<p><strong>Cache compatibility mode<\/strong><\/p>\n<p>A page cache stores the HTML your server produced for whoever asked first. When<br \/>\nprices are converted on the server, that means the first visitor&#8217;s currency is<br \/>\nwhat every later visitor is served. Cache compatibility mode, which is on by<br \/>\ndefault, avoids this: anonymous shop, archive and product pages are rendered in<br \/>\nyour base currency, so the same cached page is correct for everyone, and the<br \/>\nbrowser converts the prices it can see afterwards through a REST request to this<br \/>\nplugin.<\/p>\n<p>The split is deliberate. Only <em>displayed<\/em> prices are converted in the browser.<br \/>\nCart, checkout, order totals, order emails and the WooCommerce REST API are<br \/>\nalways calculated on the server in the currency the customer actually chose, so<br \/>\nthe amount charged cannot be altered from the browser.<\/p>\n<p>You can switch the mode off under <strong>WooCommerce &gt; MHM Currency &gt;<br \/>\nAdvanced<\/strong>, in which case prices are converted on the server as they were before<br \/>\nthis feature existed. Read &#8220;Known limits&#8221; below before deciding either way \u2014<br \/>\nboth settings have consequences, and they are different ones.<\/p>\n<h3>Known limits<\/h3>\n<p>These are consequences of how cache compatibility mode works, not defects. They<br \/>\nare listed so you can decide with your eyes open.<\/p>\n<h4>Turning the mode off does not restore the exact 1.0.0 behaviour<\/h4>\n<p>Three fixes sit above the setting and stay in place whether it is on or off:<br \/>\nprices are no longer converted on admin screens or in admin AJAX (which used to<br \/>\nwrite a converted price into an order line item), <code>wc\/v3<\/code> REST reads are pinned<br \/>\nto the base currency, and scheduled tasks and WP-CLI no longer convert. Switching<br \/>\nthe mode off restores the 1.0.0 <em>display<\/em> behaviour \u2014 prices converted on the<br \/>\nserver \u2014 and nothing else.<\/p>\n<h4>Search engines and crawlers see your base prices<\/h4>\n<p>With the mode on, the page a crawler fetches has not been through the browser,<br \/>\nso it carries base-currency prices, and so does the machine-readable product data<br \/>\nin it. See the structured data question above; the mismatch is deliberate.<\/p>\n<h4>Converted prices replace the base ones a moment after the page appears<\/h4>\n<p>The page arrives with your base-currency prices already on screen \u2014 nothing is<br \/>\nhidden waiting for JavaScript \u2014 and the browser swaps in the converted ones as<br \/>\nsoon as its request comes back, each price fading over 200ms as it changes. On a<br \/>\nslow connection the base price is readable for longer before the swap. Visitors<br \/>\nwho have asked their system for reduced motion get the swap without the fade.<\/p>\n<h4>With JavaScript disabled, or the endpoint unreachable, base prices stay<\/h4>\n<p>Nothing breaks and no error is shown to the visitor \u2014 the page simply keeps the<br \/>\nbase-currency prices it was rendered with, and the reason is written to the<br \/>\nbrowser console. Cart and checkout are unaffected, because they never depended<br \/>\non the browser in the first place.<\/p>\n<h4>Variable products make one extra request, and some swatch plugins lose the price<\/h4>\n<p>On a cacheable page the plugin forces WooCommerce to fetch variation prices over<br \/>\nAJAX, because the variations JSON WooCommerce would otherwise embed in the page<br \/>\ncarries base-currency prices that its own scripts write straight into the page.<br \/>\nThe cost is one request when a visitor picks a variation, and that<br \/>\n    data-product_variations is <code>false<\/code>: third-party colour or size swatch plugins<br \/>\nthat read prices out of that JSON instead of asking WooCommerce may stop showing<br \/>\na price. If you use such a plugin, check a variable product before going live.<\/p>\n<h4>The mini-cart relies on WooCommerce cart fragments<\/h4>\n<p>A mini-cart is rendered on every page, so it cannot be classified per request.<br \/>\nIt is rendered in the base currency and then corrected by WooCommerce&#8217;s own cart<br \/>\nfragment refresh, which is a server-side conversion. If cart fragments are<br \/>\ndisabled on your site \u2014 some themes and optimisation plugins dequeue them \u2014 the<br \/>\ncached mini-cart total stays in the base currency while the rest of the page<br \/>\nconverts. The plugin watches for this and says so in the admin when it happens;<br \/>\na site with no mini-cart at all is never warned about it.<\/p>\n<h4>A cart or checkout on a page WooCommerce does not know about must be excluded from your cache<\/h4>\n<p>Page caches exclude cart and checkout automatically because they recognise the<br \/>\npages WooCommerce assigned. If you have put a cart or checkout shortcode or block<br \/>\non some other page, exclude that page yourself. Two things go wrong otherwise:<br \/>\nthe conversion decision flips to &#8220;convert&#8221; partway through the render, so the<br \/>\nrest of the page is printed already converted and without the markers the browser<br \/>\nlooks for, and blocks-based cart and checkout embed their amounts in the page as<br \/>\nJSON while rendering. Either way the first visitor&#8217;s currency is what the cache<br \/>\nthen hands to everyone. Cart contents are personal anyway; such a page should not<br \/>\nbe cached.<\/p>\n<h4>`?currency=` multiplies your cache entries<\/h4>\n<p>A currency can be requested in the URL, and a cache treats every distinct URL as<br \/>\na separate entry, so linking to <code>?currency=EUR<\/code> and <code>?currency=GBP<\/code> stores the<br \/>\nsame page more than once. The switcher itself does not produce these URLs \u2014 it<br \/>\nwrites a cookie and leaves the address alone. On a cached page it converts the<br \/>\nprices where they stand; on the cart page, for a logged-in visitor, or with<br \/>\ncache compatibility switched off, it reloads instead. Either way the URL is the<br \/>\none the visitor was already on, so no extra cache entry is created.<\/p>\n<p>A <code>?currency=<\/code> link also applies to that page view only: it deliberately sets no<br \/>\ncookie, so the next page the visitor opens is back in your base currency unless<br \/>\nthey use the switcher. That is not an oversight \u2014 a link that silently pinned a<br \/>\ncurrency could show one currency in the catalogue while the cart, which reads<br \/>\nthe cookie, charged another. If you want a campaign link that sticks, send<br \/>\nvisitors to a page carrying the switcher rather than relying on the parameter.<\/p>\n<h4>WooCommerce Analytics adds different currencies together<\/h4>\n<p>An order is stored in the currency the customer paid in, and WooCommerce<br \/>\nAnalytics reports every order&#8217;s figures in your store currency without<br \/>\nconverting them back. A 4.38 USD order is counted as 4.38 in your base<br \/>\ncurrency, so once you take orders in more than one currency the revenue<br \/>\nfigures in Analytics, and the totals in the customer panel on the order<br \/>\nscreen, are sums of unlike amounts. The orders themselves are correct \u2014 each<br \/>\none keeps its own currency, total and the exchange rate it was placed at, and<br \/>\nthis plugin stores that rate on the order. It is the aggregate reports that<br \/>\ncannot be read as money. Nothing in this plugin can fix that from the outside;<br \/>\nif you need accurate multi-currency reporting, export the orders and convert<br \/>\nthem using the rate recorded on each one.<\/p>\n<h4>Logged-in visitors are converted on the server<\/h4>\n<p>Logged-in visitors take the server-side path, which is correct as long as your<br \/>\ncache does what nearly all of them do and never serves cached pages to logged-in<br \/>\nusers. An edge cache or CDN configured to cache without looking at cookies is the<br \/>\nexception, and there a logged-in visitor&#8217;s converted page can be stored and<br \/>\nserved on. If you cache at the edge, confirm it varies on the login cookie.<\/p>\n<h3>External services<\/h3>\n<p>This plugin connects to two third-party services to keep currency conversion<br \/>\nrates up to date. What each one is sent, and when, is described separately<br \/>\nbelow because the two are not the same. Both requests are made with PHP&#8217;s<br \/>\n    WP_Http transport, which in WordPress&#8217;s default configuration sends a<br \/>\n    User-Agent header of the form <code>WordPress\/{version}; {your site's URL}<\/code> &#8212;<br \/>\nso the site&#8217;s own address leaves with every request to either service, not<br \/>\njust the data described below. That header is filterable<br \/>\n(<code>http_headers_useragent<\/code>, <code>http_request_args<\/code>), so a site that has changed<br \/>\nit will send something different.<\/p>\n<p><strong>ExchangeRate-API<\/strong><\/p>\n<p>What it is: a commercial exchange-rate API, used as the primary source of<br \/>\nexchange rates.<\/p>\n<p>What is sent, and when: the three-letter base currency code you have<br \/>\nconfigured (for example <code>USD<\/code>), sent as part of the request URL &#8212;<br \/>\n    https:\/\/api.exchangerate-api.com\/v4\/latest\/{BASE_CURRENCY} &#8212; when you<br \/>\npress &#8220;Sync rates&#8221; in the admin panel, when you run <code>wp mhmcs rates-sync<\/code><br \/>\nfrom the command line, and on the schedule you configure under automatic<br \/>\nrate updates (hourly, twice daily, or daily). No other data from your site<br \/>\nis included.<\/p>\n<p>Terms of service and privacy policy: https:\/\/www.exchangerate-api.com\/terms<br \/>\n(ExchangeRate-API publishes its privacy policy inside that same page rather<br \/>\nthan on a separate one.)<\/p>\n<p><strong>European Central Bank (ECB) daily reference rates<\/strong><\/p>\n<p>What it is: the ECB&#8217;s public daily reference-rate feed, used as the fallback<br \/>\nwhen ExchangeRate-API cannot be reached.<\/p>\n<p>What is sent, and when: nothing beyond the User-Agent described above. The<br \/>\nfeed is a fixed, parameter-free address &#8212;<br \/>\n    https:\/\/www.ecb.europa.eu\/stats\/eurofxref\/eurofxref-daily.xml &#8212; so no<br \/>\ncurrency code or other value is sent to the ECB; the same document is<br \/>\nreturned to every requester. It is only requested when ExchangeRate-API&#8217;s<br \/>\nrequest has failed. The feed is EUR-based and covers roughly thirty<br \/>\ncurrencies rather than the hundreds ExchangeRate-API carries. If your base<br \/>\ncurrency is outside that set, this source returns nothing at all and your<br \/>\nexisting rates are left unchanged until the next attempt; if only one of<br \/>\nyour configured target currencies is outside that set, the other target<br \/>\ncurrencies still update and the unsupported one is simply left without a<br \/>\nrate from this source.<\/p>\n<p>The ECB does not publish a document titled &#8220;Terms of Service.&#8221; Its terms of<br \/>\nuse are stated on its Disclaimer &amp; Copyright page, which is the closest<br \/>\nequivalent and is linked below.<\/p>\n<p>Disclaimer &amp; Copyright (terms of use): https:\/\/www.ecb.europa.eu\/services\/using-our-site\/disclaimer\/html\/index.en.html<br \/>\nPrivacy statement: https:\/\/www.ecb.europa.eu\/services\/data-protection\/privacy-statements\/html\/ecb.privacy_statement_website.en.html<\/p>\n<p>The ECB&#8217;s reference-rates page separately states that using these rates for<br \/>\ntransaction purposes is strongly discouraged:<br \/>\nhttps:\/\/www.ecb.europa.eu\/stats\/policy_and_exchange_rates\/euro_reference_exchange_rates\/html\/index.en.html<br \/>\nThat page, not the two links above, is the source of that caution. This<br \/>\nplugin uses the feed to convert prices for display and checkout, which is<br \/>\nthe kind of transactional use that notice is about; if that matters for your<br \/>\nshop, review that page before relying on this fallback.<\/p>\n<p><strong>Redirecting a source<\/strong><\/p>\n<p>If your network blocks the ECB feed, the <code>mhmcs_fallback_rates_url<\/code> filter<br \/>\nreceives the URL, the base currency code and which source is being filtered<br \/>\n&#8212; always <code>'ecb'<\/code>, since ECB is now the only fallback &#8212; so the request can<br \/>\nbe pointed elsewhere.<\/p>\n<p><strong>Visitor geolocation (through WooCommerce)<\/strong><\/p>\n<p>When &#8220;Enable geolocation-based currency detection&#8221; is on, the plugin asks<br \/>\nWooCommerce which country a visitor is in, through WooCommerce&#8217;s own<br \/>\n    WC_Geolocation API. Since 2.2.0 that call explicitly switches WooCommerce&#8217;s<br \/>\nremote-API fallback OFF, so this plugin makes no third-party request for it:<\/p>\n<ul>\n<li>Behind CloudFlare &#8212; the country is read from the <code>CF-IPCountry<\/code> request<br \/>\nheader. Nothing leaves your server.<\/li>\n<li>Otherwise &#8212; WooCommerce&#8217;s LOCAL MaxMind database file, if one is installed.<br \/>\nAgain nothing leaves your server.<\/li>\n<li>With neither &#8212; detection simply finds nothing, and the visitor keeps the<br \/>\nstore&#8217;s base currency until they choose one. No third-party lookup is made.<\/li>\n<\/ul>\n<p>Earlier versions called <code>WC_Geolocation::geolocate_ip()<\/code> with its bare defaults,<br \/>\nwhich let WooCommerce fall back to a remote geolocation service and send the<br \/>\nvisitor&#8217;s IP address there. That fallback is now disabled, matching what<br \/>\nWooCommerce core itself does on the storefront.<\/p>\n<p><strong>The setting is off by default.<\/strong> Resolving a country from an IP address is<br \/>\ndata processing a shop owner should switch on deliberately, so a fresh install<br \/>\nleaves it off and shops that already configured it keep their own choice.<\/p>\n<p>To make detection work without CloudFlare, add a free MaxMind GeoLite2 license<br \/>\nkey under WooCommerce &gt; Settings &gt; Integration &gt; MaxMind Geolocation;<br \/>\nWooCommerce then downloads a local database file and answers from it.<\/p>\n<p>WooCommerce geolocation documentation:<br \/>\nhttps:\/\/woocommerce.com\/document\/maxmind-geolocation-integration\/<\/p>\n<h3>Source code<\/h3>\n<p>The settings screen is a React application, and what ships inside the plugin is<br \/>\nthe compiled bundle at <code>admin-app\/build\/index.js<\/code>. The readable source it is<br \/>\nbuilt from is not in the package, so here is where to find it and how to<br \/>\nreproduce the build.<\/p>\n<p>Full source, including the unminified JavaScript:<br \/>\nhttps:\/\/github.com\/MaxHandMade\/mhm-currency-switcher<\/p>\n<p>The source of the bundle is <code>admin-app\/src\/<\/code>. It is compiled with WordPress&#8217;s<br \/>\nown build tooling, @wordpress\/scripts, and nothing else:<\/p>\n<pre><code>npm install\nnpm run build\n<\/code><\/pre>\n<p>That writes <code>admin-app\/build\/index.js<\/code> together with the <code>index.asset.php<\/code><br \/>\ndependency map the plugin reads when enqueuing the script. No other build step,<br \/>\nminifier or bundler is involved, and no code is generated at install time or at<br \/>\nruntime.<\/p>\n<div class=\"plugin-editorial-note\" style=\"margin-top: 25px;padding: 12px 15px;background: #f8fafc;border-radius: 6px;color: #64748b;font-size: 13px;line-height: 1.5\">Editorial note: This overview combines WordPress.org official plugin metadata with an AI-assisted LethaldiranMX editorial review. Plugin data should be verified on the official WordPress.org listing before installation.<\/div>","protected":false},"excerpt":{"rendered":"<p>Multi-currency support for WooCommerce. Let your customers browse, shop, and checkout in their preferred currency with real-time exchange rates.<\/p>","protected":false},"author":1,"featured_media":11869,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[252],"tags":[973,2219,2220,2221,569,555],"class_list":["post-11868","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-trends","tag-currency","tag-currency-switcher","tag-exchange-rate","tag-multi-currency","tag-woocommerce","tag-wordpress-plugin"],"_links":{"self":[{"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/posts\/11868","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/comments?post=11868"}],"version-history":[{"count":0,"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/posts\/11868\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/media\/11869"}],"wp:attachment":[{"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/media?parent=11868"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/categories?post=11868"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/tags?post=11868"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}