WP Manifestindependent plugin directory
manifest / users / toms-member-learning-plugin

Member Library Platform releasesself-updates

Canonical WordPress plugin for the member learning platform (TSOL + Liberty Classroom): library content, auth bridge, notifications — one core, per-brand config

by Thrice Agency · github.com/betterbetterbetter/toms-member-learning-plugin · website

0stars
15release downloads
0forks

Install

The author publishes release zips, so WP-CLI can install straight from GitHub:

wp plugin install https://github.com/betterbetterbetter/toms-member-learning-plugin/releases/download/v0.13.0/member-library-plugin.zip

Ships its own WordPress updater (Plugin Update Checker), so new versions show up under Dashboard → Updates.

Readme

Member Library Platform

WordPress plugin providing the member Library back office and the authentication/entitlement/catalogue bridge consumed by the Next.js Library app. One canonical multi-brand core; brand differences are per-install configuration, not forks. It powers Tom's School of Life and Liberty Classroom (and future brands).

See the workspace consolidation record in docs/plans/plugin-consolidation-plan.md and ADR docs/decisions/0001-one-canonical-plugin-brand-via-config.md.

What this plugin is (and is not)

  • Is: the Library content model (courses, series, items, speakers, collections, and Course/Series purchase offers), the WordPress↔app OAuth bridge (library-auth), the catalogue projection + signed webhooks, native MemberPress access groups, member announcements, and the active Liberty LearnDash importer.
  • Is not: site-specific features. TSOL-only features (accountability modal, cookie consent) and TSOL's legacy one-shot data migrations live in the separate TSOL companion plugin (tomschooloflife.com/plugin).

Brand configuration

Brand values resolve PHP constant → wp_option → default via MemberLibrary_Brand. Defaults are deliberately brand-neutral: an unconfigured install reads as a generic member library and ships no brand artwork. A brand sets constants in wp-config.php or the equivalent lowercase WordPress options:

  • TSOL_LIBRARY_BRAND_NAME, TSOL_LIBRARY_BRAND_LIBRARY_MENU_LABEL, TSOL_LIBRARY_BRAND_APP_NAME
  • TSOL_LIBRARY_BRAND_LOGO_URL, TSOL_LIBRARY_BRAND_IMAGE_CSP_SRC (retained compatibility metadata; the generic 403 fallback does not render branding)
  • TSOL_LIBRARY_BRAND_CLIENT_ID

The authentication fallback is deliberately outside the brand system: it is a plain, logo-free 403 page with no project or product name.

Machine identifiers are a frozen contract

The REST namespace tsol-library/v1, all lowercase tsol_* hooks/options/ meta/cron/admin-post actions, the tsol_library_* CPT and taxonomy slugs, the tsol_library_catalogue_webhook_outbox table, the X-TSOL-* headers, and the TSOL_LIBRARY_* wp-config constants are a cross-brand compatibility contract consumed literally by the app and stored in every site's database. They are not branding and are never renamed (see library/docs/architecture/wordpress-plugin-contract.md). The plugin's internal PHP symbols use the MemberLibrary_ prefix; the text domain is member-library.

Optional Access SSO integration

Access Platform SSO is an optional upstream WordPress login source. The Library authentication bridge still loads when it is absent. MemberPress, not Access SSO, is the protected-content authorization authority. Recognized basenames: wp-access-sso/access-platform-sso.php, wp-access-sso-1.1.3/access-platform-sso.php, access-platform-sso/access-platform-sso.php.

Structure

  • member-library-plugin.php — entrypoint: constants, file loading, activation.
  • includes/class-plugin.phpMember_Library_Plugin loader + feature registration.
  • includes/class-brand.phpMemberLibrary_Brand per-install brand config.
  • includes/features/library-auth/ — OAuth bridge, tokens, revocation, account security.
  • includes/features/library-content/ — content model, catalogue, webhook, access groups, environment migration.
  • includes/features/library-notifications/ — member announcements.
  • includes/migrations/liberty-learndash-import/ — Liberty LearnDash import (CLI, host-guarded).
  • tests/ — WP-CLI contract scripts (run via tools/run-contract-tests.sh).

Testing

The tests are WP-CLI contract scripts, not PHPUnit:

tools/run-contract-tests.sh --path=/absolute/path/to/wordpress

Each also runs standalone: wp eval-file tests/<name>.php --skip-themes.

Releases

See RELEASE.md. CI (.github/workflows/ci.yml) lints PHP on every push; release.yml builds a versioned ZIP on a vX.Y.Z tag.

Read the full README on GitHub →

Releases

TagPublishedAssetDownloads
v0.13.0 Sep 3, 2026 member-library-plugin.zip 0
v0.12.0 Sep 3, 2026 member-library-plugin.zip 2
v0.11.0 Sep 3, 2026 member-library-plugin.zip 0
v0.10.2 Sep 3, 2026 member-library-plugin.zip 1
v0.10.1 Sep 3, 2026 member-library-plugin.zip 0
v0.10.0 Sep 3, 2026 member-library-plugin.zip 0
v0.9.1 Sep 3, 2026 member-library-plugin.zip 1
v0.9.0 Sep 3, 2026 member-library-plugin.zip 2
v0.8.1 Sep 2, 2026 member-library-plugin.zip 2
v0.8.0 Sep 2, 2026 member-library-plugin.zip 1
v0.7.1 Sep 2, 2026 member-library-plugin.zip 1
v0.7.0 Sep 1, 2026 member-library-plugin.zip 3
v0.6.0 Sep 1, 2026 member-library-plugin.zip 2