{"id":366931,"date":"2026-10-12T11:04:50","date_gmt":"2026-10-12T11:04:50","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/nexya\/"},"modified":"2026-10-15T14:17:14","modified_gmt":"2026-10-15T14:17:14","slug":"freexya","status":"publish","type":"plugin","link":"https:\/\/mfe.wordpress.org\/plugins\/freexya\/","author":23563827,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.4.9","stable_tag":"1.4.9","tested":"7.1.3","requires":"6.9","requires_php":"8.2","requires_plugins":null,"header_name":"Freexya \u2013 Cookie Consent, SMTP, Redirects & Security Toolkit","header_author":"nexya.dev","header_description":"WordPress modules, one panel. Switch a module on, switch a module off \u2014 and nothing of it runs on the site while it is off.","assets_banners_color":"15302e","last_updated":"2026-10-15 14:17:14","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/nexya.dev\/plugins\/","header_author_uri":"https:\/\/nexya.dev","rating":5,"author_block_rating":0,"active_installs":0,"downloads":298,"num_ratings":2,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.3.10":{"tag":"1.3.10","author":"nexyadev","date":"2026-10-13 15:12:11","revision":3744297},"1.3.11":{"tag":"1.3.11","author":"nexyadev","date":"2026-10-13 18:06:43","revision":3744643},"1.3.6":{"tag":"1.3.6","author":"nexyadev","date":"2026-10-12 11:19:12","revision":3741281},"1.3.7":{"tag":"1.3.7","author":"nexyadev","date":"2026-10-12 12:25:16","revision":3741488},"1.3.8":{"tag":"1.3.8","author":"nexyadev","date":"2026-10-13 08:50:05","revision":3743306},"1.3.9":{"tag":"1.3.9","author":"nexyadev","date":"2026-10-13 09:28:20","revision":3743374},"1.4.0":{"tag":"1.4.0","author":"nexyadev","date":"2026-10-14 14:30:52","revision":3746613},"1.4.1":{"tag":"1.4.1","author":"nexyadev","date":"2026-10-14 19:22:40","revision":3747024},"1.4.2":{"tag":"1.4.2","author":"nexyadev","date":"2026-10-14 21:39:18","revision":3747220},"1.4.4":{"tag":"1.4.4","author":"nexyadev","date":"2026-10-15 11:01:36","revision":3748245},"1.4.9":{"tag":"1.4.9","author":"nexyadev","date":"2026-10-15 14:17:14","revision":3748675}},"upgrade_notice":[],"ratings":{"1":0,"2":0,"3":0,"4":0,"5":2},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3741376,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3741376,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3741488,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3741488,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.3.10","1.3.11","1.3.6","1.3.7","1.3.8","1.3.9","1.4.0","1.4.1","1.4.2","1.4.4","1.4.9"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3741203,"resolution":"1","location":"assets","locale":"","width":1440,"height":900},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3741203,"resolution":"2","location":"assets","locale":"","width":1440,"height":900},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3741203,"resolution":"3","location":"assets","locale":"","width":1440,"height":900},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3741203,"resolution":"4","location":"assets","locale":"","width":1440,"height":900},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3741203,"resolution":"5","location":"assets","locale":"","width":1440,"height":900},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3741203,"resolution":"6","location":"assets","locale":"","width":1440,"height":900}},"screenshots":{"1":"The hub: each module switches on or off, and a module that is off registers nothing.","2":"The cookie banner on the site: nothing optional runs before the visitor agrees.","3":"Security: the HTTP headers, each explained, sent without breaking the site.","4":"SEO: who publishes the site, the content, the social networks, the sitemap.","5":"404s &amp; Redirects: the broken addresses visitors hit, with their count, redirected in one click.","6":"E-mails: one sender address for every message, sent through PHP, SMTP or an API."}},"plugin_section":[262246],"plugin_tags":[362,223629,131785,726,6696],"plugin_category":[54,55],"plugin_contributors":[286098],"plugin_business_model":[],"class_list":["post-366931","plugin","type-plugin","status-publish","hentry","plugin_section-dashboard-widgets","plugin_tags-captcha","plugin_tags-consent-mode","plugin_tags-gdpr","plugin_tags-redirects","plugin_tags-smtp","plugin_category-security-and-spam-protection","plugin_category-seo-and-marketing","plugin_contributors-nexyadev","plugin_committers-nexyadev"],"banners":{"banner":"https:\/\/ps.w.org\/freexya\/assets\/banner-772x250.png?rev=3741488","banner_2x":"https:\/\/ps.w.org\/freexya\/assets\/banner-1544x500.png?rev=3741488","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/freexya\/assets\/icon-128x128.png?rev=3741376","icon_2x":"https:\/\/ps.w.org\/freexya\/assets\/icon-256x256.png?rev=3741376","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/freexya\/assets\/screenshot-1.png?rev=3741203","caption":"The hub: each module switches on or off, and a module that is off registers nothing."},{"src":"https:\/\/ps.w.org\/freexya\/assets\/screenshot-2.png?rev=3741203","caption":"The cookie banner on the site: nothing optional runs before the visitor agrees."},{"src":"https:\/\/ps.w.org\/freexya\/assets\/screenshot-3.png?rev=3741203","caption":"Security: the HTTP headers, each explained, sent without breaking the site."},{"src":"https:\/\/ps.w.org\/freexya\/assets\/screenshot-4.png?rev=3741203","caption":"SEO: who publishes the site, the content, the social networks, the sitemap."},{"src":"https:\/\/ps.w.org\/freexya\/assets\/screenshot-5.png?rev=3741203","caption":"404s &amp; Redirects: the broken addresses visitors hit, with their count, redirected in one click."},{"src":"https:\/\/ps.w.org\/freexya\/assets\/screenshot-6.png?rev=3741203","caption":"E-mails: one sender address for every message, sent through PHP, SMTP or an API."}],"raw_content":"<!--section=description-->\n<p>One plugin for the jobs every WordPress site needs, instead of five or six:<\/p>\n\n<ul>\n<li><strong>E-mails that do not arrive<\/strong> \u2014 send through SMTP or an API, keep a log of every message, and read the server's own reason when one fails.<\/li>\n<li><strong>A cookie banner that really blocks<\/strong> \u2014 third-party scripts and embeds wait for consent, with Google Consent Mode v2.<\/li>\n<li><strong>404s after a redesign<\/strong> \u2014 a log of the broken addresses visitors hit, with their count, redirected in one click.<\/li>\n<li><strong>Security<\/strong> \u2014 HTTP headers, a limit on failed logins, and your plugins checked against known vulnerabilities.<\/li>\n<\/ul>\n\n<p>Each job is a module you switch on from the hub, and a module that is off registers nothing: none of its hooks run on the site. The modules:<\/p>\n\n<ul>\n<li><strong>Dashboard<\/strong> \u2014 a readable admin home and a tidied toolbar.<\/li>\n<li><strong>Shortcuts<\/strong> \u2014 duplicate content, reorder it by hand, add entries in one click.<\/li>\n<li><strong>Roles &amp; capabilities<\/strong> \u2014 capabilities sorted under the post type that creates them, and the site seen through a role's eyes without leaving your own account.<\/li>\n<li><strong>Activity log<\/strong> \u2014 who changed what, with the before and the after.<\/li>\n<li><strong>Cookies<\/strong> \u2014 a consent banner, third-party scripts held back until consent, and a scan that finds them.<\/li>\n<li><strong>SEO<\/strong> \u2014 titles and descriptions with a suggestion drawn from the page's text, sitemap, schema, llms.txt.<\/li>\n<li><strong>Mail<\/strong> \u2014 SMTP, an API provider, or a Gmail or Microsoft 365 account connected with OAuth, a delivery log, a test message, an invisible captcha for the site's forms.<\/li>\n<li><strong>Redirects<\/strong> \u2014 exact redirects and a 404 log with the hit count.<\/li>\n<li><strong>Media<\/strong> \u2014 regenerate thumbnails in the background, in batches.<\/li>\n<li><strong>Security<\/strong> \u2014 security headers, a content policy, a limit on failed logins, and a check of the installed plugins against known vulnerabilities.<\/li>\n<li><strong>Maintenance<\/strong> \u2014 a holding page, database clean-up, a database export, and the previous version of each extension kept before its update.<\/li>\n<li><strong>Custom fields<\/strong> \u2014 field groups with repeaters, flexible content and relations, kept in their own tables, and content types and taxonomies of your own.<\/li>\n<li><strong>Element<\/strong> \u2014 sixteen Elementor widgets for custom fields, NCF\u2019s or ACF\u2019s: repeaters as cards, tabs or tables, galleries and sliders, key figures, teams, timelines, taxonomies, maps.<\/li>\n<li><strong>Translate<\/strong> \u2014 your site in several languages: each page linked to its translations, a translation editor beside the original (blocks, Elementor, ACF and NCF fields), addresses in \/en\/, a menu per language, a language switcher, hreflang, and every text of the site translated from the admin. A site coming from WPML or Polylang moves over in one click.<\/li>\n<\/ul>\n\n<h4>Free and Pro<\/h4>\n\n<p>Everything above is free, on as many sites as you like. nexya Pro, sold on nexya.dev, adds three modules \u2014 nexya forms, Mailya for newsletters and a page cache \u2014 and the parts that do the repetitive work for you: suggested redirects and pattern rules, CSV import, a daily vulnerability pass and a file fingerprint with rollback, a two-step login, updates undone by themselves when they break the site, undo from the activity log, a second sending server and failure alerts for mail, a branded login screen and admin skin, banner appearance and consent service by service, scheduled database clean-up, orphan image sizes, folders in the media library, and longer log retention. The free version contains none of that code; nexya Pro is delivered by Freemius after purchase, and takes over from this plugin with the same settings.<\/p>\n\n<h4>Privacy<\/h4>\n\n<p>The plugin sends nothing to a third party by default. The features that reach the network, and what they send, are listed under External services below.<\/p>\n\n<h4>Multisite<\/h4>\n\n<p>Multisite networks are not supported. On a network the plugin stays switched off and says so.<\/p>\n\n<h3>External services<\/h3>\n\n<p>Nothing below runs unless you switch the matching module or option on. No data leaves the site by default, and the plugin sends no usage data anywhere.<\/p>\n\n<p><strong>WPVulnerability (Security module, vulnerability watch).<\/strong> When you start a check from the Security screen, the plugin asks the public WPVulnerability API whether the installed plugins have known vulnerabilities. For each installed plugin, its slug is sent to www.wpvulnerability.net; nothing else about the site is sent. Nothing is sent until you start a check. Terms and privacy (legal notice of its publisher): https:\/\/www.robotstxt.es\/legal\/<\/p>\n\n<p><strong>WordPress.org checksums (Security module).<\/strong> While the Security module is on, once a day and when you press \"Check now\", the plugin asks api.wordpress.org \u2014 the same service WordPress uses for its own updates \u2014 for the checksums of the installed WordPress version, sending only that version number and the site language, then compares them with the core files on your server. Terms: https:\/\/wordpress.org\/about\/privacy\/<\/p>\n\n<p><strong>IndexNow (SEO module, optional, off by default).<\/strong> Only if you switch it on, each time a page is published, updated or taken down its address is sent to api.indexnow.org, which shares it with the search engines that take part (Bing, Yandex, Seznam, Naver and others), along with the site's host name and the verification key the plugin serves at the root of your site. Nothing is sent while the site asks search engines not to index it, or runs on a local address. Terms: https:\/\/www.indexnow.org\/terms \u2014 Privacy (Microsoft, which runs the IndexNow service): https:\/\/www.microsoft.com\/en-us\/privacy\/privacystatement<\/p>\n\n<p><strong>Stripe (nexya forms, Payment module, optional, nexya Pro).<\/strong> Only once you switch the module on and enter your own Stripe secret key, a form with a payment field sends, when the visitor submits it, the amount, the currency, the name of the form, the visitor's e-mail address if the form asks for one, and the entry's number to api.stripe.com to open a Stripe Checkout page; the visitor then pays on Stripe's site. Stripe calls back the site's own webhook address to confirm the payment. Terms: https:\/\/stripe.com\/legal\/ssa \u2014 Privacy: https:\/\/stripe.com\/privacy<\/p>\n\n<p><strong>PayPal (nexya forms, Payment module, optional, nexya Pro).<\/strong> Only once you enter your own PayPal REST app credentials, a form with a payment field sends, when the visitor chooses PayPal, the amount, the currency, the name of the form and the entry's number to api-m.paypal.com (or api-m.sandbox.paypal.com in sandbox mode) to open a PayPal approval page; the visitor approves the payment on PayPal's site, and the site captures it when they come back. Terms: https:\/\/www.paypal.com\/legalhub\/home \u2014 Privacy: https:\/\/www.paypal.com\/myaccount\/privacy\/privacyhub<\/p>\n\n<p><strong>Patchstack (Security module, optional).<\/strong> Only if you enter your own Patchstack API key, the same check also asks api.patchstack.com, sending each installed plugin's slug and your key. Terms: https:\/\/patchstack.com\/terms-and-conditions\/ \u2014 Privacy: https:\/\/patchstack.com\/privacy-policy\/<\/p>\n\n<p><strong>E-mail delivery (E-mails module).<\/strong> When you pick an API provider instead of SMTP, the messages your site sends are handed to that provider's API: sender, recipients, subject, body and attachments, at the moment the message is sent. You choose the provider and enter its API key. The providers offered are Brevo (https:\/\/www.brevo.com\/legal\/termsofuse\/ \u2014 https:\/\/www.brevo.com\/legal\/privacypolicy\/), SendGrid (https:\/\/www.twilio.com\/en-us\/legal\/tos \u2014 https:\/\/www.twilio.com\/en-us\/legal\/privacy), Postmark (https:\/\/postmarkapp.com\/terms-of-service \u2014 https:\/\/postmarkapp.com\/privacy-policy), Resend (https:\/\/resend.com\/legal\/terms-of-service \u2014 https:\/\/resend.com\/legal\/privacy-policy), SMTP2GO (https:\/\/www.smtp2go.com\/terms\/ \u2014 https:\/\/www.smtp2go.com\/privacy\/), MailerSend (https:\/\/www.mailersend.com\/legal\/terms-of-service \u2014 https:\/\/www.mailersend.com\/legal\/privacy-policy), SendLayer (https:\/\/sendlayer.com\/terms-of-service\/ \u2014 https:\/\/sendlayer.com\/privacy-policy\/), Mandrill (https:\/\/mailchimp.com\/legal\/terms\/ \u2014 https:\/\/mailchimp.com\/legal\/privacy\/), Mailgun (https:\/\/www.mailgun.com\/legal\/terms\/ \u2014 https:\/\/www.mailgun.com\/legal\/privacy-policy\/), Elastic Email (https:\/\/elasticemail.com\/resources\/usage-policies\/terms-of-use \u2014 https:\/\/elasticemail.com\/resources\/usage-policies\/privacy-policy) and SparkPost (https:\/\/www.sparkpost.com\/policies\/tou\/ \u2014 https:\/\/www.sparkpost.com\/policies\/privacy\/).<\/p>\n\n<p><strong>Gmail and Microsoft 365 sending (E-mails module, optional).<\/strong> Only if you choose Google (Gmail, Workspace) or Microsoft 365 (Outlook) as the sending method and connect an account. When you press \"Connect\", your browser goes to accounts.google.com or login.microsoftonline.com, where you sign in and allow the site to send e-mail; the plugin then sends the authorisation code it gets back, with the client ID and secret you entered, to oauth2.googleapis.com or login.microsoftonline.com to obtain an access token, and renews that token there when it expires while the site is sending. No password is stored on the site. Each message the site sends then goes through smtp.gmail.com, or smtp.office365.com \/ smtp-mail.outlook.com, with its sender, recipients, subject, body and attachments, at the moment it is sent. Google \u2014 Terms: https:\/\/policies.google.com\/terms \u2014 Privacy: https:\/\/policies.google.com\/privacy. Microsoft \u2014 Terms: https:\/\/www.microsoft.com\/en-us\/servicesagreement \u2014 Privacy: https:\/\/www.microsoft.com\/en-us\/privacy\/privacystatement<\/p>\n\n<p><strong>Cloudflare (Cache module, optional).<\/strong> Only if you switch the Cloudflare option on and enter your zone ID and API token: each time the nexya cache is emptied, the plugin asks api.cloudflare.com to empty the cache of that zone, sending the zone ID, the token and, when only some pages changed, their addresses. Terms: https:\/\/www.cloudflare.com\/terms\/ \u2014 Privacy: https:\/\/www.cloudflare.com\/privacypolicy\/<\/p>\n\n<p><strong>Form webhook (nexya forms, optional).<\/strong> Only if you enter an address in a form's settings, each entry of that form is sent, when it is submitted, to that address as JSON: the form's name and number, the entry's number and date, the page it was sent from, the site's address, and the answers with the label and type of each field. You choose the address (Zapier, Make, n8n, a CRM\u2026); the plugin contacts no address you did not enter, and the terms and privacy policy that apply are those of the service you chose.<\/p>\n\n<p><strong>AI suggestions (optional).<\/strong> The plugin calls no AI provider itself. When you press a button that asks for a suggestion (a title, a description, an image text\u2026), the text needed for it is handed to the AI client built into WordPress, which sends it to the provider of the connector you set up in WordPress, under that provider's terms. Without such a connector, these buttons do not appear and nothing is sent.<\/p>\n\n<p><strong>Audience measurement tags (SEO module).<\/strong> If, and only if, you enter an ID or an address for one of them, the module prints that service's tag on the front end; the visitor's browser then loads the script from the service and sends it what that tag collects.\n* Google Tag Manager and Google Analytics 4, from www.googletagmanager.com. Terms: https:\/\/marketingplatform.google.com\/about\/analytics\/terms\/us\/ \u2014 Privacy: https:\/\/policies.google.com\/privacy\n* Plausible, from plausible.io or the address you enter. Terms: https:\/\/plausible.io\/terms \u2014 Privacy: https:\/\/plausible.io\/privacy\n* Umami, from the address of your own Umami instance or Umami Cloud. Terms: https:\/\/umami.is\/terms \u2014 Privacy: https:\/\/umami.is\/privacy\n* Matomo, from the address of your own Matomo instance or Matomo Cloud. Terms: https:\/\/matomo.org\/matomo-cloud-terms-of-service\/ \u2014 Privacy: https:\/\/matomo.org\/privacy-policy\/<\/p>\n\n<p><strong>Freemius (trial and purchase of nexya Pro).<\/strong> The Freemius SDK ships with the plugin in anonymous mode: on its own it sends nothing and shows no opt-in. Only when an administrator starts the Pro trial or buys nexya Pro from the plugin's screens are the site address, the WordPress, PHP and plugin versions and the administrator's name and e-mail address sent to Freemius, which handles the checkout and the licence. Terms: https:\/\/freemius.com\/terms\/ \u2014 Privacy: https:\/\/freemius.com\/privacy\/<\/p>\n\n<p><strong>Lists of known hosts (Cookies and Security modules).<\/strong> These are not remote files and nothing is loaded from them. The cookie module carries a list of third-party hostnames (Google Fonts, Font Awesome, public CDNs, YouTube, Google Maps and so on) as plain data: a script or frame already on your page whose address matches one of them is held back until the visitor consents. The Security module carries a similar list of well-known origins, offered as ready-made lines when you write your site's content security policy, the header that tells browsers which origins your pages may load from. Both lists are plain data files, modules\/Cookie\/data\/hosts.json and modules\/Security\/data\/origins.json. The plugin itself never contacts any of these hosts.<\/p>\n\n<p><strong>Requests to your own site.<\/strong> The cookie scan, the sharing-image finder of the SEO module and a few background jobs fetch pages of your own site from your own server. Nothing leaves it.<\/p>\n\n<h3>Third-party libraries<\/h3>\n\n<ul>\n<li>Chart.js 4.5.1 (MIT) draws the statistics charts \u2014 assets\/js\/chart.min.js. Source: https:\/\/github.com\/chartjs\/Chart.js<\/li>\n<li>Freemius SDK (GPL) handles the licence and the update checks. Source: https:\/\/github.com\/Freemius\/wordpress-sdk<\/li>\n<li>Font Awesome Free 6.7.2 brand icons (CC BY 4.0) for the social networks of e-mails and pop-ups \u2014 assets\/social\/. Source: https:\/\/fontawesome.com<\/li>\n<\/ul>\n\n<p>The plugin's own JavaScript and CSS ship as written, next to a minified copy of each file (.min.js \/ .min.css, made with esbuild when the plugin is packaged). The minified copies are loaded on the site; with SCRIPT_DEBUG on, the readable files are loaded instead.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>In <strong>Plugins &gt; Add New<\/strong>, search for \u201cfreexya\u201d, then install and activate it. You can also upload the folder to <code>wp-content\/plugins\/<\/code>.<\/li>\n<li>Open <strong>nexya<\/strong> in the admin menu. On a new install, a first card asks what kind of site this is \u2014 a showcase site, a shop or a blog \u2014 and switches on the modules that suit it in one click. You can also pick them yourself.<\/li>\n<li>The hub lists every module with its switch: a module that is off registers nothing on the site. Each module that is on gets its own page in the nexya menu, with its settings.<\/li>\n<li>The hub's other tabs hold what is shared: <strong>Settings<\/strong> (the panel language, and whether your settings are kept if the plugin is deleted), <strong>Colours<\/strong> (your brand colours for the cookie banner, forms, messages and holding pages), <strong>AI<\/strong> (the connector the AI features use) and <strong>Export &amp; import<\/strong> (every setting in one file, to copy a set-up to another site).<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20a%20module%20i%20turned%20off%20still%20cost%20anything%3F\"><h3>Does a module I turned off still cost anything?<\/h3><\/dt>\n<dd><p>Almost nothing. The registry declares them all, but only boots the modules that are on: the others register no hooks, load no assets and run no queries.<\/p><\/dd>\n<dt id=\"where%20are%20smtp%20passwords%20stored%3F\"><h3>Where are SMTP passwords stored?<\/h3><\/dt>\n<dd><p>Encrypted with AES-256-GCM in a single option, under a key derived from your WordPress salts. If you rotate those salts the stored secrets can no longer be read, and the panel tells you to enter them again.<\/p><\/dd>\n<dt id=\"and%20the%20licence%3F\"><h3>And the licence?<\/h3><\/dt>\n<dd><p>The licence is handled by Freemius: the key, its activation and the checkout live in the Freemius screens under the nexya menu. The plugin stores nothing about it.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20i%20uninstall%3F\"><h3>What happens when I uninstall?<\/h3><\/dt>\n<dd><p>You choose, when you deactivate the plugin (or in Settings \u203a If the plugin is deleted):<\/p>\n\n<ul>\n<li>Keep my settings \u2014 its scheduled tasks are cleared and the server rules it wrote are taken out; everything else stays, for a reinstall or a move to nexya Pro.<\/li>\n<li>Erase everything \u2014 roles go back to the capabilities they had before the plugin touched them, the plugin's tables and options are dropped, its scheduled tasks are cleared and the private folder is removed. A copy of the settings only (no logs, no page data) stays for 30 days as a WordPress transient, which WordPress deletes on its own once it expires; if the plugin comes back within that time, it offers to import it.<\/li>\n<\/ul><\/dd>\n<dt id=\"can%20i%20move%20from%20wpml%20or%20polylang%3F\"><h3>Can I move from WPML or Polylang?<\/h3><\/dt>\n<dd><p>Yes, in Translate \u203a Import, after a backup and ideally on a copy of the site first. Languages, versions of contents, terms, menus, strings and forms come over; the former plugin is only switched off, so switching it back on restores the site. The addresses keep their shape, and those that change are redirected (301) through the Redirects module.<\/p>\n\n<p>Not taken over: prices per currency from WooCommerce Multilingual, a domain or subdomain per language (redirect it at the host), translated media files, and add-ons that need WPML or Polylang themselves. Image alternative texts are translated in Texts \u203a Images.<\/p><\/dd>\n<dt id=\"how%20do%20i%20move%20to%20nexya%20pro%20without%20losing%20my%20settings%3F\"><h3>How do I move to nexya Pro without losing my settings?<\/h3><\/dt>\n<dd><p>Install and activate nexya Pro while this plugin is still in place: both read the same settings, and Pro switches this version off. Then delete this version.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.4.9<\/h4>\n\n<ul>\n<li>Checkout (nexya Pro): a condensed checkout to switch on \u2014 information, shipping and payment one under the other on a single page, each in a bordered card, without the linked products step.<\/li>\n<li>Aris: the checkout funnel has two views, in steps and condensed, each counting the visits of its own layout.<\/li>\n<\/ul>\n\n<h4>1.4.8<\/h4>\n\n<ul>\n<li>Shortcuts: the Unpublishing tab did not save \u2014 ticking post types under \u201cWhere\u201d went back to the Duplication tab with nothing kept.<\/li>\n<\/ul>\n\n<h4>1.4.7<\/h4>\n\n<ul>\n<li>Checkout (nexya Pro): a product page adds to the cart without reloading \u2014 the side cart opens, or a short notice names the product when it is set not to open \u2014 with the shop\u2019s buttons showing the same notice; a setting turns it off.<\/li>\n<li>SEO (nexya Pro): every connected provider that draws is tried for the sharing image, even when its list of models could not be read, each one asked in a format it really draws, and Gemini\u2019s free tier is no longer reported as a used-up credit.<\/li>\n<\/ul>\n\n<h4>1.4.6<\/h4>\n\n<ul>\n<li>SEO (nexya Pro): with several providers connected, images go to OpenAI first, Gemini\u2019s free tier drawing none, and when every provider refuses, the message gives each one\u2019s reason.<\/li>\n<\/ul>\n\n<h4>1.4.5<\/h4>\n\n<ul>\n<li>SEO (nexya Pro): drawing the sharing image now waits up to four minutes instead of thirty seconds, OpenAI needing that long, and a used-up provider credit is named as such instead of \u201coverloaded\u201d.<\/li>\n<\/ul>\n\n<h4>1.4.4<\/h4>\n\n<ul>\n<li>Security settings: a new tab with small switches \u2014 hide the WordPress version, block PHP in the uploads folder, switch off the file editor, XML-RPC and application passwords, give the same message for every failed login, refuse \u201cadmin\u201d as a username and require strong passwords.<\/li>\n<li>Security: a plugin or theme updated through WordPress no longer shows up as changed files in the fingerprint, and every list of reported files has an Allow them all button.<\/li>\n<li>Checkout (nexya Pro): a logged-in customer who has already ordered goes straight to the payment step, from the side cart or the checkout, with every step still one click away.<\/li>\n<li>Checkout: the side cart shows a dark and a light button, the light one with colours of its own, and no longer a Continue shopping link under them.<\/li>\n<li>Checkout: the privacy policy link of the payment step kept the theme\u2019s blue.<\/li>\n<li>SEO (nexya Pro): \u201cGenerate with AI\u201d for the sharing image failed with \u201cNo models found\u201d on a connector that cannot draw a wide image; the image is now asked in the widest format the connector draws, and a connector that only writes says so plainly.<\/li>\n<\/ul>\n\n<h4>1.4.3<\/h4>\n\n<ul>\n<li>Invoices (nexya Pro): invoices, receipts, delivery notes, packing slips and credit notes in PDF for every WooCommerce order, built section by section with a live preview, numbered in order, kept as issued, attached to the e-mails you choose and downloadable in My account.<\/li>\n<li>Invoices: the Swiss QR-bill at the bottom of the invoice, with a QR-IBAN or an IBAN, the layout for window envelopes, a watermark, and printing in bulk from the list of orders.<\/li>\n<\/ul>\n\n<h4>1.4.2<\/h4>\n\n<ul>\n<li>Security: the content security policy, once confirmed, was missing on pages served from the cache; it now goes into the .htaccess block with the other headers.<\/li>\n<\/ul>\n\n<h4>1.4.1<\/h4>\n\n<ul>\n<li>Settings: a Test tab checks the site itself \u2014 security, e-mail, sharing and speed \u2014 and gives each test a grade from A to E, with what to fix.<\/li>\n<li>Security: pages served from the cache went out without the security headers, the headers block and the cache blocks overwriting each other in the .htaccess; the block now has a name of its own and comes back by itself when it goes missing.<\/li>\n<li>Checkout: the side cart opened on a reloaded page after an add to cart could show the cart as empty.<\/li>\n<\/ul>\n\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>Checkout (nexya Pro): the WooCommerce checkout on a page of its own, in steps, with the order summary beside it, a look of its own set with a live preview, and a matching thank-you page.<\/li>\n<li>Checkout: side cart, floating cart button, cart in the menu with [nexya_cart] and a Cart widget for Elementor, the number of products following the cart live.<\/li>\n<li>Checkout: a linked products step, a one-click offer above the order button, promo codes by link, and reassurance lines with payment logos.<\/li>\n<li>Checkout: country, canton, date and phone code chosen in a small window; the town filled in from the postcode in eight countries; e-mail typos caught; phone numbers checked and stored in the international format; UID numbers checked; a delivery date and a pickup note.<\/li>\n<li>Checkout: custom fields above the order notes, free or taken from an ACF or NCF product field, shown only when a product of the cart needs them; the answers are kept on the order and shown in the e-mails and on the thank-you page.<\/li>\n<li>Checkout: a reminder for abandoned carts, an account created in one click after the order, the order\u2019s progress, a review request, and the checkout funnel in Aris.<\/li>\n<li>Captcha: WooCommerce orders were refused as coming from a robot, WooCommerce ticking the payment method again by script; a refused submission now says why.<\/li>\n<li>Custom fields leave the beta.<\/li>\n<li>Forms: the date picker takes a first and a last date.<\/li>\n<li>WordPress.org: the plugin no longer preloads WordPress\u2019s update data, which the Plugin Check took for an update routine.<\/li>\n<\/ul>\n\n<h4>1.3.11<\/h4>\n\n<ul>\n<li>Translation: the hreflang links are printed again. The module took its own Polylang compatibility functions for Polylang itself and stayed silent, on every site using it.<\/li>\n<\/ul>\n\n<h4>1.3.10<\/h4>\n\n<ul>\n<li>Interface: module headers, menu entries and tabs follow the admin\u2019s language \u2014 French, German, Spanish or Italian \u2014 instead of English names.<\/li>\n<li>Speed: CSS and JavaScript are served minified, the readable files staying in the plugin for SCRIPT_DEBUG; more settings are preloaded, and custom fields are no longer read for menus, images and styles, which have none: fewer queries on every page.<\/li>\n<li>Clearer screens, after a round of user tests: deletions under a red bin, a Save bar that stays at the top, plain-language help on security headers, performance, a closed site and personal data, and search, sort and bulk removal on not-found pages; Mailya takes the same layout as the other modules.<\/li>\n<li>Security: while \u201cSend the headers\u201d is off, the headers below are greyed out and a notice with an \u201cActivate\u201d button says the protection is inactive; the module card says so too.<\/li>\n<li>Custom fields: a \u201cpage template\u201d rule now only applies to pages, as in ACF; a group set on the default page template no longer shows up on posts and other content types.<\/li>\n<li>Mailya: the bookkeeping columns of a Mailchimp export \u2014 rating, IP address, location, unsubscribe reason and the like \u2014 are no longer imported as contact fields.<\/li>\n<li>SEO: when WordPress asks search engines not to index the site, a button opens it to them in one click.<\/li>\n<li>Media and AI count the images missing an alternative text the same way.<\/li>\n<li>404 &amp; Redirects: on a site installed in a folder, \u201cSuggest with AI\u201d no longer proposes the broken address itself, which the save then refused as a loop.<\/li>\n<li>404 &amp; Redirects: saved redirects get their own tab, with an Active \/ Inactive filter and switch on, switch off or delete in bulk; the target field suggests published pages from the fourth letter typed; a button empties the 404 log.<\/li>\n<li>404 &amp; Redirects: the addresses only vulnerability scanners ask for \u2014 phpinfo, _environment, server-status and the like \u2014 are no longer logged nor given a suggested redirect, and those already in the log are cleared.<\/li>\n<\/ul>\n\n<h4>1.3.9<\/h4>\n\n<ul>\n<li>Translate: the cookie banner\u2019s texts \u2014 title, message, buttons and links \u2014 are translated in the Texts tab, \u201cSite\u201d group, by hand or by the AI; those left as shipped follow each language on their own, and the links lead to the cookies page and the privacy policy of the visitor\u2019s language.<\/li>\n<li>Translate and WooCommerce: on a page in another language than the default one, the address of WooCommerce\u2019s calls is no longer damaged by the added language, so side carts and the other add-ons that use it show the added products again.<\/li>\n<\/ul>\n\n<h4>1.3.8<\/h4>\n\n<ul>\n<li>Reviews: in the free version, two weeks after it was installed, a discreet notice on nexya\u2019s own screens asks for a review on WordPress.org; it can be put off for a month or dismissed for good.<\/li>\n<li>Speed: nexya\u2019s settings, the images of custom fields and the translated home pages are now read in a few grouped queries, so each page asks the database less \u2014 about fifteen queries fewer on a typical page.<\/li>\n<\/ul>\n\n<h4>1.3.7<\/h4>\n\n<ul>\n<li>Permalinks: right after the plugin is activated, or after a module is switched on, the notice no longer claims that the address rules are missing; WordPress writes them at once and the notice only appears when rules are really missing.<\/li>\n<\/ul>\n\n<h4>1.3.6<\/h4>\n\n<ul>\n<li>Hub: on a new install, a first card asks what kind of site this is \u2014 a showcase site, a shop or a blog \u2014 and switches on the modules that suit it in one click; each stays free to switch off.<\/li>\n<li>Mailya: a Section block groups blocks on a coloured background \u2014 up to three columns side by side, with their own split, gap, vertical alignment, side space, inner space and rounded corners. Titles, paragraphs, images, buttons, separators, spaces and social links go inside each column.<\/li>\n<li>Mailya: an image can have rounded corners, and the rounded corners of an image or a section can differ on phones.<\/li>\n<li>Mailya: on phones, a section shows its columns one under the other by default; two or three side by side can be chosen instead.<\/li>\n<li>Permalinks: the \u201cPermalinks regenerated\u201d message no longer comes back on every page; it shows once, right after the regeneration.<\/li>\n<li>Media library: after \u201cSelect all\u201d, the \u201cMove to trash\u201d and \u201cDelete permanently\u201d buttons are usable at once, in a folder and in the trash, without clicking a file first.<\/li>\n<li>Security: the templates WPML keeps in its cache inside the media folder are no longer reported every day as suspicious PHP files, as long as they hold nothing but a template.<\/li>\n<li>Admin notices: the close button is easier to see and centred in its notice.<\/li>\n<\/ul>\n\n<h4>1.3.5<\/h4>\n\n<ul>\n<li>Permalinks: a notice warns when the address rules need regenerating \u2014 rules missing after a plugin or a type was added, none stored at all, or posts answering \u201cPage not found\u201d because the server lost them \u2014 with a \u201cRegenerate now\u201d button and a link to the permalink settings.<\/li>\n<li>Cookies: the default colour of the \u201cAccept\u201d button was too pale for its white text; it is now darker and readable, and a site that kept the old default follows the new one.<\/li>\n<li>Cookies and Google consent mode: links on the site no longer carry a \u201c_gl\u201d parameter for every visitor who has not chosen yet. Only a visitor who arrives from an ad keeps their click from page to page, and the parameter leaves the address bar once Google has read it.<\/li>\n<\/ul>\n\n<h4>1.3.4<\/h4>\n\n<ul>\n<li>Query monitor: it no longer changes how WordPress runs \u2014 the queries are read as they pass, without switching SAVEQUERIES on. The free version lists them without their times unless wp-config.php asks for them; with nexya Pro, times are measured for an administrator\u2019s own pages only.<\/li>\n<li>Forms: the PHP notice \u201ctranslation loading for the freexya domain was triggered too early\u201d, written to the debug log on every page since WordPress 6.7, is gone.<\/li>\n<li>Mailya: the monthly digest tab no longer stops with an error on a site whose time zone is set as a UTC offset, as on a fresh WordPress install.<\/li>\n<\/ul>\n\n<h4>1.3.3<\/h4>\n\n<ul>\n<li>Security: the files of every plugin that comes from wordpress.org are compared each day with the originals of their version, and PHP files hidden in the media folder are flagged; an e-mail warns when something new appears. nexya Pro puts an original back \u2014 of WordPress or of a plugin \u2014 or sets a suspicious file aside in one click, keeping a copy of each. A file you know can be allowed: it is no longer reported, unless it changes again.<\/li>\n<li>Translate and WooCommerce: a shop in several languages \u2014 one product per language, linked, sharing prices, sales, SKU, stock, dimensions, shipping, pictures, categories and attributes; each variation has its version. The Shop, Cart, Checkout and My account pages follow the visitor\u2019s language, the basket shows its products in the language read, an order keeps its language and the customer receives its e-mails in it. \u201cCreate by hand\u201d on a product makes a real WooCommerce copy, and a SKU only has to be unique within one language.<\/li>\n<li>Translate: a Shop and strings tab translates \u2014 by hand or with AI \u2014 the names of attributes, shipping methods and payment methods, and the strings a theme registers for Polylang. With nexya Pro, Polylang\u2019s functions (pll_current_language(), pll__(), pll_the_languages()\u2026) answer with nexya\u2019s languages once Polylang is switched off.<\/li>\n<li>From Polylang: the import also takes over the shop \u2014 products with their prices, stock and variations, categories, tags, attributes and the language of orders \u2014, the strings translated in Polylang and the options pages of ACF Options for Polylang. A version left a draft beside a published original counts as unfinished and is translated in full, title included.<\/li>\n<li>Translate \u203a Texts: the theme\u2019s strings are read whatever their text domain, in PHP files and Twig templates, strings without a domain and plural forms included, and other themes can be ticked like plugins; a string the theme\u2019s language file already translates shows a \u201cLanguage file\u201d state with its text. Each file folds, and one button folds or unfolds them all.<\/li>\n<li>AI \u203a Batches: a \u201cTranslate the site\u2019s contents\u201d card translates in the background, in one go, the contents of the types ticked \u2014 pages, posts, products and every type with languages \u2014 then the terms, menus, forms, strings, options pages and shop texts, into the languages ticked, as drafts or published; it shows the count and the cost first.<\/li>\n<li>Translate: a version still word for word its original, or made by hand with fields still copied from it, is translated \u2014 only the fields a person rewrote are kept and locked, and they are no longer sent to the AI; tags, entities and kinds of spaces aside, a field identical to the original counts as to translate. The editor shows such a version \u201cTo translate\u201d or \u201cTo complete\u201d.<\/li>\n<li>AI translation: a field whose markup comes back damaged no longer stops the whole page \u2014 markers written another way are taken back, a stubborn text is translated piece by piece between its tags, and only a field that still fails stays \u201cTo translate\u201d. Without an AI connector, the \u201cTranslate everything with AI\u201d button leads to the connector settings instead of disappearing.<\/li>\n<li>Translate: a get_posts() query filtered on a category no longer mixes languages, and WooCommerce\u2019s own calls \u2014 the basket, the checkout, its Store API \u2014 speak the language of the page that made them.<\/li>\n<li>Admin theme: the edit screen keeps its full width when a plugin or the theme sets the content area inline. Aris: the editor\u2019s heatmap section no longer queries a site where the heatmap was never switched on. Query monitor: its button sits a little higher, clear of the buttons other plugins put bottom right.<\/li>\n<\/ul>\n\n<h4>1.3.2<\/h4>\n\n<ul>\n<li>nexya forms and Mailya: an icon before and\/or after the label of the submit button \u2014 one of sixteen, or an image from the media library \u2014 centred on the text, the order following right-to-left languages.<\/li>\n<li>Editor: the language and translations, the visibility, the unpublishing date and the internal links of a post sit in one nexya panel of the sidebar, in sections, instead of separate boxes; each language shows whether it is translated.<\/li>\n<li>Aris: when a published page had visits recorded by the heatmap over the last 30 days, the nexya panel of the editor shows its views and clicks and opens its heatmap in one click, for each type of screen.<\/li>\n<li>Media: an Uploading files card names what the server allows \u2014 largest file, memory to process an image, time per request, image library, formats \u2014 says in plain words which limit stops an upload, tests each image library with a real photo, and can make WordPress use GD rather than Imagick; when an upload fails in the media library, its message now says the likely cause and what to do.<\/li>\n<\/ul>\n\n<h4>1.3.1<\/h4>\n\n<ul>\n<li>Cookies and Cache: the page is filtered and kept through the output buffer WordPress itself opens and closes around templates, instead of one opened by the plugin; nexya now needs WordPress 6.9 or later.<\/li>\n<li>Admin theme: the WooCommerce report colours are changed in the browser, on the charts and their legends, instead of rewriting the whole page.<\/li>\n<li>Readme: the external services now also cover Gmail and Microsoft 365 sending, Cloudflare, the forms webhook and the AI suggestions.<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Translate: the language and the other versions of each content come from one index, read in a single query per page, instead of two queries for each linked content; the menu pre-reading of 1.2.38 is no longer needed and is gone.<\/li>\n<\/ul>\n\n<p>Earlier versions: https:\/\/nexya.dev\/en\/whats-new\/<\/p>","raw_excerpt":"Cookie consent with Google Consent Mode, SMTP with mail log, redirects and 404s, captcha, security headers \u2014 one light plugin, modules you switch on.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/mfe.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/366931","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mfe.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/mfe.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/mfe.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=366931"}],"author":[{"embeddable":true,"href":"https:\/\/mfe.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/nexyadev"}],"wp:attachment":[{"href":"https:\/\/mfe.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=366931"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/mfe.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=366931"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/mfe.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=366931"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/mfe.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=366931"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/mfe.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=366931"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/mfe.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=366931"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}