# MaplePress Plugin - Getting Started Guide This guide will walk you through setting up the MaplePress plugin for both local development and production release. No prior WordPress experience required! --- ## Table of Contents 1. [What is WordPress?](#what-is-wordpress) 2. [Local Development Setup](#local-development-setup) 3. [Production Release Workflow](#production-release-workflow) 4. [Common Tasks](#common-tasks) 5. [Troubleshooting](#troubleshooting) --- ## What is WordPress? **WordPress** is a content management system (CMS) written in PHP. It powers over 40% of websites on the internet. **WordPress Plugin** = A piece of software that adds specific functionality to a WordPress site. Our MaplePress plugin adds cloud-powered search functionality. **Key WordPress Concepts:** - **wp-admin** = WordPress admin dashboard (where you configure plugins) - **wp-config.php** = WordPress configuration file (like a .env file for WordPress) - **wp-content/plugins/** = Directory where all plugins are stored - **Activation** = Turning on a plugin in WordPress - **Settings Page** = Admin interface where users configure your plugin --- ## Local Development Setup ### Prerequisites Make sure you have: - Docker running - Task (taskfile.dev) installed - MaplePress backend running ### Step 1: Start WordPress ```bash # From the infrastructure directory cd cloud/infrastructure/development # Start all services (includes WordPress) task dev:start # OR if using docker-compose directly: docker-compose -f docker-compose.dev.yml up -d ``` **What this does:** - Starts MariaDB (WordPress database) on port 3306 - Starts WordPress on port 8081 - Starts Cassandra cluster (3 nodes) for backend - Starts Redis for caching - Starts Meilisearch for search indexing - Starts SeaweedFS for object storage - Mounts your plugin directory into WordPress **Note:** This starts the entire infrastructure, not just WordPress. The `task dev:start` command will: 1. Start all Docker containers 2. Wait for services to be healthy (this can take 1-2 minutes) 3. Initialize Cassandra keyspaces 4. Show you the status of all running services **Access WordPress:** - Frontend: http://localhost:8081 - Admin: http://localhost:8081/wp-admin **Other Services (for backend development):** - Backend API: http://localhost:8000 (when you start maplepress-backend) - Meilisearch: http://localhost:7700 - SeaweedFS: http://localhost:9333 ### Step 2: Initial WordPress Setup (First Time Only) If this is your first time, WordPress will ask you to set it up: 1. Open http://localhost:8081 in your browser 2. Select language (English) 3. Click "Let's go!" 4. Database settings are already configured (from docker-compose.dev.yml): - Database Name: `wordpress` - Username: `wordpress` - Password: `wordpress` - Database Host: `mariadb` (the container name) - Table Prefix: `wp_` (leave default) 5. Click "Submit" then "Run the installation" 6. Create admin user: - Site Title: "MaplePress Development" - Username: `admin` (or your choice) - Password: (choose a strong password) - Email: your email 7. Click "Install WordPress" 8. Login with your admin credentials **You only need to do this once.** WordPress saves everything in the database. ### Step 3: Configure Plugin for Local Development ```bash # From the plugin directory cd native/wordpress/maplepress-plugin # Run the setup command task dev:setup ``` **What this does:** 1. Creates `wp-config.local.php` with `MAPLEPRESS_API_URL` set to `http://localhost:8000` 2. Modifies WordPress `wp-config.php` to load your local config 3. Pre-configures the plugin to connect to your local backend **Output:** ``` Created wp-config.local.php Added loader to wp-config.php Local development environment configured API URL pre-configured to http://localhost:8000 Go to Settings > MaplePress to enter your API key ``` ### Step 4: Activate the Plugin in WordPress 1. Go to http://localhost:8081/wp-admin/plugins.php 2. Find "MaplePress" in the plugin list 3. Click "Activate" 4. You'll be redirected to Settings → MaplePress ### Step 5: Enter Your API Key 1. You should now be on the MaplePress settings page 2. You'll see: - **API URL** - Pre-filled with `http://localhost:8000` ✓ - **API Key** - Empty (you need to enter this) 3. Get your API key: - If you don't have one yet, follow the backend setup guide: - See `cloud/maplepress-backend/GETTING-STARTED.md` → "Create Test Data" - Or use the quick commands below: ```bash # Register a user and create a site (returns API key) # See backend GETTING-STARTED.md for detailed instructions curl -X POST http://localhost:8000/api/v1/register \ -H "Content-Type: application/json" \ -d '{"email":"test@example.com","password":"TestPassword123!","name":"Test User","tenant_name":"Test Org","tenant_slug":"test-org"}' # Then create a site (save the API key from response) curl -X POST http://localhost:8000/api/v1/sites \ -H "Authorization: JWT YOUR_TOKEN_HERE" \ -H "Content-Type: application/json" \ -d '{"domain":"localhost:8081","site_url":"http://localhost:8081","plan_tier":"free"}' ``` 4. Paste the API key 5. Click "Save Settings & Verify Connection" **If successful:** - Green message: "✓ API connection verified successfully!" - You'll see your site details (Site ID, Tenant ID, Domain, Plan) - Status shows "Active" **If it fails:** - Red error message explaining what went wrong - Check that backend is running: `curl http://localhost:8000/health` - Check API key is valid - See backend docs: `cloud/maplepress-backend/GETTING-STARTED.md` ### Step 6: Start Developing Your local development environment is now ready! **Making code changes:** Option 1: Auto-sync (Recommended) ```bash cd native/wordpress/maplepress-plugin # Watch for changes and auto-sync task watch ``` This will automatically copy changes to WordPress whenever you save a file. Option 2: Manual sync ```bash # After making changes, sync manually task sync ``` Option 3: Direct editing (Advanced) - Plugin is mounted as a volume, so changes are usually reflected immediately - Just refresh your browser after editing PHP files - Some changes require plugin reactivation **Viewing logs:** ```bash # See WordPress debug logs task logs # Access WordPress container shell task shell ``` --- ## Production Release Workflow ### Understanding Production vs Development **Development:** - API URL: `http://localhost:8000` (your local backend) - API Key: Your test API key - Config file: `wp-config.local.php` (git-ignored) **Production:** - API URL: `https://getmaplepress.ca` (production backend) - API Key: User enters their own API key from dashboard - Config file: None (users configure via settings) ### Step 1: Prepare for Release **Clean up local config:** ```bash cd native/wordpress/maplepress-plugin # Remove local development settings task dev:reset ``` This removes: - `wp-config.local.php` (local config file) - Loader code from WordPress `wp-config.php` **Verify production behavior:** 1. Deactivate the plugin in WordPress 2. Delete plugin options: Settings → MaplePress → Delete (if there's an option) 3. Reactivate the plugin 4. Go to Settings → MaplePress 5. Both API URL and API Key should be **empty** ✓ This is what users will see when they install your plugin. ### Step 2: Build Production Zip ```bash cd native/wordpress/maplepress-plugin # Build the distribution package task build ``` **What this does:** 1. Creates `dist/` directory 2. Copies all plugin files EXCEPT: - `wp-config.local.php` (local dev config) - `.git/` (version control) - `node_modules/` (dependencies) - `Taskfile.yml` (development tool) - `composer.json/lock` (PHP dependencies) - `.gitignore` (git config) - `dist/` (avoid nested builds) 3. Creates `dist/maplepress-plugin.zip` **Output:** ``` Plugin built at dist/maplepress-plugin.zip Local dev files excluded from build ``` ### Step 3: Test Production Build Locally (Optional but Recommended) Before releasing, test the production build: ```bash # Extract and verify contents cd dist unzip -l maplepress-plugin.zip # Should NOT contain: # - wp-config.local.php # - Taskfile.yml # - composer.json # - .gitignore # - .git/ # Should contain: # - maplepress-plugin.php (main file) # - includes/ (PHP classes) # - assets/ (CSS/JS) # - readme.txt (WordPress.org readme) # - CHANGELOG.md, TESTING.md, etc. ``` **Test installation:** 1. Copy the zip to a clean WordPress install (or delete current plugin) 2. Go to Plugins → Add New → Upload Plugin 3. Choose `dist/maplepress-plugin.zip` 4. Click "Install Now" 5. Activate the plugin 6. Verify settings page shows: - Empty API URL field ✓ - Empty API Key field ✓ - Placeholder: `https://getmaplepress.ca` ✓ ### Step 4: Release to WordPress.org **WordPress Plugin Directory Submission:** 1. **Create WordPress.org Account** - Go to https://wordpress.org/support/register.php - Create an account (you'll need this to submit plugins) 2. **Submit Plugin for Review** - Go to https://wordpress.org/plugins/developers/add/ - Upload your `dist/maplepress-plugin.zip` - Wait for manual review (can take 2-14 days) - You'll receive an email with SVN repository access 3. **Using SVN (Subversion)** WordPress.org uses SVN, not Git: ```bash # Checkout your plugin's SVN repository # (URL provided in approval email) svn co https://plugins.svn.wordpress.org/maplepress YOUR_LOCAL_DIR cd YOUR_LOCAL_DIR # Directory structure: # /trunk/ - Development version # /tags/ - Released versions (1.0.0, 1.0.1, etc.) # /assets/ - Screenshots, banners, icons ``` 4. **Initial Release (Version 1.0.0)** ```bash # Extract your plugin to /trunk/ cd trunk unzip ../../dist/maplepress-plugin.zip mv maplepress-plugin/* . rmdir maplepress-plugin # Add files to SVN svn add --force * --auto-props --parents --depth infinity -q # Commit to trunk svn ci -m "Initial release v1.0.0" # Create a tag for this version cd .. svn cp trunk tags/1.0.0 svn ci -m "Tagging version 1.0.0" ``` 5. **Add Screenshots and Assets** ```bash # Add to /assets/ directory cd assets # Required files: # - icon-128x128.png (plugin icon) # - icon-256x256.png (retina icon) # - screenshot-1.png (settings page) # - screenshot-2.png (search widget) # - banner-772x250.png (plugin page banner) # - banner-1544x500.png (retina banner) svn add *.png svn ci -m "Add plugin assets" ``` ### Step 5: Version Updates When releasing a new version: ```bash # 1. Update version in plugin files # Edit maplepress-plugin.php: # Version: 1.0.1 # Edit readme.txt: # Stable tag: 1.0.1 # 2. Build new release cd native/wordpress/maplepress-plugin task build # 3. Update SVN trunk cd YOUR_SVN_DIR/trunk # Replace files with new build unzip ../../dist/maplepress-plugin.zip mv maplepress-plugin/* . # Commit to trunk svn stat # See what changed svn ci -m "Update to version 1.0.1" # 4. Create new tag cd .. svn cp trunk tags/1.0.1 svn ci -m "Tagging version 1.0.1" ``` WordPress.org will automatically update users' plugins within 24 hours. --- ## Common Tasks ### Switch Between Local Dev and Production Testing **Enable local development:** ```bash task dev:setup # Restart WordPress docker-compose -f ../../cloud/infrastructure/development/docker-compose.dev.yml restart wordpress ``` **Test production behavior:** ```bash task dev:reset # Deactivate/reactivate plugin in WordPress ``` ### View Plugin in WordPress - **Plugins page:** http://localhost:8081/wp-admin/plugins.php - **Settings page:** http://localhost:8081/wp-admin/options-general.php?page=maplepress ### Check If Plugin Is Active ```bash # From container docker exec maple-wordpress-dev wp plugin list # Should show: # name status # maplepress active ``` ### Manually Inspect Database ```bash # Connect to MariaDB docker exec -it maple-mariadb-dev mysql -u wordpress -pwordpress wordpress # Check plugin options SELECT * FROM wp_options WHERE option_name = 'maplepress_settings'; # Exit exit ``` ### Reset WordPress Completely ```bash # Stop containers docker-compose -f docker-compose.dev.yml down # Delete volumes (WARNING: Deletes all data) docker volume rm maple-wordpress-dev docker volume rm maple-mariadb-dev # Start fresh docker-compose -f docker-compose.dev.yml up -d # You'll need to go through WordPress setup again ``` ### Check Plugin Files in Container ```bash # Access container shell task shell # Inside container: cd /var/www/html/wp-content/plugins/maplepress-plugin ls -la # Check if wp-config.local.php exists cat wp-config.local.php # Should show MAPLEPRESS_API_URL # Check WordPress config has loader grep -A2 "MaplePress local" /var/www/html/wp-config.php ``` --- ## Troubleshooting ### "Task does not exist" Error **Error:** `task: Task "dev" does not exist` **Solution:** The correct command is `task dev:start` (not `task dev`) ```bash cd cloud/infrastructure/development task dev:start # ✓ Correct # NOT: task dev # ✗ Wrong ``` **Available infrastructure tasks:** - `task dev:start` - Start all services - `task dev:stop` - Stop all services - `task dev:status` - Show service status - `task dev:restart` - Restart all services - `task dev:logs` - View logs - `task dev:clean` - Remove all data (destructive) ### "Cannot connect to API" Error **Possible causes:** 1. **Backend not running** ```bash # Check if backend is up curl http://localhost:8000/health # Should return: {"status":"healthy"} # If not, start backend: cd cloud/maplepress-backend task dev # For detailed setup, see: cloud/maplepress-backend/GETTING-STARTED.md ``` 2. **Wrong API URL** - Check Settings → MaplePress - For local dev, should be: `http://localhost:8000` - Not `localhost:8081` (that's WordPress) - Not `https://` (local dev is http) 3. **Invalid API Key** - API key must exist in backend database - Check backend logs for authentication errors ### "Plugin not showing up" 1. **Check plugin directory:** ```bash docker exec maple-wordpress-dev ls -la /var/www/html/wp-content/plugins/ ``` Should see `maplepress-plugin/` 2. **Check main plugin file exists:** ```bash docker exec maple-wordpress-dev ls -la /var/www/html/wp-content/plugins/maplepress-plugin/maplepress-plugin.php ``` 3. **Check plugin header:** ```bash docker exec maple-wordpress-dev head -n 15 /var/www/html/wp-content/plugins/maplepress-plugin/maplepress-plugin.php ``` Should show "Plugin Name: MaplePress" 4. **Restart WordPress:** ```bash docker-compose -f docker-compose.dev.yml restart wordpress ``` ### "API URL not pre-filled" in Local Dev 1. **Check local config exists:** ```bash cat wp-config.local.php ``` Should show `define('MAPLEPRESS_API_URL', 'http://localhost:8000');` 2. **Check WordPress config has loader:** ```bash docker exec maple-wordpress-dev grep -A2 "MaplePress" /var/www/html/wp-config.php ``` Should show loader code 3. **Re-run setup:** ```bash task dev:reset task dev:setup ``` 4. **Deactivate and reactivate plugin:** - Go to http://localhost:8081/wp-admin/plugins.php - Click "Deactivate" under MaplePress - Click "Activate" - Check settings page again ### "Changes not showing up" **For PHP changes:** 1. **Deactivate and reactivate plugin** - WordPress caches plugin code 2. **Or sync manually:** ```bash task sync ``` 3. **Or restart WordPress:** ```bash docker-compose -f ../../cloud/infrastructure/development/docker-compose.dev.yml restart wordpress ``` **For CSS/JS changes:** - Hard refresh browser: Cmd+Shift+R (Mac) or Ctrl+Shift+R (Windows) - Or clear browser cache ### "Permission denied" Errors ```bash # Fix plugin directory permissions docker exec maple-wordpress-dev chown -R www-data:www-data /var/www/html/wp-content/plugins/maplepress-plugin # Restart WordPress docker-compose -f docker-compose.dev.yml restart wordpress ``` ### WordPress Shows "Fatal Error" **Check PHP error log:** ```bash docker exec maple-wordpress-dev tail -f /var/www/html/wp-content/debug.log ``` **Enable WordPress debug mode:** ```bash docker exec maple-wordpress-dev bash -c " grep -q 'WP_DEBUG' /var/www/html/wp-config.php || sed -i \"/That's all, stop editing/i define('WP_DEBUG', true);\ndefine('WP_DEBUG_LOG', true);\ndefine('WP_DEBUG_DISPLAY', false);\" /var/www/html/wp-config.php " ``` **Syntax error in PHP:** - Check PHP syntax: `php -l includes/class-maplepress-admin.php` - Look for missing semicolons, quotes, or brackets ### "Can't access wp-admin" ```bash # Reset admin password docker exec maple-wordpress-dev wp user update admin --user_pass=newpassword ``` ### Build Includes Local Dev Files **Verify build excludes:** ```bash cd dist unzip -l maplepress-plugin.zip | grep "wp-config.local" # Should return nothing unzip -l maplepress-plugin.zip | grep "Taskfile" # Should return nothing ``` **If they're included, rebuild:** ```bash task clean task build ``` --- ## Quick Reference ### Commands Cheat Sheet ```bash # Infrastructure cd cloud/infrastructure/development task dev:start # Start all services task dev:stop # Stop all services task dev:status # Show service status task dev:logs # View logs # Plugin Development cd native/wordpress/maplepress-plugin task dev:setup # Set up local dev (first time) task dev:reset # Reset to production config task sync # Sync changes to WordPress task watch # Auto-sync on file changes task logs # View WordPress logs task shell # Access WordPress container # Production Release task build # Build distribution zip task clean # Clean build artifacts # Testing task lint # Check code style task test # Run tests ``` ### URLs - WordPress Frontend: http://localhost:8081 - WordPress Admin: http://localhost:8081/wp-admin - Plugin Settings: http://localhost:8081/wp-admin/options-general.php?page=maplepress - Backend API: http://localhost:8000 ### WordPress CLI (inside container) ```bash # Access container docker exec -it maple-wordpress-dev /bin/bash # WordPress CLI commands wp plugin list # List plugins wp plugin activate maplepress wp plugin deactivate maplepress wp option get maplepress_settings wp option delete maplepress_settings wp user list # List users wp db query "SELECT * FROM wp_options WHERE option_name LIKE 'maplepress%'" ``` --- ## Next Steps 1. **For Development:** - Follow "Local Development Setup" - Run `task dev:setup` - Start coding! 2. **For First Release:** - Follow "Production Release Workflow" - Build with `task build` - Submit to WordPress.org 3. **Learn More:** - WordPress Plugin Handbook: https://developer.wordpress.org/plugins/ - WordPress Coding Standards: https://developer.wordpress.org/coding-standards/ - Plugin Directory Guidelines: https://developer.wordpress.org/plugins/wordpress-org/ --- **Still stuck? Check:** - `TESTING.md` - Testing scenarios and checklist - `CHANGELOG.md` - Recent changes and updates - Backend docs: `cloud/maplepress-backend/GETTING-STARTED.md` and `API.md`