Theme Deployment
Canonical Workflow
1. Edit local child theme
2. Validate PHP syntax: php -l functions.php
3. Check whitespace: git diff --check
4. Deploy to production: ./deploy.sh
5. Clear PHP OPcache: wp flush-opcache flush
6. Purge LiteSpeed cache (structural → full): `curl -ksS --resolve id86.net:443:127.0.0.1 "https://id86.net/?LSCWP_CTRL=purge_all"` (theme/plugin deploys are structural; content-only changes use targeted `PURGESINGLE` — see [LiteSpeed Cache CLI](../04-wp-ops/litespeed-cache-cli))
7. Purge Cloudflare cache
8. Verify origin response
9. Commit and push intended files
For plugin changes, use the same sequence but synchronize the plugin directory to /home/Dmg59ZFtKg6bIws1/id86net/public_html/wp-content/plugins/id86-darkmode/ instead of using the child-theme deploy.sh script.
Deployment Script
Run from the local theme checkout:
cd /home/rezriz/github/Wordpress/wp-dev/themes/develop-internally/id86/id86-child-theme
./deploy.sh
The script uses rsync over SSH to synchronize the local theme directory to the production id86 directory on GC-US-M10 at /home/Dmg59ZFtKg6bIws1/id86net/public_html/wp-content/themes/id86/.
Origin Verification
Cloudflare Access protects the public host. Verify the production origin from GC-US-M10:
curl -ksS --resolve id86.net:443:127.0.0.1 https://id86.net/
Use a cache-busting query parameter during visual or markup checks:
curl -ksS --resolve id86.net:443:127.0.0.1 "https://id86.net/?$(date +%s)"
Post-Deployment Checklist
- Homepage Hero, topic grid, and latest-reference grid render.
- Hero and header Fuse.js search surfaces work.
- Subscribe bar renders before the visible footer.
- Theme stylesheet has a fresh cache-busting URL (
style.css?ver=...). - No PHP syntax errors or unexpected origin errors in logs.
- Cache invalidation confirmed via origin
curlresponse. - At ≤ 1024px, the top bar shows the search trigger, dark-mode toggle, and hamburger; the opened slideout contains
RecommendationsandGitHub(no duplicate dark-mode control). - At ≥ 1025px, the desktop navigation and dark-mode control are visible without the mobile control wrapper.