WordPress.org

Plugin Directory

Freexya – Cookie Consent, SMTP, Redirects & Security Toolkit

Freexya – Cookie Consent, SMTP, Redirects & Security Toolkit

Description

One plugin for the jobs every WordPress site needs, instead of five or six:

  • E-mails that do not arrive — send through SMTP or an API, keep a log of every message, and read the server’s own reason when one fails.
  • A cookie banner that really blocks — third-party scripts and embeds wait for consent, with Google Consent Mode v2.
  • 404s after a redesign — a log of the broken addresses visitors hit, with their count, redirected in one click.
  • Security — HTTP headers, a limit on failed logins, and your plugins checked against known vulnerabilities.

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:

  • Dashboard — a readable admin home and a tidied toolbar.
  • Shortcuts — duplicate content, reorder it by hand, add entries in one click.
  • Roles & capabilities — capabilities sorted under the post type that creates them, and the site seen through a role’s eyes without leaving your own account.
  • Activity log — who changed what, with the before and the after.
  • Cookies — a consent banner, third-party scripts held back until consent, and a scan that finds them.
  • SEO — titles and descriptions with a suggestion drawn from the page’s text, sitemap, schema, llms.txt.
  • Mail — 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.
  • Redirects — exact redirects and a 404 log with the hit count.
  • Media — regenerate thumbnails in the background, in batches.
  • Security — security headers, a content policy, a limit on failed logins, and a check of the installed plugins against known vulnerabilities.
  • Maintenance — a holding page, database clean-up, a database export, and the previous version of each extension kept before its update.
  • Custom fields — field groups with repeaters, flexible content and relations, kept in their own tables, and content types and taxonomies of your own.
  • Element — sixteen Elementor widgets for custom fields, NCF’s or ACF’s: repeaters as cards, tabs or tables, galleries and sliders, key figures, teams, timelines, taxonomies, maps.
  • Translate — 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.

Free and Pro

Everything above is free, on as many sites as you like. nexya Pro, sold on nexya.dev, adds three modules — nexya forms, Mailya for newsletters and a page cache — 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.

Privacy

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.

Multisite

Multisite networks are not supported. On a network the plugin stays switched off and says so.

External services

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.

WPVulnerability (Security module, vulnerability watch). 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/

WordPress.org checksums (Security module). While the Security module is on, once a day and when you press “Check now”, the plugin asks api.wordpress.org — the same service WordPress uses for its own updates — 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/

IndexNow (SEO module, optional, off by default). 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 — Privacy (Microsoft, which runs the IndexNow service): https://www.microsoft.com/en-us/privacy/privacystatement

Stripe (nexya forms, Payment module, optional, nexya Pro). 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 — Privacy: https://stripe.com/privacy

PayPal (nexya forms, Payment module, optional, nexya Pro). 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 — Privacy: https://www.paypal.com/myaccount/privacy/privacyhub

Patchstack (Security module, optional). 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/ — Privacy: https://patchstack.com/privacy-policy/

E-mail delivery (E-mails module). 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/ — https://www.brevo.com/legal/privacypolicy/), SendGrid (https://www.twilio.com/en-us/legal/tos — https://www.twilio.com/en-us/legal/privacy), Postmark (https://postmarkapp.com/terms-of-service — https://postmarkapp.com/privacy-policy), Resend (https://resend.com/legal/terms-of-service — https://resend.com/legal/privacy-policy), SMTP2GO (https://www.smtp2go.com/terms/ — https://www.smtp2go.com/privacy/), MailerSend (https://www.mailersend.com/legal/terms-of-service — https://www.mailersend.com/legal/privacy-policy), SendLayer (https://sendlayer.com/terms-of-service/ — https://sendlayer.com/privacy-policy/), Mandrill (https://mailchimp.com/legal/terms/ — https://mailchimp.com/legal/privacy/), Mailgun (https://www.mailgun.com/legal/terms/ — https://www.mailgun.com/legal/privacy-policy/), Elastic Email (https://elasticemail.com/resources/usage-policies/terms-of-use — https://elasticemail.com/resources/usage-policies/privacy-policy) and SparkPost (https://www.sparkpost.com/policies/tou/ — https://www.sparkpost.com/policies/privacy/).

Gmail and Microsoft 365 sending (E-mails module, optional). 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 — Terms: https://policies.google.com/terms — Privacy: https://policies.google.com/privacy. Microsoft — Terms: https://www.microsoft.com/en-us/servicesagreement — Privacy: https://www.microsoft.com/en-us/privacy/privacystatement

Cloudflare (Cache module, optional). 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/ — Privacy: https://www.cloudflare.com/privacypolicy/

Form webhook (nexya forms, optional). 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…); the plugin contacts no address you did not enter, and the terms and privacy policy that apply are those of the service you chose.

AI suggestions (optional). The plugin calls no AI provider itself. When you press a button that asks for a suggestion (a title, a description, an image text…), 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.

Audience measurement tags (SEO module). 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.
* Google Tag Manager and Google Analytics 4, from www.googletagmanager.com. Terms: https://marketingplatform.google.com/about/analytics/terms/us/ — Privacy: https://policies.google.com/privacy
* Plausible, from plausible.io or the address you enter. Terms: https://plausible.io/terms — Privacy: https://plausible.io/privacy
* Umami, from the address of your own Umami instance or Umami Cloud. Terms: https://umami.is/terms — Privacy: https://umami.is/privacy
* Matomo, from the address of your own Matomo instance or Matomo Cloud. Terms: https://matomo.org/matomo-cloud-terms-of-service/ — Privacy: https://matomo.org/privacy-policy/

Freemius (trial and purchase of nexya Pro). 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/ — Privacy: https://freemius.com/privacy/

Lists of known hosts (Cookies and Security modules). 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.

Requests to your own site. 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.

Third-party libraries

  • Chart.js 4.5.1 (MIT) draws the statistics charts — assets/js/chart.min.js. Source: https://github.com/chartjs/Chart.js
  • Freemius SDK (GPL) handles the licence and the update checks. Source: https://github.com/Freemius/wordpress-sdk
  • Font Awesome Free 6.7.2 brand icons (CC BY 4.0) for the social networks of e-mails and pop-ups — assets/social/. Source: https://fontawesome.com

The plugin’s own JavaScript and CSS ship unminified, as written.

Screenshots

Installation

  1. In Plugins > Add New, search for “freexya”, then install and activate it. You can also upload the folder to wp-content/plugins/.
  2. Open nexya in the admin menu. On a new install, a first card asks what kind of site this is — a showcase site, a shop or a blog — and switches on the modules that suit it in one click. You can also pick them yourself.
  3. 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.
  4. The hub’s other tabs hold what is shared: Settings (the panel language, and whether your settings are kept if the plugin is deleted), Colours (your brand colours for the cookie banner, forms, messages and holding pages), AI (the connector the AI features use) and Export & import (every setting in one file, to copy a set-up to another site).

FAQ

Does a module I turned off still cost anything?

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.

Where are SMTP passwords stored?

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.

And the licence?

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.

What happens when I uninstall?

You choose, when you deactivate the plugin (or in Settings › If the plugin is deleted):

  • Keep my settings — 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.
  • Erase everything — 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.

Can I move from WPML or Polylang?

Yes, in Translate › 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.

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 › Images.

How do I move to nexya Pro without losing my settings?

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.

Reviews

October 12, 2026 2 replies
Super utile ! Un vrai couteau suisse !!
Read all 2 reviews

Contributors & Developers

“Freexya – Cookie Consent, SMTP, Redirects & Security Toolkit” is open source software. The following people have contributed to this plugin.

Contributors

Changelog

1.3.7

  • 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.

1.3.6

  • Hub: on a new install, a first card asks what kind of site this is — a showcase site, a shop or a blog — and switches on the modules that suit it in one click; each stays free to switch off.
  • Mailya: a Section block groups blocks on a coloured background — 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.
  • Mailya: an image can have rounded corners, and the rounded corners of an image or a section can differ on phones.
  • Mailya: on phones, a section shows its columns one under the other by default; two or three side by side can be chosen instead.
  • Permalinks: the “Permalinks regenerated” message no longer comes back on every page; it shows once, right after the regeneration.
  • Media library: after “Select all”, the “Move to trash” and “Delete permanently” buttons are usable at once, in a folder and in the trash, without clicking a file first.
  • 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.
  • Admin notices: the close button is easier to see and centred in its notice.

1.3.5

  • Permalinks: a notice warns when the address rules need regenerating — rules missing after a plugin or a type was added, none stored at all, or posts answering “Page not found” because the server lost them — with a “Regenerate now” button and a link to the permalink settings.
  • Cookies: the default colour of the “Accept” 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.
  • Cookies and Google consent mode: links on the site no longer carry a “_gl” 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.

1.3.4

  • Query monitor: it no longer changes how WordPress runs — 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’s own pages only.
  • Forms: the PHP notice “translation loading for the freexya domain was triggered too early”, written to the debug log on every page since WordPress 6.7, is gone.
  • 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.

1.3.3

  • 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 — of WordPress or of a plugin — 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.
  • Translate and WooCommerce: a shop in several languages — 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’s language, the basket shows its products in the language read, an order keeps its language and the customer receives its e-mails in it. “Create by hand” on a product makes a real WooCommerce copy, and a SKU only has to be unique within one language.
  • Translate: a Shop and strings tab translates — by hand or with AI — the names of attributes, shipping methods and payment methods, and the strings a theme registers for Polylang. With nexya Pro, Polylang’s functions (pll_current_language(), pll__(), pll_the_languages()…) answer with nexya’s languages once Polylang is switched off.
  • From Polylang: the import also takes over the shop — products with their prices, stock and variations, categories, tags, attributes and the language of orders —, 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.
  • Translate › Texts: the theme’s 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’s language file already translates shows a “Language file” state with its text. Each file folds, and one button folds or unfolds them all.
  • AI › Batches: a “Translate the site’s contents” card translates in the background, in one go, the contents of the types ticked — pages, posts, products and every type with languages — 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.
  • Translate: a version still word for word its original, or made by hand with fields still copied from it, is translated — 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 “To translate” or “To complete”.
  • AI translation: a field whose markup comes back damaged no longer stops the whole page — 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 “To translate”. Without an AI connector, the “Translate everything with AI” button leads to the connector settings instead of disappearing.
  • Translate: a get_posts() query filtered on a category no longer mixes languages, and WooCommerce’s own calls — the basket, the checkout, its Store API — speak the language of the page that made them.
  • Admin theme: the edit screen keeps its full width when a plugin or the theme sets the content area inline. Aris: the editor’s 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.

1.3.2

  • nexya forms and Mailya: an icon before and/or after the label of the submit button — one of sixteen, or an image from the media library — centred on the text, the order following right-to-left languages.
  • 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.
  • 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.
  • Media: an Uploading files card names what the server allows — largest file, memory to process an image, time per request, image library, formats — 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.

1.3.1

  • 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.
  • Admin theme: the WooCommerce report colours are changed in the browser, on the charts and their legends, instead of rewriting the whole page.
  • Readme: the external services now also cover Gmail and Microsoft 365 sending, Cloudflare, the forms webhook and the AI suggestions.

1.3.0

  • 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.

Earlier versions: https://nexya.dev/en/whats-new/