WP Speakeasy releasesself-updates
Speakeasy Wordpress Plugin
by Speakeasy · github.com/speakeasy-marketing-inc/wp-speakeasy · website
Install
The author publishes release zips, so WP-CLI can install straight from GitHub:
wp plugin install https://github.com/speakeasy-marketing-inc/wp-speakeasy/releases/download/v1.0.32/wp-speakeasy.zipShips its own WordPress updater (Plugin Update Checker), so new versions show up under Dashboard → Updates.
Readme
WP Speakeasy
WordPress automation plugin for REST API enhancements and Application Passwords management.
Features
- Application Passwords Enabler: Force-enables WordPress Application Passwords, overriding theme and security plugin restrictions
- REST API for Application Passwords: Programmatically create Application Passwords using plugin API key authentication
- LAP Meta Fields: Exposes Local Area Page custom meta fields to the WordPress REST API
- Auto-Updates: Automatic updates via GitHub releases using Plugin Update Checker
- API Reporting: Reports activation, updates, and health status to external API
- Error Logging: Comprehensive error tracking and dashboard display for debugging
- Admin Interface: Settings page for module management, diagnostics, and error monitoring
Requirements
- WordPress 5.6 or higher
- PHP 7.4 or higher
- Composer (for development)
Installation
Manual Installation
- Download the plugin ZIP file
- Upload to WordPress via Plugins → Add New → Upload Plugin
- Activate the plugin
- Configure settings at Settings → WP Speakeasy
Development Installation
# Clone the repository
git clone https://github.com/speakeasy/wp-speakeasy.git
cd wp-speakeasy
# Install dependencies
composer install
# Symlink to WordPress plugins directory
ln -s $(pwd) /path/to/wordpress/wp-content/plugins/wp-speakeasy
# Activate in WordPress
wp plugin activate wp-speakeasy
Configuration
No configuration required! The plugin works out of the box with:
- Automatic backend reporting to Speakeasy's production server
- Automatic updates from GitHub releases
- Zero-configuration deployment
How It Works
- Install & activate the plugin on a WordPress site
- Plugin auto-generates a unique 64-character API key for this site
- Registers with Speakeasy backend automatically
- Sends daily health checks to monitor plugin status
- Reports errors and updates automatically
- Auto-updates from GitHub when new releases are published
No manual configuration needed - everything works automatically!
Optional Configuration
Only needed if you want to customize default behavior:
// Custom API Endpoint (optional - defaults to Speakeasy production server)
define( 'SPEAKEASY_API_ENDPOINT', 'https://your-custom-endpoint.com/api/wordpress-sites' );
// Custom GitHub Repository (optional - defaults to Speakeasy-Marketing-InC/wp-speakeasy)
define( 'SPEAKEASY_GITHUB_REPO', 'your-org/your-fork' );
// GitHub Token (optional - only needed for private repositories)
define( 'SPEAKEASY_GITHUB_TOKEN', 'ghp_xxxxxxxxxxxx' );
Modules
Application Passwords Enabler
Forces WordPress Application Passwords to be available, even if disabled by:
- Security plugins (Wordfence, etc.)
- Theme functions
- Other plugin filters
Priority: 999 (runs last to override other filters)
LAP Meta Fields
Exposes custom meta fields from Local Area Page templates to the REST API.
Plugin variants: the LAP plugin exists in two versions that store the same content under
different meta keys, with no overlap between them. Both ship a template named localareapage.php,
so the variant cannot be told apart by template name — call GET speakeasy/v1/lap-variant (or
/lap-variant/{page_id}) to find out which a site or page uses, then address the matching route:
| Variant | Route |
|---|---|
| modern | speakeasy/v1/lap-meta/{page_id} |
| legacy_v1 | speakeasy/v1/lap-meta/legacy_v1/{page_id} |
Each route guards its own variant, so calling the wrong one returns 400 variant_mismatch rather
than accepting a write that would persist under a key the template never reads. A page with no LAP
meta yet is written on the route's say-so — which is what allows a page to be created and populated
in one pass — unless the rest of the site is plainly the other variant. See
docs/REST-API.md for full endpoint documentation.
Schema Files: Located in modules/lap-meta/schemas/
Default schema: localareapage.php. Legacy field definitions: localareapage-legacy-v1.php
Adding Custom Schemas
Create a new schema file for your LAP template:
// modules/lap-meta/schemas/your-template.php
<?php
return array(
'your_custom_field' => array(
'type' => 'string',
'single' => true,
'show_in_rest' => true,
'auth_callback' => function() {
return current_user_can( 'edit_posts' );
},
),
);
Development
Running Tests
# Run PHPUnit tests
composer test
# Run with coverage
composer test:coverage
# Check coding standards
composer phpcs
# Auto-fix coding standards
composer phpcbf
# Run static analysis
composer phpstan
Project Structure
wp-speakeasy/
├── wp-speakeasy.php # Main plugin file
├── includes/ # Core classes
│ ├── interface-module.php
│ ├── class-module-manager.php
│ ├── class-simple-updater.php
│ ├── class-error-logger.php
│ ├── class-api-reporter.php
│ └── class-rest-api.php
├── modules/ # Feature modules
│ ├── app-passwords/
│ └── lap-meta/
├── admin/ # Admin interface
│ ├── class-admin-page.php
│ └── views/
├── tests/ # PHPUnit tests
├── composer.json
└── README.md
REST API Usage
Creating Application Passwords Programmatically
The plugin provides a REST API endpoint for creating Application Passwords remotely using the plugin API key.
Endpoint: POST /wp-json/speakeasy/v1/application-passwords
Authentication: Plugin API key via X-Speakeasy-API-Key header
Request:
curl -X POST https://yoursite.com/wp-json/speakeasy/v1/application-passwords \
-H "X-Speakeasy-API-Key: YOUR_PLUGIN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"username": "admin",
"name": "Speakeasy Backend Access"
}'
Response:
{
"success": true,
"password": "abcd 1234 efgh 5678 ijkl 9012",
"username": "admin",
"user_id": 1,
"name": "Speakeasy Backend Access"
}
Features:
- Automatically revokes existing passwords with the same name
- Returns password only once (not stored or logged)
- Full error handling with proper HTTP status codes
- Audit logging for security monitoring
Finding Your Plugin API Key:
- Visit Settings → WP Speakeasy in WordPress admin
- The API key is displayed in the "Backend Registration" section
- Click "Show Full Key" to reveal the complete key
Accessing LAP Meta Fields
# Get page with meta fields (requires Application Password)
curl -X GET "https://yoursite.com/wp-json/wp/v2/pages/123?context=edit" \
-u "username:xxxx xxxx xxxx xxxx"
Generating Application Password Manually
- Navigate to Users → Profile
- Scroll to "Application Passwords" section
- Enter name and click "Add New Application Password"
- Copy the generated password
API Endpoints
The plugin reports to these endpoints (if configured):
POST /activation- Plugin activationPOST /update- Plugin updatesPOST /health- Daily health checksPOST /error- Error reporting
All API calls are non-blocking and fail silently.
Security
- All admin functions require
manage_optionscapability - REST API meta field access requires
edit_postscapability - Nonce verification on all form submissions
- Input sanitization and output escaping throughout
- No sensitive data logged or transmitted
Troubleshooting
Application Passwords Not Appearing
- Check WordPress version (5.6+)
- Ensure HTTPS is enabled
- Visit Settings → WP Speakeasy to verify module status
- Check for conflicting security plugins
Meta Fields Not in REST API
- Verify LAP template is detected (check admin dashboard)
- Ensure schema file exists for your template
- Check REST API endpoint:
/wp-json/wp/v2/pages/{id}?context=edit
Auto-Updates Not Working
- Auto-updates work automatically - no configuration needed
- Check WP Speakeasy admin page for update status
- Use manual "Check for Updates" button to force check
- Verify GitHub repository is accessible (defaults to Speakeasy-Marketing-InC/wp-speakeasy)
- For custom/private repos, ensure
SPEAKEASY_GITHUB_REPOandSPEAKEASY_GITHUB_TOKENare set
Support
For issues, questions, or contributions:
- GitHub Issues: https://github.com/speakeasy/wp-speakeasy/issues
- Email: dev@speakeasy.com
License
GPL-2.0+ - See LICENSE file for details
Credits
Built by Speakeasy using WordPress best practices and following WordPress Coding Standards.
Dependencies
- Plugin Update Checker by Yahnis Elsts
Read the full README on GitHub →
Releases
| Tag | Published | Asset | Downloads |
|---|---|---|---|
| v1.0.32 | Aug 17, 2026 | wp-speakeasy.zip | 130 |
| v1.0.31 | Aug 17, 2026 | wp-speakeasy.zip | 1 |
| v1.0.30 | Aug 11, 2026 | wp-speakeasy.zip | 79 |
| v1.0.29 | Jun 28, 2026 | wp-speakeasy.zip | 8 |
| v1.0.28 | Jun 28, 2026 | wp-speakeasy.zip | 2 |
| v1.0.27 | Jun 28, 2026 | wp-speakeasy.zip | 1 |
| v1.0.26 | Jun 27, 2026 | wp-speakeasy.zip | 3 |
| v1.0.25 | Jun 27, 2026 | wp-speakeasy.zip | 2 |
| v1.0.24 | Jun 22, 2026 | wp-speakeasy.zip | 2 |
| v1.0.23 | Jun 22, 2026 | wp-speakeasy.zip | 1 |
| v1.0.22 | Jun 22, 2026 | wp-speakeasy.zip | 1 |
| v1.0.21 | Jun 22, 2026 | wp-speakeasy.zip | 1 |
| v1.0.20 | Jun 22, 2026 | wp-speakeasy.zip | 1 |
| v1.0.19 | Jun 22, 2026 | wp-speakeasy.zip | 0 |
| v1.0.18 | Jun 22, 2026 | wp-speakeasy.zip | 1 |
| v1.0.17 | Jun 22, 2026 | wp-speakeasy.zip | 1 |
| v1.0.16 | Jun 22, 2026 | wp-speakeasy.zip | 1 |
| v1.0.15 | Jun 22, 2026 | wp-speakeasy.zip | 1 |
| v1.0.14 | Jun 22, 2026 | wp-speakeasy.zip | 0 |
| v1.0.13 | Jun 22, 2026 | wp-speakeasy.zip | 1 |
| v1.0.12 | Jun 22, 2026 | wp-speakeasy.zip | 1 |
| v1.0.11 | Jun 22, 2026 | wp-speakeasy.zip | 1 |
| v1.0.10 | Jun 22, 2026 | wp-speakeasy.zip | 0 |
| v1.0.9 | Jun 22, 2026 | wp-speakeasy.zip | 1 |
| v1.0.8 | Jun 22, 2026 | wp-speakeasy.zip | 0 |