WP Manifestindependent plugin directory
manifest / forms / gf-erratum

GF Erratum self-updates

Readers select text in your content and propose a correction. Proposals become Gravity Forms entries that a reviewer applies in one click.

by Guilamu · github.com/guilamu/gf-erratum · website

★ 0stars
0forks

Install

No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:

wp plugin install https://github.com/guilamu/gf-erratum/archive/refs/heads/main.zip

Ships its own WordPress updater (built-in updater), so new versions show up under Dashboard → Updates.

Readers select text in your content and propose a correction. Proposals become Gravity Forms entries that a reviewer applies in one click.

Proposing a Correction

  • Select a word or a passage in an article: on desktop, a "Propose a correction" tooltip appears above the selection; on touch screens, a bar appears at the bottom of the screen
  • A selection that starts or ends inside a word is widened to the whole word
  • Edit the text in a window that closes with its cross, Escape or a click outside, then send it; the reader sees the form's own confirmation message and can propose another correction on the same page
  • Choose the content types that accept proposals, and require readers to be logged in per type
  • Set the selection length (1-2000 characters) and the number of proposals per hour and per visitor (1-1000)

Reviewing and Applying

  • Each proposal is a Gravity Forms entry, so Gravity Forms validation, spam filters and notifications apply
  • The entry shows a before/after preview with Apply correction, Reject and Open in editor
  • Applying rewrites only the characters that differ: surrounding markup and typography are left untouched, and a revision is saved
  • The comparison ignores what typography plugins add at render time: soft hyphens, non-breaking spaces, curly quotes, dashes, ellipses
  • The Apply button is only offered when the passage is found once and the change stays inside a paragraph; otherwise the reviewer is sent to the editor
  • The reader receives a Correction applied notification if they left an email address
  • Check compatibility from the settings: every enabled content is scanned, and those whose text cannot be located are listed

Divi 5 Window

  • Create the correction window as a global element of the Divi library from the settings, then edit it in the Visual Builder
  • The window uses the site's presets and global variables, and is loaded only on contents that accept proposals
  • Without Divi 5, the plugin uses its own window, styled with CSS custom properties

Key Features

  • Multilingual: works with content in any language, including accented and non-Latin scripts
  • Translation-Ready: all strings are internationalized; French translation included
  • Secure: the content, its URL and a logged-in reader's email are set server-side; the selected text must exist in the content; honeypot and per-visitor rate limit (hashed IP); dedicated capabilities to review proposals, plus edit_post on the content to apply them
  • Cache-Friendly: pages stay cacheable; the only per-user value is the REST nonce, printed for logged-in users only
  • Divi 5 and Block Content: in JSON-encoded block attributes, only the changed string is replaced, then the content is parsed again to check that nothing else moved
  • GitHub Updates: automatic updates from GitHub releases

Requirements

  • Gravity Forms 2.8 or higher
  • WordPress 6.5 or higher
  • PHP 7.4 or higher
  • Optional: Divi 5, for the correction window built in the Visual Builder

Installation

  1. Download gf-erratum.zip from the latest release and upload it in Plugins → Add New → Upload Plugin, or upload the gf-erratum folder to /wp-content/plugins/
  2. Activate the plugin through the Plugins menu in WordPress
  3. Open any admin page: the plugin creates the form Correction proposals (GF Erratum)
  4. Go to Forms → Settings → Erratum and choose the content types that accept proposals
  5. With Divi 5, click Create the Divi element in the same settings to build the window in the Visual Builder

FAQ

Why is the Apply button missing on an entry?

The passage was found several times, no longer exists, or the change spans several paragraphs. Use Open in editor. The settings' compatibility check lists contents whose text cannot be located.

Who can apply proposals?

Users with gravityforms_erratum_review and permission to edit the content. Administrators receive the add-on capabilities on install and on every update; grant them to other roles with Members or a similar plugin.

The proposals form was deleted. How do I get it back?

Recreate it from Forms → Settings → Erratum. Field roles are stored in the form, so no field ID is hard-coded.

Does it work with page caching?

Yes, as long as your page cache does not serve cached pages to logged-in users (the default in LiteSpeed Cache and WP Rocket).

How do I change the window's look without Divi?

Set the accent color in the settings, or override the CSS custom properties --gf-erratum-accent, --gf-erratum-accent-text, --gf-erratum-surface, --gf-erratum-text, --gf-erratum-muted, --gf-erratum-line, --gf-erratum-radius and --gf-erratum-z.

Can I test matching from the command line?

Yes, with WP-CLI:

wp gf-erratum scan --post_type=post,page
wp gf-erratum dry-run 123 "une coquile" "une coquille"

Project Structure

.
├── gf-erratum.php                    # Main plugin file: constants, loading, translations, plugin row links
├── README.md
├── assets
│   ├── css
│   │   ├── admin.css                 # Entry preview and review box
│   │   └── frontend.css              # Tooltip, touch bar and correction window
│   └── js
│       └── frontend.js               # Selection capture, window, submission
├── includes
│   ├── class-cli.php                 # WP-CLI commands: scan, dry-run
│   ├── class-content-adapter.php     # Locates and rewrites text in HTML and Divi 5 block content
│   ├── class-divi-element.php        # Divi 5 global element: creation and rendering
│   ├── class-entry-admin.php         # Entry review box: preview, apply, reject
│   ├── class-form-installer.php      # Creates the proposals form and its notifications
│   ├── class-gf-erratum-addon.php    # Gravity Forms add-on: settings, capabilities, frontend assets
│   ├── class-github-updater.php      # GitHub auto-updates
│   ├── class-rest-controller.php     # REST endpoint receiving proposals
│   ├── class-text-matcher.php        # Typography-insensitive text matching
│   └── Parsedown.php                 # Markdown parser for the View details popup
└── languages
    ├── gf-erratum-fr_FR.l10n.php     # French translation (PHP format, WordPress 6.5+)
    ├── gf-erratum-fr_FR.mo           # French translation (binary)
    ├── gf-erratum-fr_FR.po           # French translation (source)
    └── gf-erratum.pot                # Translation template

Changelog

1.0.5 - 2026-10-05

  • Changed: The correction window has a header band with its title and close button, in the Divi 5 primary colour when available (--gf-erratum-header to override). With a Divi element, the title is taken from its heading, which is hidden in the window

1.0.4 - 2026-10-05

  • Fixed: The 1.0.3 hover fix had no effect: the button was measured before the window was added to the page

1.0.3 - 2026-10-05

  • Fixed: In a correction window built with Divi, the "Send" button no longer narrows on hover: it keeps its padding and only changes colour, like Divi buttons

1.0.2 - 2026-10-05

  • Fixed: Spam proposals posted straight to the Gravity Forms form, bypassing the checks (selected text must exist in the content, rate limit, honeypot): the form now only accepts submissions from the correction window

1.0.1 - 2026-10-04

  • Fixed: "Not tested with your version of WordPress" warning in the details popup: tested up to 7.1.2
  • Fixed: "Requires Gravity Forms" line missing from the details popup on non-English sites

1.0.0 - 2026-10-04

  • Initial release
  • Text selection with a tooltip on desktop and a bar on touch screens, widened to whole words
  • Proposals stored as entries of an automatically created Gravity Forms form, with the form's confirmation shown to the reader
  • Before/after preview and one-click apply that rewrites only the changed characters, in HTML and Divi 5 block content
  • Correction window as a Divi 5 global element, using the site's presets
  • Content types, logged-in requirement, selection length and rate limit settings, plus a compatibility check
  • Dedicated capabilities granted to administrators
  • WP-CLI commands scan and dry-run
  • French translation

Security

If you discover a security vulnerability in this plugin, please report it responsibly through GitHub Security Advisories. Do not open a public issue for security reports.

Contributing

Contributions are welcome! Please open an issue or submit a pull request on GitHub.

For translations, the plugin uses WordPress i18n. You can contribute translations by editing the .po files in the languages/ directory and generating the corresponding .mo files with the wp i18n CLI commands, or with the bundled helper:

php tools/i18n.php pot       # extract strings
php tools/i18n.php check     # list missing translations
php tools/i18n.php compile   # build .mo and .l10n.php

Run the matcher and content adapter tests with php tests/run.php.

License

This project is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0) — see the LICENSE file for details.


Made with love for the WordPress community