Install
This is the repository archive. It installs, but the folder name will carry the branch suffix and updates will not flow.
Install straight from GitHub with WP-CLI:
wp plugin install https://github.com/mammothwp/admin-terms-acceptance/archive/refs/heads/main.zip
MammothWP Acceptance Logs
Log that your users accepted your terms. Versioned, role-scoped and tamper-evident, with a permanent archive of every version.
- Versioned archive of every published text; versions are never deleted.
- Tamper-evident log: two signatures per record plus a hash chain, with a verifier.
- Role-scoped prompt: popup with "skip for now" and a persistent notice.
- GDPR tooling: exporter, eraser, retention anonymisation, privacy-policy text.
- One definition, four surfaces: admin, REST, WP-CLI and the Abilities API (via wp-kit).
- Not consent management: an access-control and contractual-compliance record (GDPR Art. 6(1)(b), (f)).
Screenshots live in .wordpress-org/ (screenshot-N.png, regenerated by bin/screenshots/).
Download and install
The wordpress.org listing is pending review. Until it is live, install from this repository, as described on https://mammothwp.com/plugins/mammothwp-acceptance-logs/:
- Download the ZIP of
mainfrom GitHub (Code → Download ZIP). - Unzip it, rename the folder
admin-terms-acceptance-maintomammothwp-acceptance-logs, and zip that folder again. - In WordPress go to Plugins → Add New → Upload Plugin, choose the zip and install it.
- Activate the plugin, then open Settings → Terms & Conditions.
The GitHub tree has no vendor/ directory. The core acceptance flow works
without it, but the REST API, WP-CLI, the Abilities API, the Support screen and
PDF receipts need the dependencies. Run this inside the plugin folder before
zipping (or on the server):
composer install --no-dev --optimize-autoloader
Requires WordPress 6.2+ and PHP 8.1+. To build a distributable zip from a
checkout, use composer build (see Contributing).
Usage
Full details in docs/usage.md.
| Surface | Example |
|---|---|
| Admin | Settings → Terms & Conditions; Users → Terms acceptance log |
| REST | GET /wp-json/mmwp/v1/terms/acceptances?version_id=3 (plugin managers) |
| WP-CLI | wp mmwp terms publish --content="$(cat terms.html)" --only-if-changed |
| Abilities | mmwp-acceptance-logs/list-acceptances (read-only) |
Regenerating screenshots
The four wordpress.org screenshots are produced by bin/screenshots/: a fresh
WordPress with Twenty Twenty-Four, demo users (@example.com), two published
versions and six signed acceptances, captured with Playwright at 1280px.
vendor/bin/mmwp-release build
# needs an empty MySQL/MariaDB database and WP-CLI
DB_NAME=wp DB_USER=root DB_HOST=127.0.0.1:3306 \
bin/screenshots/install.sh /tmp/shots-wp mammothwp-acceptance-logs.zip
cd bin/screenshots && npm install && npx playwright install chromium
WP_DIR=/tmp/shots-wp node capture.mjs # writes ../../.wordpress-org/screenshot-N.png
Shots: 1 settings (cropped), 2 acceptance log after "Verify integrity",
3 popup for a Subscriber on an older version, 4 public block. Optimise the PNGs
losslessly (e.g. oxipng -o4) if any grows past ~400 KB.
Hooks
Every hook is mmwp_terms_-prefixed and listed in HOOKS.md.
Support
Use the support forum on wordpress.org, or e-mail info@mammothwp.com. The
plugin never sends anything on its own; see docs/privacy.md.
Contributing
composer install
composer lint # phpcs (WPCS + PHPCompatibilityWP) and phpstan
bin/install-wp-tests.sh wordpress_test root '' 127.0.0.1 latest
composer test:phpunit
mmwp-release build # zip from .distignore, for Plugin Check
Read CLAUDE.md first: several rules (append-only evidence, frozen
signature field orders) are load-bearing.